Cassandra 中写入仲裁的意义是什么

问题描述 投票:0回答:1

根据我从这个answer收集到的信息,如果未达到写入仲裁,cassandra 不会回滚持久写入的数据库中的写入。

拥有写入法定人数有什么意义?它与尽力写入或向所有节点发送写入并仅等待一次成功有何不同?

database cassandra quorum
1个回答
0
投票

使用

QUORUM
进行写入的目的是提供保证,当这些写入成功时,使用
QUORUM
进行的后续读取将保持一致。

确实,写入不会回滚,并且 Cassandra 具有最终将写入传播到所有副本的机制 - 提示、修复、读取修复。然而,这些机制都不能保证使用

QUORUM
的读取查询结果将返回最新版本的数据。

另一方面,当使用

QUORUM
的写入成功时,使用
QUORUM
读取相同数据将始终保持一致,因为 至少有 1 个副本参与读取请求,同时还涉及最新的
 QUORUM
写入,返回最新数据。即使在
QUORUM
读取中只有 1 个副本保持一致的情况下,Cassandra 也会在返回结果之前通过阻塞读取修复来解决不一致问题。

如果您使用任何低于

QUORUM
的写入一致性,即使您使用
QUORUM
进行读取,也不能保证读取请求将从写入语句中成功的副本中读取。

如果您以一致性级别

ALL
进行编写,那么您会失去 Cassandra 中的高可用性 - 导致停机所需的只是一个不可用的节点。

保证读取数据一致性的公式为:
读取一致性级别 + 写入一致性级别 > 复制因子

通常,读取和写入一致性级别的

LOCAL_QUORUM
是可用性和数据一致性的最佳点。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.