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

时间:2016-06-02 19:43:54

标签: cassandra

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

  

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

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

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

  

当集群无法满足指定的一致性级别时   客户,Cassandra没有存储提示。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

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

有关详细信息,请参阅here