【问题标题】:Connecting two datasources to the same database将两个数据源连接到同一个数据库
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多