【问题标题】:Are Cassandra write consistency and hinted handoffs related?Cassandra 写入一致性和提示切换是否相关?
【发布时间】:2014-12-25 02:35:56
【问题描述】:

我在查看有关批次的 Cassandra 文档 (here) 时注意到以下句子:

When the rows in the batch have been successfully written and persisted (or hinted) 
the batchlog data is removed.

这(“或暗示”)是否意味着,在批量更新的上下文中,向副本节点写入一行或在协调节点上写入一个提示切换对于 Cassandra 来说是一样的?

如果是这样,当一个不可用的节点活着返回时,在提示传递过程中延迟的情况下,这可能导致最终的一致性,即使批处理中的语句具有一致性 ALL ?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    是的,在 BATCH 的上下​​文中,写入和提示切换都被认为是成功的(很像 CL = ANY)。

    不,如果您已阅读 CL = ALL,那么您将立即获得一致性,但代价是更高的延迟和更低的可用性。即使以前更新的副本节点现在已过期,您也将立即与 CL = ALL 保持一致。事实上,立即一致性所需的只是 1 个副本节点拥有最新的分区。

    您通过读取 CL = ALL 获得即时一致性的原因是所有副本在将其当前分区发送到协调器之前都会进行节点内合并。然后,协调器进行协调器合并,以在副本节点返回的分区中找到最新的数据。

    注意: 节点内合并和协调器​​合并是我自己的术语。我使用它们来明确合并发生在读取路径中的哪个步骤。

    【讨论】:

    • 有趣。因此,在使用批量写入时,条件“write_consistency_level + read_consistency_level > replication_factor”并不能保证强一致性。你必须确保 read_consistency_level = replication_factor 才能达到强一致性,对吧?
    • 我必须道歉。我的回答是错误的。您可以在 Java 中使用 batch.setConsistencyLevel(ConsistencyLevel.QUORUM);batch.setConsistencyLevel(ConsistencyLevel.ALL); 设置批处理 CL。
    • 因此,如果您为批处理
    • 对于批处理,写入 CL 设置在批处理级别,而不是语句级别(即每个语句都有相同的写入 CL)。
    • 是的,记录的批次和未记录的批次的行为会发生变化。
    猜你喜欢
    • 2014-03-14
    • 2017-06-16
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2018-06-18
    • 2017-05-05
    相关资源
    最近更新 更多