我在现有的Seam 2.2.0 + JPA(Hibernate 3.3.1)应用程序上工作,该应用程序需要转换为“每个客户端的单个数据库”环境,其中每个数据库架构都是相同的。该应用程序在Glassfish上运行,使用IceFaces,并且有几个页面使用Conversations。它还使用单个EJB进行身份验证。不幸的是,将客户分成他们自己的数据库的决定是我无法控制的。
作为概念验证,我已经通过使用Spring JPA抽象,资源本地事务和ThreadLocal将上下文信息的EntityManagerFactory(ies)和DataSource的管理移动到应用程序中,使应用程序知道多个数据库。 。例如,每次用户登录新的EntityManagerFactory时,都会使用与其数据库进行通信的新DataSource进行初始化(如果尚未初始化)。这在具有少数数据库的测试环境中运行良好。
我的问题是,这种方法会扩展到数百个数据库吗?我希望将应用程序服务器添加到负载均衡器以处理额外的负载,但是Hibernate / JPA第一级缓存和/或Seam上下文管理(也就是内存消耗)的开销需要比典型的服务器更多的服务器扩展负载均衡应用?如果是这样,可以通过分配具有大量RAM和/或大型分布式缓存的服务器来减轻这种情况吗?
非常感谢任何见解。
答案 0 :(得分:1)
我使用这种方法开发了一个应用程序,我可以指出的是:
EntityManagerFactory
(Hibernate SessionFactory
)的不同实例,每个实例都需要相当数量的Ram。hibernate.cache.region_prefix
配置参数在使用数据库ID作为缓存前缀的各种实例中使这些名称成为唯一的。