Вопрос

Я кратко рассмотрел NHibernate и Linq2Sql.Я также собираюсь взглянуть на Entity Framework.

Когда я говорю об этих ORM, возникает вопрос: «Они не могут масштабироваться», так могут ли они?Судя по Google, у меня сложилось впечатление, что они способны хорошо масштабироваться, но в конечном итоге я полагаю, что за это нужно платить: стоит ли платить за более богатый и простой бизнес-уровень.

Это было полезно?

Решение

Это хороший вопрос, и, ИМХО, они могут масштабироваться так же хорошо, как и любой собственный DAL.Я использовал только nHibernate, поэтому сосредоточусь только на нем и его функциях, которые могут помочь масштабировать систему.

  • Отложенная загрузка. Поскольку он поддерживает отложенную загрузку, вы можете избежать загрузки ненужных элементов.Конечно, вам нужно остерегаться проблемы с Select n+1, однако в системе есть средства, позволяющие предотвратить это.
  • Нетерпеливая выборка. Существуют различные способы быстрого извлечения объектов, которые могут вам понадобиться, что позволяет избежать дополнительных обращений к SQL.
  • Кэш второго уровня. nHibernate поддерживает кеш второго уровня, который можно использовать для повышения масштабируемости за счет сокращения обращений к БД.Доступны различные поставщики поддержки, которые дают вам некоторую гибкость.
  • Напишите свой собственный SQL. В nHibernate вы можете вызывать хранимые процедуры или предоставлять встроенный SQL-запрос, который будет возвращать ваши объекты.Это позволит вам использовать собственный SQL, если сгенерированный SQL его не сокращает.Например, нетерпеливая загрузка самообъединяющегося дерева с помощью рекурсивного запроса.

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

Я также считаю, что если у вас есть область кода, критичная к производительности, и вы не можете заставить свой ORM работать в соответствии с вашими требованиями, то для этой крошечной области вашего приложения вы можете создать свой собственный уровень DAL.Если вы используете достойный шаблон проектирования, такой как репозиторий, созданный фабрикой, то все, что вам нужно сделать, это заменить реализацию вашего репозитория.

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

Осколки гибернации находится портирован на NHibernate, что позволит осуществлять горизонтальное масштабирование.

Также есть несколько очень крутых лайфхаков, например Вот этот реализовать шардинг.

Итак, ответ — да, NHibernate может масштабироваться без учета постоянства и полностью прозрачным способом.

Просто неверно говорить, что приложения, созданные с помощью ORM, плохо масштабируются.Конечно, это случалось и раньше, когда небрежные или ленивые разработчики злоупотребляли ORM, написав код, генерирующий ужасно неэффективный SQL.Создание производительных приложений означает понимание того, что такое прекрасные абстракции. на самом деле делаю под капотом.Однако не нужно многого, чтобы выбраться из этой ловушки.Использование ORM не означает никогда не открывать профилировщик SQL или Профилировщик NHibernate.

А по поводу утверждения, что SP намного быстрее, читайте этот и этот.И кроме того, ORM (по крайней мере, NHibernate) предоставляют вам довольно простые способы использования SP, если вам когда-нибудь понадобится.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top