2011-10-05 162 views

回答

0

你不能依靠CouchDB中的文件版本,他們只是不停地允許複製過程中的衝突解決。在compaction期間刪除先前版本的文檔。

CouchDB的維基上的這個more details

+0

嗯 - 我很感興趣的是得到一個DAG的原因是我希望能找到一個衝突版本A的LCA,從而使3路合併可以這樣做。但是如果我不能依靠訪問lca,那麼我不能使用它。 –

3

是,修改序列類似於向無環圖。我在CouchDB replication is like Git中討論過這個問題(在概念層面)。

我想說的是CouchDB的是如Git用於教育的目的。但是有顯着的差異。僅舉幾例:

  • CouchDB中不存儲舊數據,只是舊的版本編號
  • CouchDB的最終截斷很長的修訂歷史記錄,保留性能

因此,我不確定您是否可以在實踐中實現3路合併,因爲您最多隻能對數據進行兩次修改:源代碼和目標。共同的祖先將知道存在,但其價值不會。

雖然這可能是一個問題一般有幾個「作弊」,使它在實踐中不那麼糟糕。

  • validate_doc_update()函數可以防止任意修改。它甚至可以要求更改元數據作爲文檔的一部分進行存儲。 (但是,這是一個應用級溶液)
  • 一大類數據的一大類的應用程序可以是2路合併:例如選擇最新的時間戳;將不同的電話號碼合併爲一組電話號碼;等等

顯然,這些是高度特定應用程序,並不是一般的解決方案。