3

我工作的公司有一個網絡系統,一些模塊將用於工作,但並不總是與互聯網連接。 在施工中部署系統Web模塊的最佳解決方案是什麼? 系統無法在數據庫中讀取/寫入。系統在線或離線解決方案

+0

類似[這裏](http://stackoverflow.com/questions/271610/strategy-for-offline-online-data-synchronization?rq=1) – Dan 2013-05-21 07:02:15

+0

不要忘了接受一個答案,如果你發現其中一個有用! – Dan 2013-06-20 07:36:37

回答

0

您可以擁有一個在您的網絡服務器上運行的本地數據庫。每隔15分鐘檢查是否有連接,並將更改從本地數據庫傳輸到「真實」數據庫。

+0

我以爲這個解決方案,但因爲Web應用程序可以更改數據庫中的數據,以及在建設。並且有幾個系統同時訪問同一個數據庫的結構。這15分鐘的時間間隔內交易可能不一致。 – 2013-04-25 19:00:06

0

由於CAP theorem,這個問題沒有完美的解決方案。如果有的話,分佈式系統將變得更加容易,但是:)

我看到它的方式有兩種選擇。所有選項都需要數據客戶端副本,以便客戶端至少可以在斷開連接時讀取數據。

  1. 不允許不一致的寫入,只是不一致的讀取。

    • 無論客戶端還是服務器都會在客戶端離開網絡時將數據寫入所有權。允許任何一方擁有數據,另一方必須讀取潛在陳舊的本地數據副本(或者,如果可取的話,可能會產生錯誤,或至少告訴用戶數據已過時)。如果您有多個客戶端同時運行,這將更加困難。

    • 一個類似的方法是,當你知道沒有客戶端在工作時(即在午夜運行你的所有工作),運行所有服務器端寫操作。這很簡單,但它適用於許多應用程序。

  2. 允許不一致,然後再處理。當您必須能夠同時寫入斷開連接的網絡的兩端時,這是唯一的方法。 ,有一對夫婦的方式來減輕不一致的問題,但是這取決於你的設計:

    • 如果你可以讓所有的轉換交換(您可以更改轉換的順序和結果將是相同的) ,您可以存儲在客戶端和服務器上執行的轉換,然後在重新連接到服務器時應用客戶端上的任何緩存的轉換。這使得處理不一致性非常簡單。這是ATM在與銀行網絡斷開時所做的 - 它們的交換轉換類似於「從#12345#扣除50美元」。請注意,這仍然可能導致無效狀態 - 用戶可以通過訪問多個與銀行網絡斷開連接的ATM來扣除其賬戶中的更多費用。但是,銀行通過在ATM重新連接到網絡時收取透支費來彌補這一點,因此他們通常不會因此而損失任何資金。

    • 如果衝突很少,您可以告訴客戶端的用戶:「嘿,您是在離線狀態下編寫的,但服務器上的值已更改 - 我應該保留哪個副本?」這有一個問題,您可能必須多次提問,因爲用戶必須對要更改的值執行原子CAS operation,並且可能多個客戶端可能同時重新連接。如果你不小心,這種方法也會受到ABA problem的影響(但這取決於你在做什麼)。

相關問題