2012-12-27 101 views
2

我的工作分布于具有处理两个不同的数据源,A和B.避免与数据库链接

当应用程序需要以一致的方式来更新A和B Spring的Java EE应用程序的事务。如果一次更新失败,则整个过程失败并且必须进行回滚。

我对如何实现应用两种不同的思路:

  1. 我必须附上双方在分布式事务XA更新。这种方法在性能方面将会很昂贵。而且,B源很快就会关闭,保持整个XA的基础设施可能是瓶颈;
  2. 我可以建立一个从数据库A到数据库B的Oracle数据库链接,并让我的应用程序相信只使用单一数据源和本地事务,而Oracle则负责更新同步。当B关闭时,我将简单地删除B更新并关闭DB链接。

您对这两种情况有什么看法?

+0

我不太明白第2点,你仍然需要更新两个数据库上的两个表。但是,这确实意味着您可能愿意考虑选项3,[实例化视图](http://docs.oracle.com/cd/E11882_01/server.112/e25789/schemaob.htm#CNCPT411)。如果没关系,如果B略微落后,你可以只更新A并且具有物化视图B通过数据库链接从A拉取数据... – Ben

+0

@我对dblink的理解是,它们为您提供了一种方式访问远程表,因为它们是本地的,不是吗?所以我猜想我可以更新我的远程表而不关心分布式TX问题,但我可能是错的... –

+0

有点儿,但它不像你在使用单个数据源。如果你必须更新两个数据库中的两个表,他们仍然需要单独更新...... – Ben

回答

0

使用数据库链接的查询将隐式地在Oracle中启动分布式事务。所以你得到的开销与处理应用程序中的XA和两个数据源相同。

我们一直在使用XA,它从来都不是瓶颈。别担心。