有人可以简单地向我解释运算转换和CRDT之间的主要区别吗?
据我了解,这两种算法均允许数据在分布式系统的不同节点上进行聚合而不会发生冲突。
您将在哪种用例中使用哪种算法?
据我了解,OT主要用于文本,CRDT更通用,可以处理更高级的结构,对吗?
CRDT比OT更强大吗?
我问这个问题是因为我试图了解如何为HTML文档实现协作式编辑器,并且不确定首先要朝哪个方向看。我看到了ShareJS项目,并尝试了在浏览器上支持contenteditables
元素上的富文本协作。在ShareJS中,我找不到任何尝试使用CRDT的尝试。
我们也知道Google Docs正在使用OT,并且对于丰富文档的实时版本来说效果很好。
由于当时还不太了解CRDT,Google是否选择使用OT?还是今天也是一个不错的选择?
我也很想听听其他用例,例如在数据库上使用这些算法。 Riak似乎使用了CRDT。 OT也可以用于同步数据库的节点,并且可以替代Paxos / Zab / Raft吗?
最佳答案
两种方法相似之处在于它们提供最终的一致性。不同之处在于他们的操作方式。一种查看方式是:
没错,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/