在观看了Cassandra DS220视频后,我正在通过一个测验,我遇到了一个关于Cassandra写道的声明:
不会回滚不符合一致性要求的写入
这不是我的实际预期,所以我有一些问题:
1)这样的写作甚至可以发生吗?我认为如果一个或两个节点在中间失败,他们可以 . 否则C *将需要两阶段提交
2)以后的书面 Value 会怎样?我从C *文档中了解到提示切换将如何工作:
当群集无法满足客户端指定的一致性级别时,Cassandra不会存储提示 .
但是什么会读修复呢?例如,如果旧值为A且新值为B,则读取修复丢弃B,或者A将被B覆盖?
3)如果我用QUORUM级别读取并且其中一个节点包含B(未完全写入以满足一致性级别),读取的内容将返回什么?
2 回答
当您使用高于一致性级别ONE的任何内容时,如果您未能满足一致性要求,则不会丢弃写入但保留在已设置写入的节点上 . 有两种机制可以解决这个问题 . 第一个是修复,它将副本节点的Merkle树作为反熵过程的一部分进行比较 . 第二个是读取修复,它以定义的读取百分比触发并执行类似的操作:比较所有副本的数据并在需要时进行更新 . 如果您使用QUORUM进行读取,如果您在写入数据库时遇到问题但是仍然不是100%可靠,那么您获取最新数据的可能性会更高 .
欲了解更多信息,请参阅here