【问题标题】:Meaning of eventual consistency in Cassandra?Cassandra中最终一致性的含义?
【发布时间】:2011-06-02 19:56:48
【问题描述】:

当单个集群中的节点不包含相同数据的副本但数据分布在节点之间时,Cassandra 中的最终一致性是什么意思。现在,因为单个数据被记录在一个地方(节点)。为什么 Cassandra 不从那个单一的记录位置返回最近的值?在这种情况下如何产生多个副本?

【问题讨论】:

    标签: database nosql cassandra eventual-consistency


    【解决方案1】:

    由客户决定适当的一致性级别(零、任何、一、quoram 或全部)。 (一致性级别根据您的复制因子控制读取和写入行为。) 在单节点集群中,一致性级别 any、one、quorom 和 all 是等价的。

    【讨论】:

    • 但是什么数据之间的一致性?,因为单个数据位于集群中的单个位置..没有多个数据副本..那么一致性是什么?
    • 在单节点集群上你不必担心一致性(只要你不做异步写入(CL.ZERO,不要使用这个))。
    • 对不起,我想你弄错了。我的意思是在一个有多个节点的集群中,数据是分布式/分片的(并且不复制)所以没有多个在 n 节点 cassandra 集群中的不同节点之间复制一条数据,那么在这种情况下如何定义一致性,事实上,没有多个副本?...我希望你明白我的意思..
    • 如果你的replicationfactor=1,那么每个数据集只有一个副本。正如我在上面的回答中所述:“一致性级别根据您的复制因子控制读写行为”
    【解决方案2】:

    即使复制因子 = 1,一致性也不一定是即时的,因为写入缓存在您将它们发送到的节点上,因此不一定立即发送到负责该密钥的节点。

    但这取决于您选择的一致性级别。

    Cassandra 的大部分用例是复制因子 > 1,这就是一致性成为更多问题的地方。 RF=3 似乎是一种常见设置(因为它允许 Quorum 在一个节点不可用的情况下进行读/写)

    【讨论】:

    • 在写入从 memtable(内存缓冲区)刷新到磁盘(= 到负责节点)之前需要多长时间?
    【解决方案3】:

    这里有一个关于最终一致性的很好的解释: http://www.allthingsdistributed.com/2008/12/eventually_consistent.html

    【讨论】:

      【解决方案4】:

      Cassandra 倾向于在延迟和一致性方面牺牲可用性。它是“最终一致的”,一种用于分布式设置的 NoSQL 数据库一致性模型。最终的一致性不是保持可能真正减慢大规模速度的严格一致性,而是实现高可用性——只是以您的每个数据实例没有立即在所有服务器之间同步为代价。

      【讨论】:

        【解决方案5】:

        Cassandra 的一致性是可调的。可以调整什么?
        * 同意读取数据所需的节点数.. 称之为 R * 同意写入数据所需的节点数.. 称之为 W
        在 3 个节点的情况下,如果我们选择 2R 和 2W.. 那么在读取过程中,如果 2 个节点同意一个值,那就是真值。第三个可能具有相同的值,也可能不同。
        在写入的情况下,如果选择2W,那么如果数据写入2个节点,就认为足够了。这个模型是一致的。
        如果 R + w Cassandra 为每一列和每一列的字段维护一个时间戳,以最终变得一致。后台有一种机制可以达到一致的状态。
        但就像我说的,如果 R + W > N,那么它是一致的固体。这就是为什么 Cassandra 认为一致性是可调的。

        【讨论】:

          猜你喜欢
          • 2017-09-26
          • 2018-02-15
          • 2013-08-28
          • 1970-01-01
          • 2015-06-05
          • 2017-09-07
          • 1970-01-01
          • 2017-06-28
          • 1970-01-01
          相关资源
          最近更新 更多