Cassandra的一致性级别

来源:互联网 发布:linux常用命令cat 编辑:程序博客网 时间:2024/06/06 15:49

        Cassandra作为NOSQL数据库在CAP原理上选择了AP,即可用性和分区容忍性,而在数据一致性上通过最终一致性来保证,使用最终一致性的一种延伸——可调一致性来实现。对于任何读写操作,由客户端应用决定请求数据的一致性级别,Cassandra再根据请求的一致性级别响应请求。

          
写一致性

        如果是向Cassandra写数据,一致性级别指定了必须写多少个副本成功后再返回给客户端应用。写可以使用如下一致性级别,ANY是最低的一致性(但可用性最高),ALL是最高的一致性(但可用性最低),QUORUM是中间的可确保强一致性,可以容忍一定程度的故障。

ANY至少一个节点响应写操作。如果请求的row key对应的所有的副本节点都停止了,接收到请求的节点会记录HINT消息和请求数据,然后响应写成功。在row key对应的所有副本节点至少有一个启动之前,所有读row key会失败。并且HINT消息只保留一段时间,如果在这段时间内所有副本节点还不可用,则数据会丢失。ONE集群中至少有1个副本节点写成功。TWO集群中至少有2个副本节点写成功。THREE集群中至少有3个副本节点写成功。QUORUM集群中至少有quorum个副本节点写成功.quorum=(各数据中心副本因子之和)/2 + 1,假如2个数据中心,1个数据中的副本因子3,1个数据中心的副本因子是2,quorum=(3+2)/2 + 1 = 3LOCAL_QUORUM集群中同1个数据中心至少有quorum个副本节点写成功。quorum=(本数据中心副本因子)/2 + 1,假如接受请求的节点所在的数据中心的副本因子是2,则quorum=(2)/2 + 1 = 2EACH_QUORUM集群中每个数据中心至少有quorum个副本节点写成功。quorum计算同LOCAL_QUORUM。ALL集群中所有副本节点写成功。


读一致性
            如果是向Cassandra读数据,一致性级别指定了必须多少个副本响应后再返回给客户端应用结果。

ONE返回集群最近副本(决定于snitch)的响应。TWO返回集群里2个最近副本中的最新数据。THREE返回集群里3个最近副本中的最新数据。QUORUM返回集群里quorum个副本中的最新数据。quorum=(各数据中心副本因子之和)/2 + 1,假如2个数据中心,1个数据中的副本因子3,1个数据中心的副本因子是2,quorum=(3+2)/2 + 1 = 3LOCAL_QUORUM返回集群里当前数据中心quorum个副本中的最新数据。quorum=(本数据中心副本因子)/2 + 1,假如接受请求的节点所在的数据中心的副本因子是2,则quorum=(2)/2 + 1 = 2EACH_QUORUM返回集群中每个数据中心至少有quorum个副本中的最新数据。quorum计算同LOCAL_QUORUM。ALL返回集群中所有副本中的最新数据。

注意:LOCAL_QUORUM,EACH_QUORUM用于多数据中心的机架感应策略(如NetworkTopologyStrategy)。


参考:About data consistency,About hinted handoff writes

原创粉丝点击