当我注意到以下句子时,我正在查看有关批次(here)的Cassandra文档:
When the rows in the batch have been successfully written and persisted (or hinted)
the batchlog data is removed.
这是否("或暗示")意味着,在批量更新的上下文中,将行写入副本节点或在协调器节点上写入提示的切换对于Cassandra来说是一回事吗? / p>
如果这是真的,当一个不可用的节点返回活动时,如果提示传递过程有延迟,这可能导致最终的一致性,即使批处理中的语句具有一致性ALL?
答案 0 :(得分:1)
是的,在BATCH的上下文中,写入和暗示切换都被认为是成功的(很像CL = ANY)。
不,如果您已阅读CL = ALL,那么您将立即获得一致性,但代价是延迟更高,可用性更低。即使先前更新的副本节点现在已过期,您也可以立即与CL = ALL保持一致。实际上,您需要立即保持一致性的是1个副本节点具有最新的分区。
与读取CL = ALL立即一致的原因是所有副本在将其当前分区发送到协调器之前执行节点内合并。然后,协调器然后执行协调器合并以查找副本节点返回的分区中的最新数据。
注意: 节点内合并和协调器合并是我自己的术语。我使用它们来明确读取路径中的哪一步发生合并。