微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

卡桑德拉的原子性和“回滚”

Cassandra 2.0 documentation包含关于原子性的以下段落:

For example,if using a write consistency level of QUORUM with a replication factor of 3,Cassandra will replicate the write to all nodes in the cluster and wait for acknowledgement from two nodes. If the write fails on one of the nodes but succeeds on the other,Cassandra reports a failure to replicate the write on that node. However,the replicated write that succeeds on the other node is not automatically rolled back.

因此,写请求被发送到3个节点,我们正在等待2个ACK.假设我们只收到1个ACK(超时前).所以很清楚,如果我们以一致性ONE读取,我们可以读取该值,好的.

但以下哪一项陈述也属实:

>可能会发生写入已持久存储在第二个节点上,但节点的ACK丢失了? (注意:即使读取一致性QUORUM,也可能导致读取值!)
>可能会发生写入稍后会持续到第二个节点(例如由于提示切换)? (注意:即使读取一致性QUORUM,也可能导致读取值!)
>写入是否存在于第二个节点上是不可能的,写入的值最终将通过ReadRepair从节点中删除?
>不可能,写入持久存储在第二个节点上,但是有必要执行手动“撤消”操作吗?

解决方法

我相信你在混合原子性和一致性.在节点之间不保证原子性,而一致性是.在最真实的原子性意义上,只写入单个节点中的单个行是原子的.

Cassandra唯一一次写入失败的原因是当协调器收到请求时,只有很少的副本存活,即它不能满足一致性级别.否则你的第二个陈述是正确的.它将暗示失败的节点(副本)将需要复制此行.

本文介绍了不同的故障情况.
http://www.datastax.com/dev/blog/how-cassandra-deals-with-replica-failure

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