我工作的公司有一個網絡系統,一些模塊將用於工作,但並不總是與互聯網連接。 在施工中部署系統Web模塊的最佳解決方案是什麼? 系統無法在數據庫中讀取/寫入。系統在線或離線解決方案
回答
您可以擁有一個在您的網絡服務器上運行的本地數據庫。每隔15分鐘檢查是否有連接,並將更改從本地數據庫傳輸到「真實」數據庫。
我以爲這個解決方案,但因爲Web應用程序可以更改數據庫中的數據,以及在建設。並且有幾個系統同時訪問同一個數據庫的結構。這15分鐘的時間間隔內交易可能不一致。 – 2013-04-25 19:00:06
由於CAP theorem,這個問題沒有完美的解決方案。如果有的話,分佈式系統將變得更加容易,但是:)
我看到它的方式有兩種選擇。所有選項都需要數據客戶端副本,以便客戶端至少可以在斷開連接時讀取數據。
不允許不一致的寫入,只是不一致的讀取。
無論客戶端還是服務器都會在客戶端離開網絡時將數據寫入所有權。允許任何一方擁有數據,另一方必須讀取潛在陳舊的本地數據副本(或者,如果可取的話,可能會產生錯誤,或至少告訴用戶數據已過時)。如果您有多個客戶端同時運行,這將更加困難。
一個類似的方法是,當你知道沒有客戶端在工作時(即在午夜運行你的所有工作),運行所有服務器端寫操作。這很簡單,但它適用於許多應用程序。
允許不一致,然後再處理。當您必須能夠同時寫入斷開連接的網絡的兩端時,這是唯一的方法。 ,有一對夫婦的方式來減輕不一致的問題,但是這取決於你的設計:
如果你可以讓所有的轉換交換(您可以更改轉換的順序和結果將是相同的) ,您可以存儲在客戶端和服務器上執行的轉換,然後在重新連接到服務器時應用客戶端上的任何緩存的轉換。這使得處理不一致性非常簡單。這是ATM在與銀行網絡斷開時所做的 - 它們的交換轉換類似於「從#12345#扣除50美元」。請注意,這仍然可能導致無效狀態 - 用戶可以通過訪問多個與銀行網絡斷開連接的ATM來扣除其賬戶中的更多費用。但是,銀行通過在ATM重新連接到網絡時收取透支費來彌補這一點,因此他們通常不會因此而損失任何資金。
如果衝突很少,您可以告訴客戶端的用戶:「嘿,您是在離線狀態下編寫的,但服務器上的值已更改 - 我應該保留哪個副本?」這有一個問題,您可能必須多次提問,因爲用戶必須對要更改的值執行原子CAS operation,並且可能多個客戶端可能同時重新連接。如果你不小心,這種方法也會受到ABA problem的影響(但這取決於你在做什麼)。
- 1. 線性系統解決方案
- 2. 離線地圖解決方案
- 3. 在Matlab中找到線性系統的解決方案?
- 4. Can Octave:解決線性系統有很多解決方案還是沒有解決方案?
- 5. 多線程解決方案
- 6. 在線和離線幫助系統
- 7. 在線身份驗證解決方案
- 8. 安裝解決方案Sharepoint在線
- 9. 寫生解決方案曲線方程
- 10. Google爲在線/離線wiki提供了一個很好的解決方案?
- 11. 操作系統:Peterson的解決方案
- 12. sympy問題解決線性系統
- 13. 解決帶參數的線性系統
- 14. 使用fsolve解決非線性系統
- 15. 解決二元線性系統+ SAGE
- 16. html離線存儲〜10MB跨瀏覽器解決方案
- 17. 離線反向地理編碼解決方案
- 18. 適用於iOS的離線MapKit解決方案
- 19. 帶路由的離線OpenStreetMaps的任何解決方案?
- 20. 離線數據庫解決方案爲sql服務器
- 21. 的Eclipse朱諾安裝依賴(離線解決方案)
- 22. 解決方案克服「網站由於mysql'max_user_connections'錯誤而離線。」
- 23. 支持離線和關係支持的跨平臺同步解決方案
- 24. 本地化路線解決方案
- 25. TinyMCE:尋找線計數解決方案
- 26. 測試服務總線解決方案
- 27. Python的線程通信解決方案
- 28. KSH +智能測試線解決方案
- 29. sqlite4java多線程支持解決方案
- 30. 線程和信號燈解決方案
類似[這裏](http://stackoverflow.com/questions/271610/strategy-for-offline-online-data-synchronization?rq=1) – Dan 2013-05-21 07:02:15
不要忘了接受一個答案,如果你發現其中一個有用! – Dan 2013-06-20 07:36:37