标签: crdt

OT和CRDT之间的差异

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

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

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

CRDT比OT更强大吗?


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

我们也知道Google Docs正在使用OT,它在富文档的实时版本中运行良好.谷歌是否选择使用OT,因为CRDT当时并不为人所知?或者它今天也是一个不错的选择?

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

algorithm nosql paxos operational-transform crdt

45
推荐指数
2
解决办法
7723
查看次数

无冲突复制数据类型(CRDT)与Paxos或Raft

什么时候使用像CRDT而不是paxos或筏这样的东西是个好主意?

distributed scalability paxos raft crdt

33
推荐指数
3
解决办法
8882
查看次数

什么是分布式系统中的CRDT?

我是分布式系统的新手,我正在尝试深入了解CRDT的概念.我意识到它有三个符号:

Conflict-free Replicated Data Type
Convergent Replicated Data Type
Commutative Replicated Data Type
Run Code Online (Sandbox Code Playgroud)

任何人都可以举例说明我们在分布式系统中使用CRDT吗?非常感谢提前.

distributed-computing distributed-system crdt

15
推荐指数
2
解决办法
5203
查看次数

Logoot CRDT:将并发编辑的数据交错到同一位置?

我想实现Logoot最终收敛的P2P文本编辑,我遇到了一些问题.

我对Logoot的理解是,对象之间的间隔(原始文件中的文本行,但可以是字符或单词)可以根据无界标识符无限划分.这意味着对象的位置不是由其邻居确定的,如在WOOT中(这将需要墓碑),而是由沿着字符串长度的固定数字点确定.结合唯一的站点标识符,这也为我们提供了一个总订单,并实现了最终的融合.

但是......当对同一个点进行并发编辑时,这不会导致问题吗?如果两个断开连接的客户端开始在相同的光标位置写入新的句子然后合并,则他们的句子很有可能进行交错.

下面是我正在谈论的白板示例:

白板

如您所见,站点B和站点C根据Logoot的规则划分"I"和"conquered"之间的间隔,给出了(20,A)和(25,A)位置之间的随机点.但是没有任何东西相对于彼此命令这些点,导致它们在合并时混合.同时,基于邻居的算法可以解决这个问题,因为保留了每个对象的因果链.

以上是一个婴儿示例,但在更一般的情况下,想象一下,如果两个用户想要在两个现有句子之间插入不同的句子.如果其中一个用户碰巧离线,他们不应该回到乱七八糟的混乱!显然,为了保持意图,一句话应该跟随另一句话.

我在阅读论文时遗漏了什么,或者这是Logoot的内在缺点?

(另外,为什么在算法中似乎没有使用记录的时钟值?本文甚至指出每个对象的标识符在没有时钟的情况下必然是唯一的.)

algorithm concurrency text-editor convergence crdt

6
推荐指数
1
解决办法
510
查看次数

是否有 CRDT 支持的数据库?

我遇到过 CRDT,并且对它们的潜力感到兴奋,但我担心它与我所知道的数据库不能很好地配合。每当我必须更新数据库状态时,我仍然需要在写入数据之前进行某种锁定(无论是悲观锁定还是乐观锁定)。除非有一个数据库接受 CRDT、OT 或某种补丁集作为其 DSL 的一部分,并且在内部处理并发?有这样的数据库吗?

\n

database database-design crdt

3
推荐指数
1
解决办法
2448
查看次数

在特定时间可靠地处理消息

我们假设我有一个聊天应用程序.

客户端向聊天发送消息,导致某些Actor的某些命令.现在,我想立即处理他写的内容,并在此聊天中将其提供给其他用户,因此我处理此命令.同时我想告诉自己(一个演员)我需要在聊天记录数据库中存储此消息但不是现在.保存到数据库应该每2分钟发生一次.如果发生崩溃,我应该能够坚持到数据库.

