2012-01-30 81 views
2

这个问题是一个长镜头。我不认为这实际上是可能的,但我想我会张贴它只是为了看到。算法允许两个程序更新同一数据

背景:

我有两个系统。

  1. 一个是一个巨大的大型机系统,或多或少不可改变。

  2. 另一种是WCF/SQL Server 2008中的系统我写。

系统通信的唯一方式是通过NServiceBus和TCP发送XML数据。 XML随后被每个系统解析并执行。通信滞后时间可能有几分钟的时间。

大型机系统的所有数据和用户的实际“拥有者”可直接在任何时间连接至主机并进行更改。 (有没有办法从进行更新阻止他们。)

问:

我需要能够从我的系统发送更新,并确保我没有覆盖这一变化发生在大型机系统。有没有办法做到这一点?

实施例:

我送为订单数量到主框架的更新(它改变从2至4)。但不认得我,直接连接到大型机用户已经更新为2〜7

的订单数量。当我的4更新得到处理,将会改写更新到7

如果我没有送更新到4,最终大型机会告诉我有关更新到7的情况。但是在它告诉我的时候,大型机用户可能会进行另一次更新。

+0

如果您每次更新数据并将其与新数据进行比较时会发生什么?这样它会告诉你自上次检查以来是否还有其他更新。 – 2012-01-30 16:34:33

+0

一些说明:1)更新形式为“将数量更改为X”或“将数量增加X”? 2)只要用户的更新不被拒绝,用户的更新是否可以延迟? – 2012-01-30 16:37:26

+0

@EricFrick - 我无法从一个系统查询另一个系统。唯一的通信是基于事件消息的。即使我可以,也无法知道当我查询和发送消息时以及其他系统处理消息时,不会发生更新。 – Vaccano 2012-03-07 23:44:59

回答

4

的一种方式可能是每次更新都为原始值和每一个相关领域的新值发送。这将使得接收系统能够通过将原始值与它目前在数据库进行比较来检测冲突。您如何解决或标记这些冲突取决于您的域名。

另一种可能性是在每一个相关的表中的“版本”一栏。版本号会在每次更新时递增。随后每个更新消息旁边发送版本号可以用作检测并发更新的手段。但是,它本身并不会帮助你自动解决冲突。

+0

这两个都是非常好的点子。但是,系统之间的消息协议仅限于HL7。我们支持的HL7版本不允许考虑版本或重复。 – Vaccano 2012-03-07 23:48:23

+0

用于版本控制 – 2012-04-13 20:03:00