2016-08-02 98 views
1

假設我有一個包含兩個屬性的文檔「開始」和「結束」。一個版本可能有開始時間,結束時爲空,反之亦然。我不希望選擇單一修訂版作爲獲勝者,而是希望最終文檔包含修訂版的開始時間,其中不爲空,對於結束部分也是一樣的。在CouchDB中處理衝突

在同步過程中是否有處理此類衝突解決方案的最佳做法?我找到的文檔包含選擇單個修訂版作爲獲勝者的說明,但我想選擇多個轉速的值。

特定於C#/ MyCouch庫的示例將非常棒,但任何一般或其他語言的建議也非常感謝。

回答

1

在複製(又名同步)期間,您無法指定衝突解決的自定義方式。 CouchDB的自動選擇獲獎修訂版本,你不能影響是:

默認情況下,CouchDB中挑選一個任意修改爲使用確定的算法,使得同樣的選擇將在所有的同行進行 的「贏家」, 。

您可以等待複製完成,然後通過執行文檔修訂的特定於應用程序的合併來處理衝突。

尋找到用於Working with conflicting documents的文檔,我發現下面的僞代碼示例:

  1. GET的docID衝突=真
  2. 對於_conflicts陣列中的每個構件: GET的docID轉= XXX 如果在此階段發生任何錯誤,請從步驟1重新啓動。 (可能有其他人已經解決了此衝突並刪除了該版本的競賽)
  3. 執行特定於應用程序的合併
  4. 將_bulk_docs寫入第一個版本的更新,並刪除其他版本的 。