我正在尝试理解NHibernate在与多个数据库(多租户)和一个普通的Web服务器场一起使用时的缓存行为:假设您只有一个非常少的信息,假设您只有一个您的网络应用程序的单个数据库。
为了给出一些背景知识:我们有一个应用程序,我们最近引入了NHibernate:这个应用程序支持一个常见的Web-farm背后的许多实例 - 例如,我们可能正在与50个数据库进行对话(SQL Server 2008后端) )或更多与一个共同的Web场。每个数据库都是相互独立的。
我们已经发现了一个问题 - 在IIS中实例化会话工厂:当发生这种情况时,每个会话占用一些内存,最终我们在内存中有50个相同的会话工厂,并且w3wp.exe
提交大小为800MB或更多的最佳部分:这是不可接受的(IIS工作进程可以从多个w3wp进程池中运行,因此内存就会消失)。因此,我们正在考虑实现单个会话工厂并使用IConnectionProvider实现进行切换(请参阅this blog post ...与我们完全无关,但描述了相同的问题和解决方案)。
从这一点我需要理解的是NHibernate的缓存在这种情况下是如何工作的:我的理解是第一级缓存使用时间戳缓存来跟踪何时更新表,从而何时可以读取从缓存和什么时候不能。所以看起来第一级缓存不起作用,因为我读到的第一级缓存没有分布在Web场中。
可以分发二级缓存,但由于我们遇到了内存问题以及替代方法,似乎无法使用二级缓存(请参阅this question/answer)。 / p>
因此,至少从我到目前为止所阅读/研究的内容来看,似乎缓存不能用于此类部署。如果我天真,请告诉我并纠正我:-)