使用spring和hibernate处理多个数据库

时间:2014-01-27 16:46:46

标签: java hibernate session multi-tenant

我们希望通过基于用户组将数据推送到不同的数据库来水平扩展。这是必需的,因为数据量巨大。现在我们只关注RDBMS。 Spring和hibernate / Eclipse-link是我们的选择。我几乎没有问题,我看到有多次问过类似的问题。我再次问这个问题,因为我想了解更多细节。

使用多个数据库时应遵循的最佳做法是什么?(下面的详细问题)

  1. 多个会话工厂或单个会话工厂?推荐的方法是什么?我看到很多帖子都在谈论创建多个会话工厂,动态数据源实现使用单个会话工厂,并根据用户组提供不同的数据源。使用具有多个用户组的单个会话工厂的任何可伸缩性问题?

  2. 所有会话都与会话工厂或基础数据源相关联?我假设我会根据每个db创建多个连接池吗?

  3. Spring的动态数据源实现可以处理多个数据库还是Hibernate多租户?

  4. 在使用动态数据源时,他们遇到的有关事务管理的问题是什么?除了二级缓存之外,我没有看到任何帖子。

  5. 如果在动态数据源的情况下使用c3P0进行连接池的处理方式?

  6. 上述方法的任何Dos和donts?

1 个答案:

答案 0 :(得分:0)

Hibernate人和Google开发了一个名为Hibernate Shards的项目。它可以满足您的需求,跨多个数据库分片数据。

它提供名为:

的接口
  • org.hibernate.shards.session.ShardedSession
  • org.hibernate.shards.ShardedSessionFactory
  • org.hibernate.shards.criteria.ShardedCriteria
  • org.hibernate.shards.query.ShardedQuery

每一个都扩展了Hibernate的经典界面(名字相似!)

通过使用Hibernate Shards,所有多租户逻辑都落后于Hibernate,大部分时间你都不需要处理它。

所以事务管理仍然存在,在您的情况下,您将拥有一个分布式JTA事务管理器,如果您使用JBoss等应用程序服务器会更容易。