【发布时间】:2013-04-29 04:02:16
【问题描述】:
我正在开发一个应用程序,我们决定使用the solution provided by Spring 进行多租户架构,因此我们根据参数的值将数据路由到每个数据源。假设这个参数是一个从 1 到 10 的数字,取决于我们的客户 ID。
但是,这需要在每次添加新数据源时更改应用程序上下文,因此我们首先考虑了以下解决方案:
- 从 10 个(或更多)指向不同 IP 和相同架构的数据源开始,但最终都路由到相同的物理数据库。无论我们使用哪种数据源,在第一个场景中,数据都将被发送到相同的架构。
- 数据将在同一个架构中,因此同一个表将在数据源之间共享,但每一行只能对每个数据源可见(在每个 CRUD 操作中使用固定的 where 子句)
- 当我们遇到性能问题时,我们将创建另一个数据库,将一些客户端迁移到新架构,并将其中一个数据源的 IP 重新路由到新数据库,这样这个新数据库就会得到旧数据库的部分负载
这种方法有什么缺点吗?我担心:
- ACID 属性丢失
- 休眠 sessionFactory 和二级缓存的问题
- 表锁定问题
我们正在使用 Spring 3.1、Hibernate 4.1 和 MySQL 5.5
【问题讨论】:
-
我建议您让每个租户都可以选择拥有一个单独的数据库,这样您就不必承担监控数据库然后在出现性能问题时迁移到新数据库的负担。跨度>
标签: java mysql spring hibernate multi-tenant