Chinaunix首页 | 论坛 | 博客
  • 博客访问: 560168
  • 博文数量: 89
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2699
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-14 22:27
个人简介

其实,我只是个研究生。在这里,我能感觉到自己的存在。

文章分类
文章存档

2014年(16)

2013年(73)

分类: NOSQL

2013-05-27 16:33:51

Cassandra的数据更新机制
1. Cassandra提供的6种一致性写入策略:
(1)ANY
集群中任意一个服务器响应写入成功(包括HINT消息),则Cassandra就会通知客户端更新成功,否则通知客户端写入失败。
(2)ONE
集群中任意一个服务器响应写入成功(不包括HINT消息),则Cassandra就会通知客户端更新成功,否则通知客户端写入失败。
(3)QUORUM
集群中响应写入成功(不包括HINT消息)的服务器数量不小于“Replication—Factor/2 +1”,则Cassandra就会通知客户端更新成功,否则通知客户端写入失败。它很常用也是平衡数据一致性和高可用性的一个策略。
(4)LOCAL_QUORUM
集群中响应写入成功(不包括HINT消息)的服务器数量为不小于“Replication—Factor/2 +1”,同时写入成功的节点中有一台是同一个数据中心,则Cassandra就会通知客户端更新成功,否则通知客户端写入失败。
(5)EACH_QUORUM
集群中响应写入成功(不包括HINT消息)服务器数量不小于“Replication—Factor/2 +1”,同时写入成功的服务器不是都在一个数据中心,则Cassandra就会通知客户端更新成功,否则通知客户端写入失败。
(6)ALL
集群中响应写入的服务器数量等于ReplicationFactor,则Cassandra就会通知客户端更新成功,否则通知客户端写入失败。
2. 当数据一致性非常重要的时候,可以考虑使用ALL这种更新策略。
3. 整个数据更新过程如下:
(1)Cassandra获取到更新数据的所属的keyspace的备份策略(ReplicationStrategy),通过备份策略和更新数据的key计算出更新数据需要写入哪些服务器中。
(2)分析需要写入的这些服务器中是否发生宕机,如果有,需要另外寻找一个HINT服务器。
(3)根据一致性级别,判断需要等待几个节点写入成功才能算整个写入操作成功。
(4)确保存活的服务器数量不小于需要响应写入成功服务器的数量。
(5)向目标服务器发送更新数据,等待指定数量服务器响应成功后,告诉客户端更新成功,否则告诉客户端更新失败。
4. 在Cassandra更新数据的过程中,将判断更新的数据是否需要建立索引,如果需要,将更新索引信息。从本质上来看,二级索引就是一个Column Family,更新的数据同样先写入Commitlog,然后缓存到Memtable中,最后写入SSTable中。


阅读(2510) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~