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

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

вы также можете не использовать его, а использовать это: valueinjecter.codeplex.com/… это почти как орм, но у вас есть полный контроль над всем

Omu 29.07.2010 15:47
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
23
1
11 982
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

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

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

Arthur Thomas 23.12.2009 10:29

Использование IQueryables, Includes (активная загрузка), прогнозов - ускорит ваш ORM (проект) ... Подробнее Я добавил еще 2 ссылки в свой прямой ответ на этот пост.

baHI 26.02.2017 13:53

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

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

NHibernate быстрее работает со столбцами идентификаторов, чем EF6.x. И даже сравним по скорости с EF7. Но EF6.x можно сделать действительно быстрым для операций чтения. Смотрите и мой прямой ответ на этом форуме.

baHI 26.02.2017 13:52

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

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

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

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

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

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

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

Другие вопросы по теме