有人可以简单地向我解释一下操作转换和 CRDT 之间的主要区别吗?
据我了解,两者都是允许数据在分布式系统的不同节点上无冲突地收敛的算法。
在哪种用例中您会使用哪种算法?
据我了解,OT主要用于文本,而CRDT更通用,可以处理更高级的结构,对吧?
CRDT 比 OT 更强大吗?
我问这个问题是因为我想了解如何实现 HTML 文档的协作编辑器,但不确定首先要朝哪个方向看。我看到了 ShareJS 项目,以及他们在浏览器上支持富文本协作的尝试contenteditables
元素。在 ShareJS 中,我没有看到任何使用 CRDT 的尝试。
我们还知道 Google 文档正在使用 OT,并且它对于丰富文档的实时编辑效果非常好。
Google选择使用OT是因为当时CRDT还不太为人所知吗?或者今天也是一个不错的选择吗?
我也有兴趣了解其他用例,例如在数据库上使用这些算法。 Riak 似乎使用 CRDT。 OT 也可以用于同步数据库节点并作为 Paxos/Zab/Raft 的替代品吗?
两种方法的相似之处在于它们都提供最终一致性。不同之处在于他们如何做到这一点。一种看待它的方法是:
- OT 通过改变来做到这一点运营。操作通过线路发送,并发操作一旦收到就会进行转换。
- CRDT 通过改变来做到这一点state。操作是在本地CRDT上进行的。它的状态通过线路发送并与副本的状态合并。合并多少次或按什么顺序进行并不重要 - 所有副本都会收敛。
你是对的,OT 主要用于文本并且确实早于 CRDT,但是research http://www-sop.inria.fr/orion/COGC/teams/ECOOjournal.pdf表明:
文献中的许多 OT 算法不满足收敛特性
与作者所说的不同
换句话说,CRDT 合并是可交换的,而 OT 转换函数有时则不是。
来自维基百科关于 CRDT 的文章 http://en.wikipedia.org/wiki/Conflict-free_replicated_data_type:
OT 通常很复杂且不可扩展
有不同类型的 CRDT(集合、计数器……)适合不同类型的问题。有些是专为文本编辑而设计的。例如,Treedoc -用于协作编辑的可交换复制数据类型 https://hal.inria.fr/file/index/docid/445975/filename/icdcs09-treedoc.pdf.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)