NHibernate vs Entity Framework 6为大量用户提供了性能

Zil*_*ael 14 c# nhibernate entity-framework asp.net-mvc-5

我正在构建应该经常与数据库通信的大型Web应用程序.我想知道我应该使用什么库来进行NHibernate或Entity Framework 6的通信?

这是我的应用程序规范:

  • 用户:为大量用户构建的应用程序,让我们从注册的100,000个用户开始.在线50,000名用户,每个用户可以在第二时间发送最多1条消息.每秒发送15,000条消息.
  • 内存:保持内存处于正常状态是非常重要的,所以我想我应该使用LazyLoad
  • 数据库:数据库结构非常复杂.
  • 用户引擎:目前我正在使用ASP.NET MVC 5 Identity with Entity Framework 6 UserStore.

重要的事情:

  • 舒适对我来说非常重要!
  • 代码优先:我讨厌代码生成时.
  • 性能:性能是最重要的!

Bea*_*692 8

作为使用NHibernate多年的人,我可能不是帮助您在EF或NHibernate之间进行选择的合适人选,但这些是我多年来学到的一些一般建议:

- 控制:我的意思是选择一个ORM,让你控制其功能的每个方面.幸运的是,NHibernate就是其中之一.您可以调用SP和其他数据库对象并将其结果映射到您的对象.您可以编写拦截器来拦截NHibernate功能等等.

- 从一开始就避免一般的ORM问题:其中一个(对性能有很大影响)是SELECT N + 1.

- 使用特定的分析器来查看您的ORM是如何工作的:我认为这对于我们能够看到ORM如何工作以及后面实际运行的查询非常重要.

- 尽可能使用缓存:我不知道EF,但Nhibernate有一个二级缓存机制,可以用来缓存内存中经常读取和静态的数据,以获得更好的性能

- 制定负载测试计划并对应用程序进行压力测试:无论您选择哪种ORM,都有时候应该提高应用程序的性能.我认为最好的方法是查看应用程序如何大规模工作是以某种方式模拟它并尝试调整它,使其工作在最佳状态.

- 制定计划B:ORM旨在帮助我们解决在表格中存储数据并将其用作我们应用程序中的对象的难题.因此,他们正在为我们做一些额外的事情,并且它们比使用表格格式的数据更慢因此,有时候在我们的应用程序中使用普通的表格格式而不是将其转换为对象会更好(例如,显示一个信息列表)

PS这可能是偏离主题但您是否考虑使用NoSql数据库而不是关系数据库?

  • 关闭orm中的一个非常重要的功能(实体跟踪)当然会使一切变得更快,不需要检查第一级缓存中的现有实体,也不需要跟踪它们以自动保持更改等等.然后你回到一个美化的IDbConnection包装器,你必须自己编写代码. (3认同)