【发布时间】:2012-12-27 09:58:26
【问题描述】:
我在一个 Spring Java EE 应用程序中工作,该应用程序必须处理两个不同的数据源 A 和 B。
因为应用程序需要以一致的方式更新 A 和 B。如果一次更新失败,则整个过程都会失败,必须进行回滚。
我对如何实现应用程序有两种不同的想法:
- 我必须将这两个更新都包含在分布式事务 XA 中。这种方法在性能方面会很昂贵。此外,B 源将很快关闭,保留整个 XA 基础设施可能是一个瓶颈;
- 我可以设置从 db A 到 db B 的 Oracle DB 链接,并让我的应用程序相信它只使用单个数据源和本地事务,而 Oracle 处理更新同步。当 B 将被关闭时,我将简单地删除 B 更新并关闭 DB Link。
你对这两种情况有什么看法?
【问题讨论】:
-
我不太明白第 2 点,您仍然需要更新两个数据库上的两个表。但是,这确实意味着您可能愿意考虑选项 3,materialized view。如果 B 稍微落后也没关系,您可以只更新 A 并在 B 上通过 DB 链接从 A 中提取数据的物化视图...
-
@Ben 我对 dblink 的理解是,它们为您提供了一种访问本地远程表的方法,不是吗?所以我猜我可以在不考虑分布式 TX 问题的情况下更新我的远程表,但我可能错了......
-
有点,是的,但这不像您正在使用单个数据源。如果您必须更新两个数据库上的两个表,它们仍然需要单独更新...
标签: oracle spring transactions dblink xa