繁体   English   中英

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

[英]Cassandra tunable consistency with multiple clients

我一直在看Datastax Cassandra教程,并且对可调一致性有疑问。 他们显示的等式是if (nodes_read + nodes_written) > replication_factor ,那么我们具有直接一致性。 仅当有一个客户端连接到数据库时,这才似乎成立。 如果我们有多个客户,我看不出这个等式如何仍然成立。 这里是否假设我们只有一个客户? 谢谢。

不,这与客户数量无关。

例如,只要您正在阅读和编写仲裁,就可以保证您保持一致。 请记住,在卡桑德拉(Cassandra)中,最后一次胜利。 因此,换句话说,保证您不会读取过时的数据。

不过不要把这个方程推得太远

我很少看到一种或法定人数以外的配置。 诸如写1读ALL之类的事情在理论上是一致的,但是如果您失望了,那么值得付出什么一致性呢?

另外,请确保您运行NTP。

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

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

您为什么认为许多客户会改变方程式?

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

  1. 仅在成功写入“ n”个节点后才能成功写入
  2. 仅当“ n”个节点答复时,读取才成功。 返回的数据是与最新时间戳相关联的数据。

为了阐明您对多个节点的评论,请考虑两种情况。

情况1。假设有3个节点,复制因子为3

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

  2. 现在,如果客户端执行CL = 2的读取,则至少一个写入的节点将进行答复。 因此立即获得一致性。

情况2:

  1. 假设客户正在使用CL = 1写入数据。 这将确保仅成功写入1次。

现在,问题浮出水面了,如果您在没有数据的节点之一上执行读取该怎么办。

  1. 为了满足该公式,您必须执行CL = 3的读取。 这意味着所有3个节点都将触发读取。 现在有3个节点必须响应。 其中一个节点具有数据,其他两个节点则没有。 最高的时间戳获胜,因此节点1获胜。 因此,返回数据。

无陈旧数据

情况3:1.假设在CL = 3的情况下执行写操作。 在这种情况下,只有在三个副本节点中都有数据时,我们才能成功。

现在,问题浮出水面了,如果您在没有数据的节点之一上执行读取该怎么办。 但是,由于CL为3,因此所有节点都将具有成功写入的数据

  1. 阅读上的任何节点成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM