我正在开发一个应用程序,我们决定使用Spring 提供的解决方案进行多租户架构,因此我们根据参数的值将数据路由到每个数据源。假设这个参数是一个从 1 到 10 的数字,取决于我们的客户 ID。
但是,这需要在每次添加新数据源时更改应用程序上下文,因此我们首先考虑了以下解决方案:
- 从 10 个(或更多)指向不同 IP 和相同架构的数据源开始,但最终都路由到相同的物理数据库。无论我们使用哪种数据源,在第一个场景中,数据都将被发送到相同的模式。
- 数据将在同一个模式中,因此同一个表将在数据源之间共享,但每一行仅对每个数据源可见(在每个 CRUD 操作中使用固定的 where 子句)
- 当我们遇到性能问题时,我们将创建另一个数据库,将一些客户端迁移到新架构,并将其中一个数据源的 IP 重新路由到新数据库,这样这个新数据库就会得到旧数据库的部分负载
这种方法有什么缺点吗?我担心:
- 酸属性丢失
- hibernate sessionFactory 和二级缓存的问题
- 表锁定问题
我们正在使用 Spring 3.1、Hibernate 4.1 和 MySQL 5.5