Cassandra可调整与多个客户端的一致性

时间:2015-01-30 00:45:01

标签: cassandra datastax-enterprise datastax

我一直在观看Datastax Cassandra教程,我有一个关于可调谐一致性的问题。他们显示的等式是if (nodes_read + nodes_written) > replication_factor,然后我们立即保持一致。如果有一个客户端连接到数据库,这似乎只是真的。如果我们有多个客户端,我不知道这个等式如何仍然成立。这里假设我们只有一个客户?谢谢。

2 个答案:

答案 0 :(得分:2)

不,这与客户的数量无关。

例如,只要您正在阅读和撰写法定人数,就可以确保您保持一致。请记住,在Cassandra最后写作获胜。换句话说,您保证不会读取陈旧数据。

虽然

不过这个等式

我很少看到除一个或法定人数法定人数以外的配置。像写1读ALL的事情在理论上是一致的,但如果你失败了,那么一致性是否值得?

还要确保运行NTP。

答案 1 :(得分:0)

客户数无关紧要。一致性取决于数据而非客户端或客户端数量。

如果有100个客户端,每个客户端基于(nodes_read + nodes_written)>执行写入和读取。 replication_factor,那么在这种情况下,您仍然可以确定所有客户端都会立即看到一致性。

为什么你认为很多客户会改变这个等式?

您将立即看到一致性的原因之一是:

  1. 只有在对“n”个节点的写入成功后才能成功写入
  2. 只有'n'个节点回复才会成功读取。返回的数据是与最新时间戳关联的数据。
  3. 为了澄清您对多个节点的评论,让我们考虑两种情况。

    案例1。 假设有3个节点,复制因子为3

    1. 假设客户端1正在写入CL = 2的数据。这将确保只有在2个节点上成功写入后才能成功写入

    2. 现在,如果客户端执行CL = 2的读取,则至少有一个写入的节点将回复。因此,立即保持一致。

    3. 案例2:

      1. 假设客户端正在写入CL = 1的数据。这将确保只有1次写入成功。
      2. 现在问题是如果你在其中一个没有数据的节点上执行读操作的问题。

        1. 要满足公式,您必须使用CL = 3执行读取。这意味着所有3个节点都会触发读取。现在3个节点必须响应。其中一个节点有数据,另外两个节点没有。最高时间戳获胜,因此节点1获胜。因此返回数据。
        2. 没有陈旧数据

          案例3: 让我们说写是用CL = 3进行的。在这种情况下,我们只有在3个副本节点中拥有数据时才能获得成功。

          现在问题是如果你在其中一个没有数据的节点上执行读操作的问题。但是当CL为3时,所有节点都将拥有成功写入的数据

          1. 读取任何节点成功。