2012-01-30 85 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