有人可以简单地向我解释运算转换和CRDT之间的主要区别吗?

据我了解,这两种算法均允许数据在分布式系统的不同节点上进行聚合而不会发生冲突。

您将在哪种用例中使用哪种算法?
据我了解,OT主要用于文本,CRDT更通用,可以处理更高级的结构,对吗?

CRDT比OT更强大吗?

我问这个问题是因为我试图了解如何为HTML文档实现协作式编辑器,并且不确定首先要朝哪个方向看。我看到了ShareJS项目,并尝试了在浏览器上支持contenteditables元素上的富文本协作。在ShareJS中,我找不到任何尝试使用CRDT的尝试。

我们也知道Google Docs正在使用OT,并且对于丰富文档的实时版本来说效果很好。
由于当时还不太了解CRDT,Google是否选择使用OT?还是今天也是一个不错的选择?

我也很想听听其他用例,例如在数据库上使用这些算法。 Riak似乎使用了CRDT。 OT也可以用于同步数据库的节点,并且可以替代Paxos / Zab / Raft吗?

最佳答案

两种方法相似之处在于它们提供最终的一致性。不同之处在于他们的操作方式。一种查看方式是:

  • OT通过更改操作来实现。操作通过线路发送,并发操作在收到后即进行转换。
  • CRDT通过更改状态来实现。在本地CRDT上进行操作。其状态通过网络发送,并与副本状态合并。合并多少次或以什么顺序无关紧要-所有副本都收敛。

  • 没错,OT主要用于文本,并且早于CRDT,但是research显示:



    换句话说,CRDT合并是可交换的,而OT转换功能有时不是。

    Wikipedia article on CRDT:



    有不同类型的CRDT(集合,计数器等)适用于不同类型的问题。有一些是专为文本编辑而设计的。例如,Treedoc-A commutative replicated data type for cooperative editing

    关于algorithm - OT和CRDT之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26694359/

    10-11 09:33