【问题标题】:(Multiple datasources) Mirror data using hibernate+spring(多数据源)使用hibernate+spring镜像数据
【发布时间】:2011-02-18 14:20:30
【问题描述】:

在web应用中使用hibernate+spring+AS400数据库:

有 3 个数据源(每个区域一个),DS 用于澳大利亚,DS 用于英国,DS 用于美国。所有数据源中的模式都是相同的。

现在需要将数据持久化到数据源,规则是主区域(由最终用户使用 UI 选择)应始终用作主数据源来保存数据。此外,如果主要区域不是美国(例如用户选择的英国区域),则数据应同时保存到英国数据源和美国数据源。

我知道打开所有会话工厂并手动管理所有内容的简单手动方法。 http://www.java-forums.org/database/867-hibernate-multiple-databases.html

还有哪些可用的替代方案以及实现此功能的最佳方式?

【问题讨论】:

    标签: hibernate spring datasource ibm-midrange


    【解决方案1】:

    它需要是 ACID 吗?如果没有,我的第一个想法是添加一个 @PostPersist,它将实体添加到一个 JMS 主题,由 3 个客户端读取,每个客户端代表一个数据库。然后,每个客户端将验证实体是否已在其数据库中更新(例如,通过检查乐观锁定列)。

    使用这种方法,您可能会遇到数据一致性问题,并且您需要针对每个客户端的每次故障采取行动。另一方面,您可以避免延迟(这就是为什么您首先拥有 3 个数据源的原因)。

    但实际上,有几种可能的解决方案:-)

    【讨论】:

    • 不幸的是,我无法引入 JMS,但必须仅使用 spring+hibernate 和可能的一些数据库驱动程序支持(如果可用以确保将数据写入多个数据源)。分布式事务是一个更大的野兽。此设置的主要目的是将 USA 数据源作为跨区域的所有持久数据的超集。 (如果美国数据源有问题,那就繁荣!!但现在假设美国数据源具有高可用性并支持故障转移有这样的问题)
    【解决方案2】:

    系统级 (iSeries) 方法是启用将澳大利亚和英国数据源的远程日志记录到美国站点,并让美国站点将日志更改应用到其本地 DB2。请注意,DB2/400 上的 SQL 源始终被记录(以提供提交控制功能),因此您只需要启用远程记录。有关此功能的概述,请转至 http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fcl%2Fapyjrnchg.htm 或类似内容,具体取决于您的操作系统版本。

    开发您自己的应用日志更改的程序的替代方法是使用其中一个打包的复制解决方案——IBM DataReplicator、Vision Solutions 的 ODS/ODM 等。

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 2014-07-24
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2012-10-15
      • 2014-08-21
      • 2013-07-05
      相关资源
      最近更新 更多