将两个数据源连接到同一个数据库

时间:2012-10-11 07:35:25

标签: java mysql spring hibernate multi-tenant

我正在开发一个应用程序,我们决定使用the solution provided by Spring寻求多租户架构,因此我们根据参数的值将数据路由到每个数据源。假设此参数是1到10之间的数字,具体取决于我们的客户ID。

但是,这需要在每次添加新数据源时更改应用程序上下文,所以首先我们考虑以下解决方案:

  • 从指向不同IP和相同模式的10个数据源(或更多)开始,但最终都路由到同一个物理数据库。无论我们使用哪种数据源,数据都将在第一种情况下发送到同一模式。
  • 数据将在同一模式中,因此数据源之间将共享同一个表,但每个数据源只能看到每一行(在每个CRUD操作中使用固定的where子句)
  • 当我们遇到性能问题时,我们将创建另一个数据库,将一些客户端迁移到新模式,并将其中一个数据源的IP重新路由到新数据库,这样这个新数据库就可以获得旧数据库的一部分负载

这种方法有什么缺点吗?我担心:

  • ACID属性丢失
  • hibernate sessionFactory和二级缓存的问题
  • 表锁定问题

我们正在使用Spring 3.1,Hibernate 4.1和MySQL 5.5

1 个答案:

答案 0 :(得分:0)

我认为你的spring-link有点过时了,hibernate 4可以自己处理多租户。我建议使用多模式方法,因为设置和初始化新模式在程序上相对容易(例如在注册时),如果你有很多负载(并且你的数据库供应商不提供解决方案)为了使您的应用程序透明)您需要多数据库方法,您应该尝试将tenant-id合并到database-url或那种情况下http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch16.html