0

是否有将最终一致性系统与传统 ACID 系统混合的模式?

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

我有一个事务管理器,可以在非大型机环境(让我们称之为 NewWorld)中使用大型机 tm 和支持 ACID 的关系数据库处理 XA 事务。但我不想使用 XA-Transaction,因为它经常会导致大型机端长时间运行的锁出现问题,而且在许多情况下,我不需要两个世界的所有 ACID 功能。我一直想要一个一致的大型机(旧世界中的所有数据在旧世界中都是一致的)。新世界系统在从主机端读取数据时可以处理不一致的数据(新旧不一致)。用于在 OldWorld 中存储数据的操作很简单,并且保存了不会在功能上失败的“仅添加操作”(它可能在技术上失败,但这应该始终是暂时的失败)。

4

1 回答 1

0

我解决分布式事务需求的想法是,我异步更新旧世界中的数据,并使用事件源数据层(在新世界中)存储需要在旧世界中完成的信息,使用“软-transaction-id's“以防止重复提交到旧世界。这些“软事务ID”将在将数据存储到事件源数据层以用于需要在旧世界中完成的事务时生成。

我没有将“软事务 ID”添加到旧世界数据库的更改,但我可以添加一个新数据库,该数据库可以在“软事务 ID”旁边存储“完成”状态并制作更新旧世界事务的此数据库部分。然后另一个异步进程可以在没有任何锁定的情况下读取状态信息并更新 NewWorld(例如,使用来自事件源存储的数据更新关系模型。并将软事务 ID 标记为完成(“全局一致”) ) OldWorld 的更新将始终检查是否始终首先提交软事务 ID。

当我阅读我的著作时,我觉得这就像全局事务,只是锁定较少。知道我对旧世界的更新将成功运行是必不可少的,否则您需要手动合并过程,它可以处理功能冲突。NewWorld 系统需要处理不一致的全局状态的功能。它可以通过读取关系数据库来完成,并通过分析尚未提交的(进入旧世界数据库)事件存储来模仿旧系统数据请求。对于所有其他事务,我需要使用具有锁定行为的分布式事务。

于 2013-02-19T09:18:18.150 回答