OT和CRDT之间的差异

时间:2014-11-01 23:28:46

标签: algorithm paxos operational-transform crdt nosql

有人可以简单解释一下Operational Transform和CRDT之间的主要区别吗?

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

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

CRDT比OT更强大吗?


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

我们也知道Google Docs正在使用OT,它可以很好地用于丰富文档的实时版本。 谷歌是否选择使用OT,因为CRDT当时并不为人所知?或者今天它也是一个不错的选择吗?

我也有兴趣了解其他用例,比如在数据库上使用这些算法。 Riak似乎使用CRDT。 OT也可用于同步数据库的节点,是Paxos / Zab / Raft的替代品吗?

1 个答案:

答案 0 :(得分:30)

两种方法都相似,因为它们提供了最终的一致性。不同之处在于他们如何做到这一点。看待它的一种方法是:

  • OT通过更改操作来实现。通过线路发送操作,并且一旦接收到并发操作就转换。
  • CRDT通过更改状态来实现。操作在本地CRDT上进行。它的状态通过线路发送,并与副本的状态合并。合并的次数或顺序并不重要 - 所有副本都会收敛。

你是对的,OT主要用于文本并且早于CRDT,但research表明:

  

文献中的许多OT算法不满足收敛性质   不像他们的作者所说的那样

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

来自Wikipedia article on CRDT

  

OT通常很复杂且不可扩展

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