CouchDB在進行雙向複製時如何處理衝突?Couchdb衝突解決方案
例如: 假設有兩個地址簿數據庫(在服務器A和B中)。有一個Jack的文件,其中包含Jack的聯繫方式。
- 服務器A和B被複制並都有傑克文檔的版本相同。
- 在服務器A中,Jack的手機號碼已更新。
- 在服務器B中,更新了Jack的地址。
- 現在,當我們進行雙向複製時存在衝突。
couchDB如何處理它?如果我們在Java程序中啓動複製,有沒有辦法知道java程序是否有任何衝突?
CouchDB在進行雙向複製時如何處理衝突?Couchdb衝突解決方案
例如: 假設有兩個地址簿數據庫(在服務器A和B中)。有一個Jack的文件,其中包含Jack的聯繫方式。
couchDB如何處理它?如果我們在Java程序中啓動複製,有沒有辦法知道java程序是否有任何衝突?
CouchDB的wiki有一個詳細的explanantion:http://wiki.apache.org/couchdb/Replication_and_conflicts
簡言之:CouchDB的不嘗試合併版本衝突。兩個版本都被複制到兩個副本中。確定性(但從應用程序立場可能是任意的)算法選擇其中之一作爲「官方」版本。它將在兩個副本上選擇相同的版本。只有此版本在默認情況下和視圖中可見。您的應用程序可以查詢其他版本,並根據其需要合併它們(可能涉及用戶通過在屏幕上顯示所有版本)。如果您的應用程序不查找衝突,則兩個更新中的一個將被有效丟失。
如果您沒有使用複製或批量加載API(但是每個文檔的REST API),衝突的更新將不會將其添加到數據庫中,但會被拒絕併產生409錯誤。你必須在嘗試再次更新之前進行合併(就像在Subversion中一樣)。