基于
http://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html
写一致性
一致性级别确定在向客户端应用程序返回确认之前写入必须成功的副本数
阅读一致性:
一致性级别指定在将数据返回到客户端应用程序之前必须响应读取请求的副本数量。
这意味着,如果我在同一个客户端应用程序(可能是同一个线程)中将CL指定为Quorum进行读取和写入,则在写入后随后读取数据(使用CL = Quorum)(同样, CL = Quorum)确保我获得最新数据。
然而,我不太清楚的是:这是否适用于同一应用程序中的不同进程和不同线程?
是否可以指定CL = Quorum但是错过了更新(旧数据)或脏读?
更新
澄清一下,我不是在谈论CL QUORUM完成之后。问题更多的是这些问题:
如果在写入(@ QUORUM)的中间,连接到同一集群的另一个进程尝试使用CL = QUORUM读取相同的分区,是否可以读取旧数据?
想象一下,写入还没有完成对所有副本的写入,因此CL尚未满足并且发生了读取。是否有可能只将写入写入一个节点(并且在复制过程中),因此,当读取(使用CL = QUORUM)时,它会读取旧数据?节点是否知道他们应该等待"等待"直到写完成
非常感谢,
答案 0 :(得分:3)
只要在QUORUM完成读写操作,它就会保持一致。由于超过一半的人已经看到写入,超过一半的人正在返回读取,因此保证会有一些重叠。
答案 1 :(得分:2)
有一个官方公式可以知道你是否会立即保持一致(=没有停滞的数据) 如果NUM_READ + NUM_WRITE>复制因子然后立即一致
因此,如果RF是3,则quorum = 2,因此如果read和write = QUORUM,则2 + 2> 3 =立即一致性
但是如果你有读= QUORUM并且写= 1然后2 + 1 = 3,你只能得到最终的一致性