1

我正在开发一个应用程序,我们决定使用Spring 提供的解决方案进行多租户架构,因此我们根据参数的值将数据路由到每个数据源。假设这个参数是一个从 1 到 10 的数字,取决于我们的客户 ID。

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

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

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

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

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

4

1 回答 1

0

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

于 2013-04-28T20:02:16.367 回答