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中。
阅读(2504) | 评论(0) | 转发(0) |