2014-11-01 129 views
19

有人能解釋一下我簡單介紹操作變換和CRDT之間的主要區別嗎?OT和CRDT之間的差異

據我所知,兩種算法都允許數據在分佈式系統的不同節點上無衝突地收斂。

在哪個用例中你會使用哪種算法? 據我所知,OT主要用於文本,CRDT更通用,可以處理更高級的結構嗎?

CRDT比OT更強大嗎?


我問這個問題,因爲我想看看如何實現HTML文檔的協作編輯器,並不確定在哪個方向首先看。我看到了ShareJS項目,以及他們嘗試在contenteditables元素上支持瀏覽器上的富文本協作。在ShareJS中沒有任何地方可以看到爲此使用CRDT的任何嘗試。

我們也知道Google Docs使用的是OT,它對於實時版富文檔的工作非常好。 Google是否選擇使用OT,因爲當時CRDT並不是很知名?或者今天它會是一個不錯的選擇?

我也很想聽聽其他用例,比如在數據庫中使用這些算法。 Riak似乎使用CRDT。 OT是否可以用來同步數據庫的節點,並且可以替代Paxos/Zab/Raft?

+0

您應該閱讀爲您設計的TreeDoc紙張https://hal.inria.fr/inria-00445975/document – simbo1905 2015-03-19 20:21:19

回答

21

兩種方法都相似,因爲它們提供了最終的一致性。不同之處在於他們如何做到這一點。一種看待它的方法是:

  • OT通過更改操作來實現。操作通過線路發送,一旦收到併發操作就會被轉換。
  • CRDTs通過更改狀態來完成。在當地的CRDT上進行操作。它的狀態通過線路發送,並與副本的狀態合併。無論多少次或以何種順序合併都無關緊要 - 所有副本都會收斂。

你說得對,OT主要用於文本和不早CRDTs但research表明:

許多文獻OT算法不滿足收斂性 不像什麼是由他們的陳述作者

換言之,CRDT合併是可交換的,而OT轉換功能有時不合。

Wikipedia article on CRDT

在職培訓計劃通常是複雜和不可擴展

有(套,計數器,...),適用於不同類型的問題,不同類型的CRDTs的。有一些是專爲文本編輯而設計的。例如,Treedoc - A commutative replicated data type for cooperative editing

+7

CRDT不僅是基於狀態的,它們有兩種口味。基於狀態的CvRDT(融合複製數據類型)和基於CmRDT(交換複製數據類型)的操作。 – Magnus 2016-01-11 23:04:16

+3

@Magnus 這導致了一個問題,OT和CmRDT有什麼區別? – hrdwdmrbl 2016-12-21 16:32:28

+3

@hrdwdmrbl嗯,CmRDT具有可交換操作的功能,所以您不必轉換它們以正確應用它們。要麼他們合適,要麼你錯過了一些東西,不得不等待手術。 OT處理編輯衝突的問題,增加了時間複雜度,而CRDT增加了空間複雜性。 – 2017-11-06 10:44:36

相關問題