Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 3.0 - Fatal编程技术网

使用Cassandra编写时未达到写入一致性

使用Cassandra编写时未达到写入一致性,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我无法理解在写入过程中无法达到所需写入一致性级别的情况。例如,假设我有3个节点,其中两个在一个数据中心DC1中,另一个在另一个数据中心DC2中。网络拓扑策略。现在,如果我使用一致性级别3编写,并且其中一个节点已关闭,那么会发生什么情况? 由于2个节点已启动,它们将能够完成写入过程,但是由于无法满足一致性级别,因此协调器节点将向客户端返回写入错误。 写入2个节点的数据会发生什么变化?客户端将不希望任何节点中有任何数据,因为他收到了写入错误 根据上面的链接,Cassandra不会回滚写操作 上面

我无法理解在写入过程中无法达到所需写入一致性级别的情况。例如,假设我有3个节点,其中两个在一个数据中心DC1中,另一个在另一个数据中心DC2中。网络拓扑策略。现在,如果我使用一致性级别3编写,并且其中一个节点已关闭,那么会发生什么情况? 由于2个节点已启动,它们将能够完成写入过程,但是由于无法满足一致性级别,因此协调器节点将向客户端返回写入错误。 写入2个节点的数据会发生什么变化?客户端将不希望任何节点中有任何数据,因为他收到了写入错误

根据上面的链接,Cassandra不会回滚写操作

上面链接中接受的答案表示,在写入成功的节点上,数据实际上已写入,并且将最终回滚

如果协调器无法写入足够的副本以满足 请求的一致性级别,它会引发不可用的异常和 不执行任何写入操作

若协调器事先不知道副本失败,即在写入过程中副本失败,那个么协调器将抛出超时异常,客户端将不得不处理它。重试策略


根据这篇文章,写入一致性级别决定了有多少副本节点必须响应成功确认,才能将写入视为成功。在我正在考虑的场景中,一些节点向协调器节点发出了成功确认的响应,但是,该数量小于所需的一致性。因此,协调器节点将给出“写入错误”。但是在这些节点中写入的数据会发生什么情况呢?如果协调器无法写入足够的副本以满足请求的一致性级别,它将抛出一个不可用的异常,并且不执行任何写入操作。您没有注意到这一点。我正在考虑一个场景,在该场景中,协调器节点没有意识到某些节点关闭/没有响应。因此,在这种情况下,协调器节点不会立即抛出异常,而是等待从满足一致性级别所需的节点数接收确认。如果不满足一致性级别,那么写入某些节点的数据会发生什么情况?