Algorithm 允许两个程序更新相同数据的算法

Algorithm 允许两个程序更新相同数据的算法,algorithm,communication,semaphore,Algorithm,Communication,Semaphore,这个问题很难回答。我不认为这实际上是可能的,但我想我会张贴它只是为了看看 背景: 我有两个系统 一个是一个大型主机系统,或多或少是不可更改的 另一个是我正在编写的WCF/SQLServer2008系统 系统通信的唯一方式是通过NServiceBus和TCP发送XML数据。然后,XML由每个系统解析并执行操作。通信延迟时间可能长达几分钟 大型机系统是所有数据的实际“所有者”,用户可以随时直接连接到大型机并进行更改。(无法阻止他们进行更新。) 问题: 我需要能够从我的系统发送更新,并确保我没有覆盖大

这个问题很难回答。我不认为这实际上是可能的,但我想我会张贴它只是为了看看

背景:

我有两个系统

  • 一个是一个大型主机系统,或多或少是不可更改的

  • 另一个是我正在编写的WCF/SQLServer2008系统

  • 系统通信的唯一方式是通过NServiceBus和TCP发送XML数据。然后,XML由每个系统解析并执行操作。通信延迟时间可能长达几分钟

    大型机系统是所有数据的实际“所有者”,用户可以随时直接连接到大型机并进行更改。(无法阻止他们进行更新。)

    问题:

    我需要能够从我的系统发送更新,并确保我没有覆盖大型机系统上发生的更改。有办法吗

    示例:

    我向主框架发送订单数量的更新(将其从2更改为4)。但我不知道,一个直接连接到主机的用户已经将订单数量从2更新为7

    当我的4的更新得到处理时,它将覆盖7的更新


    如果我没有将更新发送到4,最终大型机会告诉我关于7的更新。但当它告诉我时,可能会有大型机用户进行另一次更新。

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


    另一种可能是在每个相关表中都有一个“版本”列。每次更新时,版本号都会增加。然后,将版本号与每个更新消息一起发送可以用作检测并发更新的一种方法。但是,它本身不会帮助您自动解决冲突。

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


    另一种可能是在每个相关表中都有一个“版本”列。每次更新时,版本号都会增加。然后,将版本号与每个更新消息一起发送可以用作检测并发更新的一种方法。但是,它本身并不能帮助您自动解决冲突。

    如果您每次更新时都得到了要更新的数据,并将其与新数据进行比较,会怎么样?通过这种方式,它将告诉您自上次检查以来是否有另一次更新。一些澄清:1)是否更新了“将数量更改为X”或“将数量增加X”?2) 只要用户的更新没有被拒绝,它们可以被延迟吗?@EricFrick-我不能从一个系统查询到另一个系统。唯一的通信是基于事件消息的。即使我可以,也无法知道在我查询并发送邮件和其他系统处理邮件之间不会发生更新。@ScottHunter-它们是“将数量更改为X”更改(即我们覆盖)。只要更新没有被拒绝,就可以延迟更新。除了从来没有用户发布过更新之外,在什么情况下应该不拒绝来自您系统的更新?换句话说,一旦用户发布了更新,在什么时候允许您的系统更新覆盖它是可以的?如果您在每次更新时都得到您要更新的数据,并将其与新数据进行比较,会怎么样?通过这种方式,它将告诉您自上次检查以来是否有另一次更新。一些澄清:1)是否更新了“将数量更改为X”或“将数量增加X”?2) 只要用户的更新没有被拒绝,它们可以被延迟吗?@EricFrick-我不能从一个系统查询到另一个系统。唯一的通信是基于事件消息的。即使我可以,也无法知道在我查询并发送邮件和其他系统处理邮件之间不会发生更新。@ScottHunter-它们是“将数量更改为X”更改(即我们覆盖)。只要更新没有被拒绝,就可以延迟更新。除了从来没有用户发布过更新之外,在什么情况下应该不拒绝来自您系统的更新?换句话说,一旦用户发布了更新,在什么时候允许系统的更新覆盖它才可以呢?这两个都是很好的主意。但是,系统之间的消息协议仅限于HL7。我们支持的HL7版本不允许任何版本控制或复制。这两个都是非常好的想法。但是,系统之间的消息协议仅限于HL7。我们支持的HL7版本不允许任何版本控制或复制。