Cassandra中数据一致性指的是数据行在各个复制节点(replicas)上的更新和同步程度。通过提供tunable consistency,Cassandra扩展了eventual consistency的概念。针对任何读或写操作,客户端根据对反应时间和数据准确性的要求来决定数据的一致性程度(Per-Request Consistency)。
除了tunable consistency,Cassandra也提供若干built-in repair mechanisms以确保数据在各replicas上保持一致。

CAP定理(THEOREM)

•  Consistency:所有节点在同一时间看到的是同样的数据
•  Availability:确保每个请求收到成功还是失败的回应
•  Partition Tolerance:系统无视偶然的消息丢失持续运行
在分布式存储系统中,同时满足所有的特性是不可能的,最多能达到3个中的两个。Cassandra允许用户来决定每个请求的CAP特性,在一致性、性能和错误容忍度之间做出选择。
写操作一致性ABOUT WRITE CONSISTENCY)

写操作一致性决定了在向客户端确认写操作成功之前,多少个节点必须被成功写入(Commitlog and Memtable)。
假设:R=Nodes Read, W=Node Written, N=Replication Factor,Q=QUORUM=N/2+1。

ANY:                   至少成功写入一个节点,即使是一个Hinted Handoff
ONE:                   至少成功写入一个复制节点(replica node)
QUORUM:            至少成功写入Q个复制节点(Q=N/2+1)
LOCAL_QUORUM: 至少在coordinator node所在的当前DC成功写入Q个复制节点
EACH_QUORUM:  在每个DC成功写入Q个复制节点
ALL:                    成功写入集群中的每个复制节点

ANY提供了绝对的write availability,但是是以牺牲一致性为代价(具有最差的一致性),因为不能保证被写入的数据什么时候才可读(取决于replicas当机了多长时间)。ANY只能用于写操作。写操作被发送到任何一个节点,随后通过hinted handoff机制被重送到目的节点。ANY适用于不想丢失写操作、不关心数据一致性和发送延迟的数据程序。

   ALL具有最强的一致性,但最低的availability。
   QUORUM是一种折中,具有强的一致性,但同时也容许一定程度的失败。例如,如果replication_factor是3,Quorum就是2(允许在一个replica上失败)。如果replication_factor是6,Quorum就是4(允许在二个replicas上失败)。

   不同于正常的Column,对Counter的写操作需要在后台做一次读操作以确保分布式的Counter值在各个replicas上保持一致。如果使用的是Consistency level = ONE的写操作,则隐含的读操作不会对写操作造成延迟。因此,Counter通常使用consistency level是ONE.
读操作一致性(ABOUT READ CONSISTENCY)

读操作一致性程度决定了在将结果返回到客户端之前,多少个replicas必须返回结果。
假设:假设:R=Nodes Read, W=Node Written, N=Replication Factor,Q=QUORUM=N/2+1。

ONE:                    从最近的复制节点返回结果(由snitch决定)。默认情况下Read Repair会在后台运行使其他节点保持一致。
QUORUM:             在Q((Q=N/2+1))个复制节点返回数据后,返回具有最新时间戳的记录给客户端
LOCAL_QUORUM:  在coordinator node所在的当前DC的Q个复制节点返回数据后,返回具有最新时间戳的记录给客户端
EACH_QUORUM:    在每个DC返回Q个复制节点的数据后,返回具有最新时间戳的记录给客户端
ALL:                      在集群中的每个复制节点返回数据后,返回具有最新时间戳的记录给客户端。任何一个节点失败都会导致读操作失败

