NHibernate vs Entity Framework 6 для большого количества пользователей

Я создаю большое веб-приложение, которое очень часто связывается с базой данных. Мне интересно, какую библиотеку я должен использовать для связи NHibernate или Entity Framework 6?

Вот мои спецификации приложений:

  • Пользователи:. Приложение, созданное для большого числа пользователей, позволяет начать с 100 000 зарегистрированных пользователей. 50 000 пользователей онлайн, каждый пользователь может отправить до 1 сообщения в секунду. 15 000 сообщений, отправленных каждую секунду.
  • Память: Очень важно сохранить память в нормальном состоянии, поэтому я полагаю, что я должен использовать LazyLoad?
  • База данных: Структура базы данных очень сложная.
  • Двигатель пользователя: В настоящее время я использую идентификатор ASP.NET MVC 5 с Entity Framework 6 UserStore.

Важные вещи:

  • Комфорт очень важен для меня!
  • Первый код: Я ненавижу, когда генерируется код.
  • Производительность: Производительность - самое главное здесь!

Ответы

Ответ 1

Как кто-то, кто использует NHibernate в течение нескольких лет, я, возможно, не был подходящим человеком, чтобы помочь вам выбрать между EF или NHibernate, но вот некоторые общие советы, которые я узнал в эти годы:

- Управляйте. Я имею в виду выбор ORM, который позволяет вам контролировать каждый аспект его функциональности. К счастью для нас, NHibernate является одним из них. Вы можете вызывать SP и другие объекты базы данных и сопоставлять их результаты с вашими объектами. Вы можете написать перехватчики для перехвата функциональных возможностей NHibernate и т.д.

- Избегайте общих проблем с ORM с самого начала: один из них (что сильно влияет на производительность) SELECT N + 1.

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

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

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

- У вас есть план B: ORM разработаны, чтобы помочь нам решить дилемму хранения данных в таблицах и использовать их в качестве объектов в нашем приложении. Таким образом, они делают что-то дополнительное для нас, и они имеют тенденцию быть медленнее, чем использование данных в табличном формате. Поэтому бывают случаи, когда было бы лучше использовать простой табличный формат в нашем приложении, вместо того, чтобы преобразовывать его в объекты (например, возьмем список информации)

P.S. Это может быть вне темы, но вы считаете, что используете базу данных NoSql вместо реляционной?