我假设工作流程是这样的:

  1. 用户发送消息
  2. 聊天室演员收到了带有此消息的命令
  3. 我们向所有人广播此消息,并将此消息添加到某种队列以将其保留到聊天历史数据库
  4. 一些持久命令在超过2分钟超时时运行.它会按照到达顺序收集尚未保留的所有传入聊天消息
  5. 使用所有消息运行事务,然后将其从队列中删除.
  6. 如果在3之后的某个地方发生了崩溃并且消息没有持续存在,那么我应该尝试再次坚持它们.如果坚持下去,我就不应该再试图坚持下去.

如何在Akka中构建这样的东西?我应该使用哪些功能/哪种模式?

akka cap-theorem crdt

2
推荐指数
1
解决办法
156
查看次数

CRDT 和 RAFT 协议之间是否存在关系——或者它们是正交的?

以多人网络游戏的用例为例。您立即就会遇到在网络上复制和协调共享状态的问题。

似乎有多种工具针对此问题的某个方面,其中两个工具似乎有重叠:

  1. 无冲突复制数据类型(CRDT) - 用于
  2. RAFT 共识算法-用于在分布式网络中选择事务领导者以帮助达成共识。

我的问题是:CRDT 和 RAFT 协议之间是否存在关系——或者它们是正交的?

distributed-computing distributed-system shared-state raft crdt

2
推荐指数
1
解决办法
945
查看次数

使用Riak CRDT和bitcask后端

我在配置CRDT桶类型和使用bitcask后端时遇到问题.我希望能够使用set类型并保持bitcask的到期功能.

如果我没有指定后端,我可以创建和使用桶类型

sudo riak-admin bucket-type create sets '{"props":{"datatype":"set"}}'
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在道具中指定后端,每当我尝试使用该类型时,riak似乎崩溃了,我失去了联系.

sudo riak-admin bucket-type create sets2 '{"props":{"datatype":"set","backend":"bitcask"}}'
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用存储桶类型时error.log中的唯一日志.如果它有帮助我也尝试指定后端是leveldb和内存以及bitcask没有运气.

2016-10-13 13:41:25.965 [错误] <0.8870.0> gen_fsm <0.8870.0>状态有效终止,原因是:在riak_core_vnode中没有匹配{riak_kv_multi_backend,undefined_backend,<<"bitcask">>}的case子句:vnode_command/3 line 346 2016-10-13 13:41:25.965 [error] <0.8870.0> CRASH REPORT进程<0.8870.0>退出1个邻居,原因是:没有case子句匹配{riak_kv_multi_backend,undefined_backend,<< riak_core_vnode中的"bitcask">>}:gen_fsm中的vnode_command/3行346:终止/ 7行622 2016-10-13 13:41:25.965 [错误] <0.168.0>主管riak_core_vnode_sup以{riak_core_vnode开头的子项未定义start_link,undefined} at <0.8870.0>退出,原因是没有case子句匹配riak_core_vnode中的{riak_kv_multi_backend,undefined_backend,<<"bitcask">>}:vnode_command/3 line 346 in context child_terminated 2016-10-13 13:41: 25.965 [错误] <0.8896.0> gen_fsm <0.8896.0>处于状态就绪已终止,原因是:没有case子句匹配{riak_kv_multi_backend,undefined_backend,<<"bitcask" >>} in riak_core_vnode:vnode_command/3 line 346 2016-10-13 13:41:25.965 [error] <0.8896.0> CRASH REPORT进程<0.8896.0>退出10个邻居,原因是:没有case子句匹配{riak_kv_multi_backend ,undefined_backend,<<"bitcask">>} in riak_core_vnode:vnode_command/3 line 346 in gen_fsm:terminate/7 line 622 2016-10-13 13:41:25.966 [error] <0.8897.0> Supervisor {<0.8897. 0>,poolboy_sup}让孩子riak_core_vnode_worker以riak_core_vnode_worker:start_link([{worker_module,riak_core_vnode_worker},{worker_args,[1370157784997721485815954530671515330927436759040,...]},...])在未定义的出口处启动,原因是没有case子句匹配{riak_kv_multi_backend, undefined_backend,<<"bitcask">>}在riak_core_vnode中:vnode_command/3行346在上下文中shutdown_error 2016-10-13 13:41:25.966 …

erlang nosql riak crdt

2
推荐指数
1
解决办法
156
查看次数