Есть ли у кого-нибудь опыт, указывающий на то, какой производительности может ожидать разработчик, выбрав использование ORM (в Django, RoR, SQLAlechemy и т. д.) Вместо SQL и созданных вручную баз данных? Я предполагаю, что существуют сложные проблемы, в том числе вопрос о том, увеличивает ли указание базы данных в рамках ограничений ORM шансы на создание эффективной структуры базы данных (в зависимости от уровня опыта разработчика), а также вопрос о том, насколько хорошо разработчик конструирует либо Запросы на основе SQL или ORM (опять же на основе его / ее опыта). Любая информация, касающаяся этих или внутренних проблем с производительностью, была бы мне действительно интересна.


Мой совет - не беспокойтесь об этом до тех пор, пока вам не понадобится - не оптимизируйте преждевременно. ORM может дать много преимуществ для скорости разработки, читабельности кода и может устранить большое количество повторений кода. Я бы порекомендовал использовать один, если он упростит разработку вашего приложения.
По мере прохождения разработки используйте тесты производительности и профилирование, чтобы определить узкие места в коде, и при необходимости вы можете обойти ORM и использовать ручные запросы там, где они требуются. Обычно вы можете повысить скорость ORM, используя кеширование и индексы базы данных (среди прочего), а затем вы можете решить, где требуются ручные запросы. По большей части производительность ORM, вероятно, будет приемлемой, и преимущества ее использования намного перевесят затраты на производительность.
да, я согласен с этим. ORM может делать что-то приятное, что вы не можете оптимизировать с помощью ручного SQL, в любом случае без настройки.
Использование IQueryables, Includes (активная загрузка), прогнозов - ускорит ваш ORM (проект) ... Подробнее Я добавил еще 2 ссылки в свой прямой ответ на этот пост.
Это будет во многом зависеть от того, с чем вы это сравниваете. Кодер, пишущий код от руки, - это полный взлом, это может быть скорее благом, чем хитом. Ясно, что может пойти и другой путь.
Это также зависит от того, что вы используете в качестве ORM. По моему опыту, Hibernate - настоящая свинья с точки зрения скорости, использования ресурсов и времени запуска. LINQ to SQL, с другой стороны, представляет собой чрезвычайно легкую оболочку SQL, влияние которой вы, вероятно, почти не заметите (если вообще заметите).
NHibernate быстрее работает со столбцами идентификаторов, чем EF6.x. И даже сравним по скорости с EF7. Но EF6.x можно сделать действительно быстрым для операций чтения. Смотрите и мой прямой ответ на этом форуме.
Производительность всегда была второстепенной задачей при разработке / архитектуре большинства DAL Layer. Думаю, пора нам начать подвергать сомнению производительность этих инструментов ORM из-за так называемой простоты разработки, которую они обещают:
Две самые большие проблемы с производительностью в ORM:
Невозможность писать Оптимальный SQL. Вы должны использовать язык объектных запросов, который интерпретируется фреймворком в SQL. В основном это хороший SQL, но довольно часто это не самый эффективный SQL.
Отражение. Большинство фреймворков ORM используют Reflection для заполнения объектов данными из базы данных. Операции отражения дороги, и с увеличением количества нагрузки и данных снижение производительности становится очевидным.
Другие проблемы с производительностью возникают из-за неэффективного проектирования базы данных или модели сущностей из-за тесной связи объектов сущностей с таблицами.
Представление - всегда за и против. Если вы углубитесь в ORM архитектура (см. Мою статью: избегать вредных привычек ORM), вы интуитивно найдете способы сделать это быстрее. Вот еще одна моя статья о том, как сделать EF6x 5x Быстрее (по крайней мере, для ситуаций чтения): EF6.x в 5 раз быстрее
В любом случае, для хорошей производительности, даже с ORM, вам нужно будет создавать представления базы данных, индексы, чтобы проверять запросы, которые генерируются и выполняются ORM, а также настраивать их. С ORM необходима активная загрузка.
вы также можете не использовать его, а использовать это: valueinjecter.codeplex.com/… это почти как орм, но у вас есть полный контроль над всем