假设我们的情况是R + W> N其中R是读取仲裁级别,W是写入仲裁级别,N是复制因子。我们可以进一步假设R = W = N / 2 + 1。
让我们想象一下密钥的更新操作正在进行的情况,并说Cassandra已将更新提交到具有时间戳t的单个副本。我们还假设其他副本具有存储的密钥,该时间戳是<吨。如果在更新过程中现在发生对对象的读取请求,则读取仲裁可能包括发生更新的单个副本,其中包含带有时间戳t的密钥,并且它将返回尚未提交的值(可能的未来价值 - 我说'可能'因为更新可能实际上失败了)因为t>读取法定人数中来自其他副本的时间戳。
问题是 - 不是R + W> N配置应该保证强一致性?另外,这个问题是如何解决的?
答案 0 :(得分:0)
你是正确的。
Cassandra事务在RDBMS的ACID properties意义上不是原子的。这意味着如果更新失败,Cassandra的状态不会改变,您可能会读取更新的值。您可以参考this page以获取有关Cassandra和ACID属性的更多信息。
我们所知道的是,如果在写作和阅读中达到一致性水平,则使用R + W> N然后我们收到最近的写作。换句话说,如果Cassandra足够可用,那么它就是一致的。这个想法来自CAP Theorem。