根据关于Cassandra中的原子性的Datastax文档:仅在一个节点上成功的QUORUM写入将不会回滚(在那里检查原子性章节:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_transactions_c.html)。因此,当我在RF = 3并且一个节点出现故障的集群上执行QUORUM写入时,我将获得写入错误状态并在另一个节点上成功写入。这会产生两种情况:
假设资金转移记录,处理此类失败的最佳方法是什么?
答案 0 :(得分:3)
当QUORUM写入失败且出现“TimedOut”异常时,您不知道写入是否成功。您应该重试写入,并将其视为失败。如果您需要将多个写入组合在一起,则应将它们放在“批处理”中,以便批处理成功或一起失败。
在任何一种情况下,如果您关心回归的一致结果,您还希望进行QUORUM读取。如果你有一个RF = 3,并且QUORUM只写在一个节点上,第一次QUORUM读取成功包含新值,它将在其中一个节点上修复,QUORUM读取将始终给出新的值。因此,即使该值写为ONE,连续的QUORUM读也永远不会看到值及时返回。