我正在写我的学士论文。 因此,我关注理论上的最终一致性以及Cassandra如何应用这一理论。 要理解我的问题,请考虑以下一致性定义(据我所知):
因果一致性
如果内存操作,系统提供因果一致性 系统的每个节点都可能看到因果关系 以相同的顺序。 (维基百科)
因此,如果进程A将数据X写入数据库,然后进程B读取此数据X并用Y覆盖它,那么我们说如果B在所有副本之后得到X,则确保因果一致性( resp。节点)。
读写一致性
这是因果一致性的特例。因此,读取和写入在同一进程A上处理。这种一致性确保A在修改后永远不会有旧的数据对象。
会话一致性:
在这种情况下,进程A访问会话中的DB。只要此会话存在,系统就会保证您具有“读写一致性”
单调阅读一致性
如果进程在读取后获取特定数据对象,则系统会保证每个后续Read-Access上的进程都不会获得较旧的数据对象。
单调写一致性
在这种情况下,DB的写入选项将被序列化,从而写入选项的顺序将导致首先写入哪个进程。
现在理论上是一些一致性选项,其中一些或一个在NoSQL系统中实现。但如果我理解错误,请纠正我。
我的问题是CASSANDRA提供哪种类型的一致性? 这些Consistencys如何与规则“R + W> N”分别相关“R + W< = N”
whereby
R=read replica count
W=write replica count
N=replication factor
I'd really appreciate a quick answer. Thank You!!!
答案 0 :(得分:2)
可以在任何读取或写入查询上设置Cassandra中的一致性级别。这允许应用程序开发人员根据他们对响应时间与数据准确性的要求,在每个查询的基础上调整一致性。 Cassandra为读写提供了许多一致性级别。
您应该首先了解QUOROM
QUORUM是一个很好的中间地带,确保了强大的一致性,但仍能容忍某种程度的失败。
法定人数计算为(向下舍入为整数):
(replication_factor / 2)+ 1
例如,复制因子为3时,法定人数为2(可以容忍1个副本)。如果复制因子为6,则法定人数为4(可以容忍2个副本)。
对于您的问题,解释如下:
(nodes_read + nodes_written)> replication_factor
R + W> Ñ
例如,如果您的应用程序使用QUORUM一致性级别进行写入和读取操作,并且您使用的复制因子为3,则可确保始终写入2个节点,并始终读取2个节点。写入和读取的节点(4)的组合大于复制因子(3)确保了强读取一致性
您可以在下面发布的链接中详细了解Quorom和一致性