Cassandra中的数据一致性的更多相关文章

  1. cassandra中对节点失败与否的探测方法, the Phi accrual Failure Dector,附论文

    (1)在分布式系统中,对于某个节点是否还“活着”的探测,通常是设定一个时间的阀值,然后根据接收到的“心跳”信息的间隔,来判定这个节点是否还活着,然后返回一个bool值: 但这种做法很容易造成误判:因为 ...

  2. cassandra中的ACID,与RDBMS中的事务有何不同?

    Cassandra中的ACID标准 Apache Cassandra不遵循具有回滚或锁定机制的ACID(原子性,一致性,隔离性,持久性)事务,而是提供原子,隔离和持久的事务,并具有最终和可调的一致性, ...

  3. 技术基础 | 在Apache Cassandra中改变VNodes数量的影响

    Apache Cassandra中num_tokens的默认值在4.0版本中将会有变化!这看起来好像只是在CHANGES.txt文件中做了个小小的改动,但实际上这个改动将会对集群的日常运维有着深远的影 ...

  4. Azure CosmosDB (2) CosmosDB中的数据一致性

    <Windows Azure Platform 系列文章目录> 为了保证分布式数据库的高可用性和低延迟性,我们需要在可用性.延迟和吞吐量之间进行权衡. 绝大部分的商业分布式数据库,要求开发 ...

  5. 如何在spark中读写cassandra数据 ---- 分布式计算框架spark学习之六

    由于预处理的数据都存储在cassandra里面,所以想要用spark进行数据分析的话,需要读取cassandra数据,并把分析结果也一并存回到cassandra:因此需要研究一下spark如何读写ca ...

  6. Cassandra1.2文档学习(15)—— 配置数据一致性

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...

  7. [转载] HBase vs Cassandra:我们迁移系统的原因

    转载自http://www.csdn.net/article/2010-11-29/282698 我的团队近来正在忙于一个全新的产品——即将发布的网络游戏www.FightMyMonster.com. ...

  8. Cassandra内部架构

    Cassandra是一个开源的.分布式.无中心节点.弹性可扩展.高可用.容错.一致性协调.面向列的NoSQL数据库 Cassandra集群(Cluster) Cluster Data center(s ...

  9. Cassandra如何保证数据最终一致性

    Cassandra如何保证数据最终一致性:1.逆熵机制(Anti-Entropy)使用默克尔树(Merkle Tree)来确认多个副本数据一致,对于不一致数据,根据时间戳来获取最新数据. 2.读修复机 ...

随机推荐

  1. Ajax Step By Step1

    Ajax 最关键的地方,就是实现异步请求.接受响应及执行回调. jQuery 对 Ajax 做了大量的封装,不需要去考虑浏览器兼容性, 对于封装的方式,jQuery 采用了三层封装:最底层的封装方法为 ...

  2. 京东2017校园招聘笔试题 【第K个幸运数】

    题目描述 4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字. 前几个幸运数字为:4,7,44,47,74,77,444,447... 现在输入一个数字K,输出第 ...

  3. VS 2010启动崩溃

    事情缘由,同事装了一个软件不能用,我说我试下吧. 好吧,先装CAD2002,再装“截取断面工具”,好家伙,还是不能用,折腾了几遍还是不行,后来干脆不倒腾了. 打开VS,发现启动不了,显示 第一反应,I ...

  4. node学习笔记(四)

    //Node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端 //http.Server是一个基于事件的HTTP服务器,它的核心由Node.js下层c++部 ...

  5. 【转】MySQL的各种timeout

    因为最近遇到一些超时的问题,正好就把所有的timeout参数都理一遍,首先数据库里查一下看有哪些超时: root@localhost : test 12:55:50> show global v ...

  6. java中FileInputStream和FileOutputStream对图片操作的例子

    package a.ab; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.F ...

  7. C# 实现 任意多边形切割折线算法

    1.    内容简介 本文旨在解决任意多边形切割折线,获取切割之后的折线集合. 本文实现的算法内容包括:判断两条线段是否相交,如若相交,获取交点集合.对线上的点集,按斜率方向排序.判断点是否在多边形内 ...

  8. [转]jQuery实现清空table表格除首行外的所有数据

    1.其实网上有很多版本,试了好几个都不行,最后还是查到了一个非常方便的:不会清除表格第一行表头部分. 其中J_tab_fam是table的id. 1 $("#J_tab_fam  tr:no ...

  9. :尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。 ---> System.BadImageFormatException: 试图加载格式不正确的程序。

    iis有程序池有一个属性  是否启用32位应用程序默认是true的特别注意windows2008 服务器系统iis默认的是true 这样发布一下也是必须要做的

  10. 排列组合算法(PHP)

    用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...