Стоимость выполнения ORM

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


person jmans    schedule 16.01.2009    source источник
comment
вы также можете не использовать его и использовать это: valueinjecter.codeplex.com/ это почти как orm, но у вас есть полный контроль над всем   -  person Omu    schedule 29.07.2010


Ответы (5)


Мой совет - не беспокойтесь об этом до тех пор, пока вам не понадобится - не оптимизируйте преждевременно. ORM может обеспечить много преимуществ для скорости разработки, читабельности кода и может устранить большое количество повторений кода. Я бы порекомендовал использовать один, если он упростит разработку вашего приложения.

По мере прохождения разработки используйте тесты производительности и профилирование, чтобы определить узкие места в коде, и при необходимости вы можете обойти ORM и использовать ручные запросы там, где они необходимы. Обычно вы можете повысить скорость ORM, используя кеширование и индексы базы данных (среди прочего), а затем вы можете решить, где требуются ручные запросы. По большей части производительность ORM, вероятно, будет приемлемой, а преимущества ее использования намного перевешивают стоимость производительности.

person Tim Wardle    schedule 16.01.2009
comment
да, я согласен с этим. ORM может делать что-то приятное, что вы, возможно, не сможете оптимизировать с помощью ручного SQL без настройки в любом случае. - person Arthur Thomas; 23.12.2009
comment
Использование IQueryables, Includes (активная загрузка), прогнозов - ускорит ваш ORM (проект) ... Подробнее Я добавил еще 2 ссылки в свой прямой ответ на этот пост. - person baHI; 26.02.2017

Производительность всегда была второстепенной задачей при разработке / архитектуре большинства DAL Layer. Я думаю, что пора нам начать подвергать сомнению производительность этих инструментов ORM из-за так называемой простоты разработки, которую они обещают:

Две самые большие проблемы с производительностью в ORM:

  1. Невозможность писать Оптимальный SQL. Вы должны использовать язык объектных запросов, который интерпретируется платформой в SQL. В основном это хороший SQL, но довольно часто это не самый эффективный SQL.

  2. Отражение. Большинство фреймворков ORM используют Reflection для заполнения объектов данными из базы данных. Операции отражения дороги, и с увеличением количества нагрузки и данных снижение производительности становится очевидным.

Другие проблемы с производительностью возникают из-за неэффективного проектирования базы данных или модели сущностей из-за тесной связи объектов сущностей с таблицами.

person Ahmad    schedule 24.01.2009

Это также зависит от того, что вы используете в качестве ORM. По моему опыту, Hibernate - настоящая свинья с точки зрения скорости, использования ресурсов и времени запуска. LINQ to SQL, с другой стороны, представляет собой чрезвычайно легкую оболочку SQL, влияние которой вы, вероятно, почти не заметите (если вообще заметите).

person TheSmurf    schedule 16.01.2009
comment
NHibernate быстрее работает со столбцами идентификаторов, чем EF6.x. И даже сравним по скорости с EF7. Но EF6.x можно сделать очень быстрым для операций чтения. Смотрите и мой прямой ответ на этом форуме. - person baHI; 26.02.2017

Это будет во многом зависеть от того, с чем вы это сравниваете. Кодер, пишущий код от руки, - это полный взлом, это может быть скорее благом, чем хитом. Ясно, что может пойти и другой путь.

person BCS    schedule 16.01.2009

Производительность - всегда за и против. Если вы углубитесь в архитектуру ORM (см. Мою статью: избегайте вредных привычек ORM), тогда вы интуитивно найдете способы сделать это быстрее. Вот еще одна моя статья о том, как сделать EF6x в 5 раз быстрее (по крайней мере, для ситуаций чтения): EF6.x в 5 раз быстрее

В любом случае для хорошей производительности даже с ORM вам нужно будет создавать представления базы данных, индексы, а также проверять запросы, которые генерируются и выполняются ORM, а также настраивать их. С ORM необходима активная загрузка.

person baHI    schedule 26.02.2017