【发布时间】:2020-04-25 12:50:19
【问题描述】:
我是 cassandra 的新手,并试图弄清楚 cassandra 如何在写入失败的情况下提供一致性。考虑以下情况,其中 CL 为 QUORUM,在这种情况下,3 个副本中的 2 个必须响应。写入请求将照常发送到所有 3 个副本,如果写入 2 个副本失败,并且在 1 个副本上成功,cassandra 将返回 Failed。由于 cassandra 不回滚,因此该记录将继续存在于成功的副本上。现在,当读取带有 CL=QUORUM 时,读取请求将被转发到 2 个副本节点,如果其中一个副本节点是先前成功的节点,则 cassandra 将返回新记录,因为它将具有最新的时间戳。但从客户的角度来看,这条记录根本没有写入,因为 cassandra 在写入期间返回了失败。 如果是这种情况,那么 cassandra 在这种情况下将永远不会保持一致。 如何处理这种情况 请让我知道这种理解是否正确。
【问题讨论】:
-
Cassandra 偏向于教导最终的一致性。所以如果仍然想要一致性,你必须重新考虑 Cassandra 是否适合你。或者使用 RF 是复制因子 =3
标签: database cassandra cassandra-2.0 cassandra-2.1 eventual-consistency