对于那些了解nhibernate内部工作原理的人,您认为像facebook / myspace这样的大型Web应用程序会使用nhibernate吗?
或者nhibernate是否适合公司网站等低流量网站?即因为其健谈的性质而不是企业准备好了吗?
答案 0 :(得分:9)
NHibernate根本不健谈。关于可扩展性,已经有question on NH's groups,这更多地是关于数据库的复杂性然后是流量,但可能仍然对你有用。
即使在每个ORM上始终存在关于不必要查询的投诉,由于ORM的通用性质,它并不意味着它是健谈的。另一方面,它优化了在手写DAL中优化过于复杂的情况。例如。查询批次或延迟加载。
与其他ORM相比,NHibernate的重量非常轻,并与其强大的功能相比。
如果没有面向对象的业务模型,那么NHibernate(与任何其他ORM一样)可能被认为是过度杀伤,但您需要优化以获得最高性能。例如,我认为Google不会将NHibernate用于其搜索引擎。修改强>
NHibernate的性能和功能并非完全免费。它要求开发人员至少了解关系数据库的基础知识。其他ORM试图隐藏整个关系问题,导致更多未经优化的行为。
答案 1 :(得分:1)
nHibernate是一个专业的笑话。 在我的公司,其使用受到了几个原因的禁止。 由于工具非常无效;你将花费无数个小时试图弄清楚,或者在稀缺的文档中找到替代策略。
更好的是,使用您自己生成的DAL和SP来实现高性能。你将有一个缓存的执行计划,最后这才是真正重要的。
nHibernate没有对memcached的高级支持,如果你想建立一个可扩展的网络解决方案,就像你将要使用的那样。
我在一家社交游戏公司工作,我们特别禁止使用nhibernate。
答案 2 :(得分:0)
NHibernate支持查询缓存,基于主键的二级缓存,以及同一会话中同一实体上重复点击的会话缓存。
这是一个很好的帮助,但只要您遇到负载较大的数据库,就会出现扩展问题。扩展数据库的最佳方法是尽量减少实际使用它的时间。分布式缓存(如memcache)和缓存输出(数据后跟踪视图或html)是扩展应用程序的最佳方法。如果客户经常访问数据库,那么你做错了,ORM是不是。在.NET应用程序中,就像典型的MVC应用程序一样,它具有以下优点:能够使用各种输出缓存,圆环和圆环缓存,以及与NHibernate和ViewModel一起使用的memcache客户端。