这里有些问题在StackOverflow的有关NHibernate和多个数据库(动态连接),解决我认为,最好的解决办法是保持的SessionFactory的缓存(每个数据库)和缓存配置,以更快地构建SessionFactory。缓存的SessionFactory和配置与NHibernate多个数据库
我想知道,如果这种做法是正确的,和主要表现在:什么是每实例和时间内存消耗方面的SessionFactory的“权重”要建?
更多关于我的方法:
众所周知,1号和2级高速缓存住在SessionFactory的“境界”,我们可以假设内存消耗可能(涉及的ISession的开启量,其中包括第一级缓存级别)。
对于第二级缓存级别,在我的情况下,数据库共享相同的模式,并有一些通用只读表,我可以使用全局缓存实现共享所有SessionFactory只读表,这对我的项目听起来不错。
我说错了吗?这种方法可能会带来什么样的性能和内存问题?考虑一个Web应用程序(ASP.NET MVC,而不是Webforms)访问它需要的每个HTTP REQUEST中的数百个(或者可能是数千个)数据库,找到用户数据库并解决对它的访问(获取,使用和部署ISession)。
连接池: 又是怎么回事连接池?它应该有什么样的行为来管理数百或数千个数据库池,就像这种方法一样?一些与NHibernate一起使用的实现可能会有所帮助,或者我需要构建自己的?
我们使用的NHibernate的multinenant设置与约20-30会话工厂,我不记得确切的数字,但内存消耗是越来越对每个租户增加明显较高。您可以使用自定义的'IConnectionProvider'实现穷人的多租户支持,但在这种情况下您将无法使用二级缓存。多租户功能由原始Hibernate(每个多个数据库连接一个会话工厂)支持,并且存在NHibernate的pull请求,在github上实现此功能的一部分 - https://github.com/nhibernate/nhibernate-core/pull/91。 – Vasea 2013-03-25 15:45:55