OT和CRDT之间的区别

有人可以简单地向我解释运算转换和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,但研究表明:

文献中的许多OT算法不能满足收敛性,这与作者的说法不同

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

从CRDT上的Wikipedia文章:

OT通常很复杂且不可扩展

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

一种用于协作编辑的交换复制数据类型。

以上是 OT和CRDT之间的区别 的全部内容, 来源链接: utcz.com/qa/432126.html

回到顶部