我一直在观看Datastax Cassandra教程,我有一个关于可调谐一致性的问题。他们显示的等式是if (nodes_read + nodes_written) > replication_factor
,然后我们立即保持一致。如果有一个客户端连接到数据库,这似乎只是真的。如果我们有多个客户端,我不知道这个等式如何仍然成立。这里假设我们只有一个客户?谢谢。
答案 0 :(得分:2)
不,这与客户的数量无关。
例如,只要您正在阅读和撰写法定人数,就可以确保您保持一致。请记住,在Cassandra最后写作获胜。换句话说,您保证不会读取陈旧数据。
我很少看到除一个或法定人数法定人数以外的配置。像写1读ALL的事情在理论上是一致的,但如果你失败了,那么一致性是否值得?
还要确保运行NTP。
答案 1 :(得分:0)
客户数无关紧要。一致性取决于数据而非客户端或客户端数量。
如果有100个客户端,每个客户端基于(nodes_read + nodes_written)>执行写入和读取。 replication_factor,那么在这种情况下,您仍然可以确定所有客户端都会立即看到一致性。
为什么你认为很多客户会改变这个等式?
您将立即看到一致性的原因之一是:
为了澄清您对多个节点的评论,让我们考虑两种情况。
案例1。 假设有3个节点,复制因子为3
假设客户端1正在写入CL = 2的数据。这将确保只有在2个节点上成功写入后才能成功写入
现在,如果客户端执行CL = 2的读取,则至少有一个写入的节点将回复。因此,立即保持一致。
案例2:
现在问题是如果你在其中一个没有数据的节点上执行读操作的问题。
没有陈旧数据
案例3: 让我们说写是用CL = 3进行的。在这种情况下,我们只有在3个副本节点中拥有数据时才能获得成功。
现在问题是如果你在其中一个没有数据的节点上执行读操作的问题。但是当CL为3时,所有节点都将拥有成功写入的数据