Cassandra中的暗示切换(当群集无法满足客户端指定的一致性级别时,Cassandra不会存储提示)

时间:2016-12-26 17:07:58

标签: cassandra cassandra-2.0 consistency

我在博客中遇到了上述内容 http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_about_hh_c.html

令人困惑。所以,假设我有 5节点集群,其中 RF为3 写入一致性 Quorum ,即2个节点< / p>

现在,如果我尝试为给定的特定数据写出三个副本节点中的一些,那么两个就会失效。那么,这是否意味着cassandra不会存储提示(因为它知道它不能满足给定的法定人数的一致性)?并立即拒绝写入或者它会为他们存储提示并作出回应成功吗?

有人可以详细说明一下吗?

2 个答案:

答案 0 :(得分:2)

如果您有RF = 3且2个节点已关闭或无法及时为请求提供服务,则写入请求将失败,并且不会存储提示的切换。只有在满足请求的一致性等级(CL)并且您处于提示的切换窗口内时,才会存储提示的切换。唯一的例外是使用CL = ANY写的请求。

答案 1 :(得分:1)

这里有两种不同的机制。让我举个例子来澄清一下。

假设我有一个 3个节点的群集,其中 3个复制且一致性 Quorum(2)。 这意味着当我写入数据库时​​,我将得到两个响应以满足我的查询。

在满足查询后,节点必须将此写入发送到第3个节点。处理查询的节点尝试将写入发送到第3个节点。该节点当前不可用,这导致节点改为写入提示切换。然后它将成功返回给客户端。

注意在满足一致性后发生暗示切换。提示的切换确保写入到达包含副本的所有节点。

现在您发布的文章中提到了这个的一个例外情况。 一致性级别ANY 是一个一致性级别,只要有一个可以提供请求的节点,就可以通过编写提示切换来满足该级别。