0

混合最终一致性系统和传统ACID系统是否有任何模式?混合最终一致性系统和传统ACID系统

我想在大型机上的某些(至少两个)遗留系统中存储需要类似ACID事务的数据。这些大型机数据库(我们称之为OldWorld)在同一个进程中的同一个事务管理器下运行,因此大型机系统的一致性不成问题。

我有一个事务管理器,可以在非大型机环境(我们称之为NewWorld)中处理与mainframe-tm和ACID-capable关系数据库的XA事务。 但是我不想使用XA-Transaction,因为它经常会在大型机端长时间运行的锁上造成麻烦,并且在很多情况下我不需要所有的ACID特性。我一直想要一个一致的大型机(OldWorld中的所有数据在OldWorld中都是一致的)。当NewWorld系统从主机端读取数据时,它可以处理不一致的数据(新旧之间的不一致)。用于在OldWorld中存储数据的操作非常简单,并节省了无法在功能上失败的“添加操作”(它可能会在技术上失败,但这应该总是暂时失败)。

回答

0

我的想法是为了解决分布式事务的需要,我更新OldWorld中的数据并使用事件源数据层(在NewWorlds中)存储信息,需要在OldWorld中完成,使用“soft-transaction-id's”来防止重复提交给OldWorld。这些“soft-transaction-id's”将在将数据存储到事件源数据层时生成,以用于需要在OldWorld中完成的事务。

我没有修改将我的“soft-transaction-id”添加到OldWorld-Databases,但我可以添加一个新的数据库,可以在“soft-transaction-id”旁边存储“完成” “并将这个数据库的更新作为旧世界事务的一部分。然后,另一个异步进程可以读取状态信息而不用任何锁定,并更新NewWorld(例如,使用来自事件采购商店的数据更新关系模型,并将soft-transaction-id标记为完成(“全局一致”) )OldWorld的更新将始终检查soft-transaction-id是否始终首先提交。

当我通读我的文章时,我感觉它就像是全局事务,只是锁定更少。我对OldWorld的更新将会成功的知识是必不可少的,不需要手动合并过程,它可以处理功能冲突。 NewWorld系统需要处理不一致的全局状态的功能。它可以通过读取关系数据库并通过分析尚未提交(进入OldWorld-Database)事件存储中的OldSystem DataRequest来完成。对于所有其他交易,我需要使用分布式交易和锁定行为。