考虑一个由4个节点组成的集群。
复制因子已设置为3。
我们给出了一个将一致性级别设置为ALL的写查询,但是只有一个副本成功写入了数据,而另两个副本从未响应。
在这种情况下,Cassandra响应UnavailableException(我已经在某处阅读了此内容),因此我们认为我们的请求未能持久。
然后,我们对一致性级别设置为1的同一row_key进行了读取查询,协调器将此请求发送到已成功写入先前请求的同一节点。
我的问题是接下来会发生什么?此读取查询是否返回值?如果是这样的话,这种行为真的有意义吗,因为我们首先抛出了UnavailableException?
如果Cassandra回答UnavailableException
,数据仍将写入可用节点,并且协调器将为不可用节点写入本地提示,节点返回后将重播该提示。即使节点没有退回,并且您正在使用ONE
或LOCAL_ONE
进行读取,也可以取回数据。这就是所谓的最终一致性-数据最终将传播到所有副本...
您可以在DataStax Architecture Guide中找到有关Cassandra如何以一致级别写入和读取数据的更多信息。