gpt4 book ai didi

.net - 使用 NHibernate 缓存多个数据库的 SessionFactory 和配置

转载 作者:行者123 更新时间:2023-12-02 21:05:54 25 4
gpt4 key购买 nike

StackOverflow 中关于 NHibernate 和多个数据库(动态连接)的一些问题,让我相信最好的解决方案是保留 SessionFactory 的缓存(每个数据库)和配置的缓存,以更快地构建 SessionFactory。

我想知道这种方法是否正确,主要是:就每个实例的内存消耗和构建时间而言,SessionFactory 的“权重”是多少?

更多关于我的方法:

已知第一级和第二级缓存位于 SessionFactory“领域”中,我们可以假设内存消耗可能与打开的 ISession 数量(包括第一级缓存)有关。

对于第二个缓存级别,在我的情况下,数据库共享相同的架构并具有一些通用只读表,我可以使用全局缓存实现,在所有 SessionFactories 之间仅共享只读表,这对我的项目来说听起来不错。

我说得对吗?采用这种方法可能会出现什么样的性能和内存问题?考虑一个访问数百个(甚至数千个)数据库的 Web 应用程序(ASP.NET MVC,而不是 Webforms),在每个 HTTP 请求上,它需要查找用户数据库并解决对其的访问(获取、使用和处置 ISession)。

连接池:那么连接池呢?像这种方法一样,它应该具有什么样的行为来管理数百或数千个数据库的池? NHibernate 当前使用的一些实现可能会有所帮助,或者我需要构建自己的实现?

最佳答案

一些测试证实了一些人所说的关于构建 Configuration 和 SessionFactory 的时间和资源(CPU 和内存),展位很昂贵,但 SessionFactory 更贵得多。但不幸的是,我们只有单独的测试、经验结果,比如我的测试取决于我的类(class)模型。

所以,我一直相信我需要缓存 SessionFactory 和 Configuration,但是如果我们在 Web 解决方案中有数百个数据库,我们就会遇到一个大问题,因为 SessionFactory 需要内存,它是一个“内存吞噬者”,我可以得到接近 400 个实例时出现 OutOfMemoryException,我预计会达到数千个数据库。

好吧,当我们使用 SQLServer 时,我们设计了一个缓存,让每个 SQLServer 实例只有一个 SessionFactory,而不是每个数据库一个,因此在 ConnectionProvider 中我们可以注入(inject)一条 sql 命令 USE 'catalog-name' 准备每个连接,以便每个请求与其各自的数据库正常工作。

我希望其他有同样问题的人也可以探索来自 SQLServer 的资源,尽管有些数据库只允许您通过架构名称而不是数据库(目录名称)来做到这一点。

祝你好运。

关于.net - 使用 NHibernate 缓存多个数据库的 SessionFactory 和配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com