Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra中的提示切换(当集群无法满足客户端指定的一致性级别时,Cassandra不存储提示)_Cassandra_Cassandra 2.0_Consistency - Fatal编程技术网

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

Cassandra中的提示切换(当集群无法满足客户端指定的一致性级别时,Cassandra不存储提示),cassandra,cassandra-2.0,consistency,Cassandra,Cassandra 2.0,Consistency,我在博客上看到了上面提到的这句话 这很令人困惑。因此,假设我有5个节点集群,其中RF为3个,而写入一致性为仲裁,即2个节点 现在,如果我尝试写一些东西,在给定特定数据的三个副本节点中,有两个失败了。所以,这是否意味着cassandra不会存储提示(因为它知道它首先无法满足给定的仲裁一致性)?并立即拒绝这封信,否则它会为他们存储提示,并给出成功的回应 有人能详细说明一下吗?如果您的RF=3且2个节点停机或无法及时为请求提供服务,则写入请求将失败,并且不会存储提示的切换。只有在满足请求的一致性级别

我在博客上看到了上面提到的这句话

这很令人困惑。因此,假设我有5个节点集群,其中RF为3个,而写入一致性仲裁,即2个节点

现在,如果我尝试写一些东西,在给定特定数据的三个副本节点中,有两个失败了。所以,这是否意味着cassandra不会存储提示(因为它知道它首先无法满足给定的仲裁一致性)?并立即拒绝这封信,否则它会为他们存储提示,并给出成功的回应


有人能详细说明一下吗?

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

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

这里有两种不同的机制。让我举个例子来说明

假设我有一个由3个节点组成的集群,具有3个复制和一致性Quorum(2)。 这意味着当我写入数据库时,我必须得到两个响应来满足我的查询

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

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


现在有一个例外,你在文章中提到过一致性级别ANY是一个一致性级别,只要有一个节点可以为请求提供服务,就可以通过编写提示切换来满足该一致性级别。

这里有两种不同的机制。让我举个例子来说明

假设我有一个由3个节点组成的集群,具有3个复制和一致性Quorum(2)。 这意味着当我写入数据库时,我必须得到两个响应来满足我的查询

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

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


现在有一个例外,你在文章中提到过一致性级别ANY是一个一致性级别,只要有一个节点可以为请求提供服务,就可以通过编写提示切换来满足该一致性级别。

如果任何节点无法及时为请求提供服务,则根据文档,它将存储提示。您说过它不会存储,为什么?在您的情况下,只有当写请求能够满足指定的一致性级别(CL=QUORUM)时,才会存储提示。如果是这样,则每当我在写入时出现超时异常时。这意味着它无法满足我的一致性级别,在这种情况下,将不会存储提示。是吗?请看一下这个博客。它说cassandra将在上述情况下保持提示切换。这里需要澄清的是,如果您从1个节点收到超时异常,但其他2个节点成功写入,则将为超时的节点存储提示切换。但是,如果您已经关闭了一个节点(我就是这么想的),并且第二个节点有一个超时,那么写入将无法满足CL,失败的写入将发送到客户端,并且不会存储任何提示的切换。很抱歉造成混淆,我在前面的回答中应该说得更清楚一些,但就C*用例而言,这还远远不够。如果任何节点无法及时为请求提供服务,那么根据文档,它将存储提示。您说过它不会存储,为什么?在您的情况下,只有当写请求能够满足指定的一致性级别(CL=QUORUM)时,才会存储提示。如果是这样,则每当我在写入时出现超时异常时。这意味着它无法满足我的一致性级别,在这种情况下,将不会存储提示。是吗?请看一下这个博客。它说cassandra将在上述情况下保持提示切换。这里需要澄清的是,如果您从1个节点收到超时异常,但其他2个节点成功写入,则将为超时的节点存储提示切换。但是,如果您已经关闭了一个节点(我就是这么想的),并且第二个节点有一个超时,那么写入将无法满足CL,失败的写入将发送到客户端,并且不会存储任何提示的切换。很抱歉造成混淆,我在前面的回答中应该说得更清楚一些,但就C*用例而言,这一点还远远没有解决。那么为什么人们说暗示切换提供完全写可用性()?当满足CL时,即使我们不存储提示,写操作也是正常的。完全写可用性是a