`

Cassandra的数据一致性策略

    博客分类:
  • DB
阅读更多

       一致性要求每次的请求都能返回最新的数据结果,数据库的每次更新所有的客户端请求都能得到相同的返回结果。分布式数据库Cassandra也是基于CAP理论来实现的,并采用了AP,因此在数据一致性方面做出牺牲。

        除单一的一致性概念之外还有一致性度的区分,严格一致性是最强度的模型,该模型要求每次的数据读取必须返回最新写入的值。在分布式系统中实现严格一致性显然是不现实的,实际当中我们忽略系统的异常因素及其网络失败造成的数据无法更新,从而导致系统数据为不可用状态。最终一致性则是要求系统所有的更新最终都应用到所有的副本节点中,在此过程中可以以消耗一定时间为代价,虽然在某个时间节点副本数据是不一致的,但经过一段时间后所有节点数据达到一致性。

       Cassandra使用了可调的最终一致性行模型,通过复制因子来调节一致性级别。复制因子越大系统性能就越差,而一致性结果则越强,一致性级别的选择决定数据库需要多少个副本针对读写做出成功相应,才能认作该次请求是成功的。在Cassandra中可以针对读写分别指定一致性级别,一致性级别越高则需要更多的节点做出请求响应,Cassandra的优势主要是快速写入,虽然一致性级别可以同复制因子相同,但强一致性的完成需要消耗系统性能,因此一致性级别的设置通常小于复制因子,即使某些节点是不可用状态更新操作也将返回成功。

Cassandra的事务及ACID

      Cassandra只支持ACID中的AID,并不支持一致性属性,而且没有使用典型的回滚及锁机制。

原子性(Atomicity)

      Cassandra处理数据更新(插入、更新、删除)操作的原子性是在分区级别,这样可以在相同分区中将数据行的插入、更新、删除归为单一操作。在处理数据的并发修改时是用时间戳来决定更新。Cassandra针对某些成功写入的节点数据不能进行自动回滚,比如当一致性级别为QUORUM,复制因子为3,协调节点需要等待其他两个节点的确认,如果一个节点写入成功另一个节点失败,写入成功节点的数据并不会进行回滚操作。

隔离性(Isolation)

     Cassandra写入和更新的隔离性是在行级,意味着在分区中写入只对当前客户端可见直到写入操作完成。任何在相同分区的批量更新操作同样是执行基于行级的隔离,除非在多个分区中进行更新操作。

持久性(Durability)

     Cassandra提供强持久的写入操作,在写成功确认前通过将数据记录到内存及提交日志中实现本地持久化。在数据库刷新内存表到磁盘之前,如果服务失败可以通过提交日志获取丢失的数据,Cassandra还通过将写入的数据复制到多个副本的提交日志中来增强数据的持久性。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics