据我所知,两者都是允许数据在分布式系统的不同节点上没有冲突地收敛的算法。
在哪个用例中你会使用哪种算法?
据我所知,OT主要用于文本,CRDT更通用,可以处理更先进的结构?
CRDT比OT更强大吗?
我问这个问题是因为我正在试图看看如何实现一个HTML文档的协作编辑器,不知道在哪个方向先看。我看到了ShareJS项目,他们试图在浏览器上支持contenteditables元素上的丰富文字协作。没有任何地方在ShareJS我看到任何尝试使用CRDT。
我们也知道,Google文档正在使用OT,它对于实时文件的丰富文档来说非常有用。
Google是否选择使用OT,因为CRDT当时不是很知名?还是今天也是个好选择?
我也有兴趣听到其他用例,就像在数据库上使用这些算法一样。 Riak似乎使用CRDT。 OT可以用来同步数据库的节点,也可以替代Paxos / Zab / Raft吗?
> OT通过改变操作来做到这一点。操作通过线路发送,一旦接收到并发操作,它们将被转换。
> CRDT通过改变状态来实现。操作是在当地CRDT上进行的。它的状态通过电线发送并与副本的状态合并。无论多少次或合并的顺序如何 – 所有副本都会收敛。
你是对的,OT主要用于文本,并且早于CRDT,但research显示:
many OT algorithms in the literature do not satisfy convergence properties
unlike what was stated by their authors
换句话说,CRDT合并是可交换的,而OT转换功能有时不是。
OTs are generally complex and non-scalable
有不同种类的CRDT(集合,计数器,…)适用于不同类型的问题。有一些是专为文本编辑而设计的。例如,Treedoc – A commutative replicated data type for cooperative editing。