Производительность ORM (особенно NHibernate) для сложных запросов - PullRequest
10 голосов
/ 01 октября 2009

Моя компания находится в процессе переписывания существующего приложения с нуля. Это приложение, помимо других задач, выполняет сложные запросы SQL к данным заказа и счета-фактуры для создания отчетов о продажах. Запросы строятся динамически в зависимости от того, какие критерии выбраны пользователем, поэтому они могут быть довольно сложными, если выбрано много критериев. В настоящее время производительность приличная, но не отличная.

Теперь для новой версии мы хотели бы использовать ORM, возможно, NHibernate, поскольку он, по-видимому, единственный, который поддерживает Oracle Lite (приложение использует либо Oracle, либо Oracle Lite, в зависимости от того, работает ли оно в режиме подключения или отключения). ). Но меня беспокоит производительность запросов, генерируемых NHibernate. Я раньше работал с другими ORM (Linq to SQL, Entity Framework), но запросы были довольно простыми, поэтому проблем с производительностью не было.

Итак, прежде чем принять решение об использовании ORM или использовании простого SQL, я хотел бы узнать, насколько хорошо эти инструменты обрабатывают такие сценарии, как внешние объединения, подзапросы и т. Д. Как вы думаете, ORM (особенно NHibernate) подходит для использования в сценарии отчетности, описанном выше? Стоит ли беспокоиться о производительности сложных запросов?

Любая обратная связь будет принята с благодарностью

Ответы [ 3 ]

8 голосов
/ 01 октября 2009

См. этот график . На данный момент DataObjects.Net отсутствует, но его результаты по сравнению с EF и NHibernate показаны здесь .

Код теста LINQ для EF: здесь ; версии для других инструментов можно найти в той же папке. Все эти файлы .cs генерируются одним шаблоном T4 , поэтому тесты полностью идентичны. Используемая модель есть Northwind.

Еще несколько ссылок:

6 голосов
/ 01 октября 2009

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

Производительность NHibernate можно настроить (см. Ссылки ниже), а NHibernate имеет надежный механизм кэширования.

http://www.codeproject.com/KB/database/NHibernate_Perf.aspx https://www.hibernate.org/hib_docs/nhibernate/html/performance.html

В конечном итоге производительность будет зависеть от того, кто пишет запросы так, как это делается в SQL.

5 голосов
/ 01 октября 2009

Если вы ищете ORM с полным и эффективным переводчиком LINQ, я рекомендую вам попробовать Entity Framework или DataObjects.Net . Я не уверен в поддержке Oracle Lite. LINQ-переводчик NHibernate еще не закончен.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...