首页 文章

Cassandra:解释写不符合要求的一致性水平

提问于
浏览
0

在观看了Cassandra DS220视频后,我正在通过一个测验,我遇到了一个关于Cassandra写道的声明:

不会回滚不符合一致性要求的写入

这不是我的实际预期,所以我有一些问题:

1)这样的写作甚至可以发生吗?我认为如果一个或两个节点在中间失败,他们可以 . 否则C *将需要两阶段提交
2)以后的书面 Value 会怎样?我从C *文档中了解到提示切换将如何工作:

当群集无法满足客户端指定的一致性级别时,Cassandra不会存储提示 .

但是什么会读修复呢?例如,如果旧值为A且新值为B,则读取修复丢弃B,或者A将被B覆盖?
3)如果我用QUORUM级别读取并且其中一个节点包含B(未完全写入以满足一致性级别),读取的内容将返回什么?

2 回答

  • 0

    当您使用高于一致性级别ONE的任何内容时,如果您未能满足一致性要求,则不会丢弃写入但保留在已设置写入的节点上 . 有两种机制可以解决这个问题 . 第一个是修复,它将副本节点的Merkle树作为反熵过程的一部分进行比较 . 第二个是读取修复,它以定义的读取百分比触发并执行类似的操作:比较所有副本的数据并在需要时进行更新 . 如果您使用QUORUM进行读取,如果您在写入数据库时遇到问题但是仍然不是100%可靠,那么您获取最新数据的可能性会更高 .

  • 0

    写入请求的一致性级别会影响是否写入提示并且写入请求随后失败 . 如果群集由两个节点A和B组成,复制因子为1,则每个行仅存储在一个节点上 . 假设当行K以一致性级别1写入时,节点A关闭 . 在这种情况下,无法满足指定的一致性级别,并且由于节点A是协调器,因此无法存储提示 . 节点B无法写入数据,因为它没有作为协调器接收数据,也没有存储提示 . 如果无法满足客户端指定的一致性级别,协调器将检查已启动但不会尝试写入提示的副本数 . 发生了暗示切换失败,并将返回UnavailableException异常 . 写请求失败,并且未写入提示 .

    欲了解更多信息,请参阅here

相关问题