在卡桑德拉处理法定人数的失败

时间:2013-08-10 09:29:33

标签: nosql cassandra atomicity

根据关于Cassandra中的原子性的Datastax文档:仅在一个节点上成功的QUORUM写入将不会回滚(在那里检查原子性章节:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_transactions_c.html)。因此,当我在RF = 3并且一个节点出现故障的集群上执行QUORUM写入时,我将获得写入错误状态并在另一个节点上成功写入。这会产生两种情况:

  1. 写入将在联机时传播到其他节点;
  2. 如果节点接受在传播之前写入将完全中断,则
  3. 写入可能完全丢失。
  4. 假设资金转移记录,处理此类失败的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

当QUORUM写入失败且出现“TimedOut”异常时,您不知道写入是否成功。您应该重试写入,并将其视为失败。如果您需要将多个写入组合在一起,则应将它们放在“批处理”中,以便批处理成功或一起失败。

在任何一种情况下,如果您关心回归的一致结果,您还希望进行QUORUM读取。如果你有一个RF = 3,并且QUORUM只写在一个节点上,第一次QUORUM读取成功包含新值,它将在其中一个节点上修复,QUORUM读取将始终给出新的值。因此,即使该值写为ONE,连续的QUORUM读也永远不会看到值及时返回。