|
|
1
5
为了调整一致性,cassandra允许根据每个查询设置一致性。 现在,我们假设一致性设置为1,复制因子为3。 在写请求期间,协调器向拥有正在写入的行的所有副本发送写请求。只要所有副本节点都已启动且可用,无论客户端指定的一致性级别如何,它们都将获得写操作。写入一致性级别决定了有多少副本节点必须响应成功确认,才能将写入视为成功。成功意味着数据被写入提交日志和memtable。 例如,在复制因子为3的单个数据中心10节点集群中,传入写入将转到拥有请求行的所有3个节点。如果客户端指定的写入一致性级别为1,则完成写入的第一个节点将响应回协调器,然后协调器将成功消息代理回客户端。一致性级别为1意味着,如果3个副本中的2个在发出请求时恰好处于关闭状态,则它们可能会错过写入。如果副本漏写,Cassandra稍后将使用其内置的修复机制之一使行一致:暗示切换、读取修复或反熵节点修复。
现在想象一下这样一种情况:数据尚未复制到第三个副本,并且在读取过程中选择了该副本(可能性非常小),然后您将获得一致的数据。
|
|
|
2
0
考虑CL是仲裁的场景,在这种情况下,三个副本中有两个必须响应。写入请求将像往常一样发送到所有3个副本,如果写入2个副本失败,并且在1个副本上成功,cassandra将返回Failed。由于cassandra不回滚,记录将继续存在于成功的复制副本上。现在,当读取带有CL=QUORUM时,读取请求将转发到2个副本节点,如果其中一个副本节点是先前成功的,则cassandra将返回新记录,因为它将具有最新的时间戳。但从客户的角度来看,由于cassandra在写入过程中返回了失败,所以没有写入此记录。 |
|
|
BigBug · 使用CQLSH查看Cassandra分区 8 年前 |
|
|
Sato · 卡桑德拉的追随者/追随者 9 年前 |
|
|
user3276247 · 卡桑德拉·里德有矛盾吗? 9 年前 |
|
|
user3812269 · 如何使用cassandra数据库创建唯一密钥 10 年前 |