是否有对cockroachdb读/写的更好解释?

时间:2018-12-17 15:52:41

标签: cockroachdb

背景:我来自Oracle多年的经验。大约3年前,从Cassandra / DSE的分布式路径开始。我对Cassandra有很好的了解。在过去的一个月中,我听说过多次提及cockroachdb。所以现在,正如我对cassandra所熟悉的那样,我把这个曲线球扔了下来看看。 cockroachdb的写法听起来很像cassandra-使用QUORUM的客户端CL(我不相信cockroachdb使用不可变的文件,但是更像是具有物理行(kv对)的RDBMS)。话虽这么说,我也很了解Cassandra如何读取数据-但关于cockroachdb的读取机制并没有任何真正好的文档/视频/讨论。

让我们假设这种情况:

3个节点-a,b和c
RF = 3
领导者(节点“ a”)获得写请求
写入2个节点('a'和'b'-节点'c'关闭)
领袖承认写
领导者关闭(节点“ a”关闭),而节点“ c”恢复
领导者成为节点'c'

上方读取已写入的数据

由于C没有得到更改,因此向客户端显示什么?是否也达到法定人数?如果是这样,它是否在读取期间“修复”了数据?等等。在某些时候,某些东西“修复”了数据。在卡桑德拉(Cassandra)中,更改保存3个小时后才能掉落(然后必须进行修复)。那蟑螂呢?如何将“丢失的更改”发送到不可用的节点。

我不认为这些讨论水平记录得很好,或者至少对我来说不是。

-吉姆

1 个答案:

答案 0 :(得分:1)

您不清楚问题的发生时间,这使您的问题陈述感到困惑-不清楚A在C成为新领导者之前或之后去世。

之所以如此重要,是因为当节点C重新启动时,除非它用木筏日志“捕捉”,否则它将无法参加领导人选举,这是迄今为止提交的历史记录。在C拥有A和B拥有的所有数据之前,它不会成为新的领导者。

如果节点A在C赶上之前就死了,那么将不再有任何引导者,并且范围将变得不可用(读/写将停止)。

这澄清吗?