修复 read_repair_chance = 0 时的不一致
Reparing inconsistency when read_repair_chance = 0
我的理解是 read_repair_chance 是触发所有副本的 ReadRepair 的概率机会。如果发现不一致,最近的更新将用于修复数据。
ReadRepairs 对我来说太贵了,因为我读的大部分 CL 都是 ONE。
所以我也选择 read_repair_chance = 0 和 dclocal_read_repair_chance = 0.
但有时我使用 QUORUM 而不是 ONE。当两个副本响应时达到读取 QUORUM,但两个记录可以不同。 Cassandra return 具有最新时间戳的那个。它会尝试修复另一个吗?
我不清楚你说的 'wanted consistency level is achieved' 是什么意思。你怎么知道。请分享您正在使用的复制因子和一致性级别。
我会尽量回答我能理解的部分。
通过将这两个属性更改为“0”,您已禁用自动修复。
如果您想要自动修复功能,请将它们保留为默认值或将它们设置为适合您的级别。
You may also want to read up on Replication Factor and how it works with consistency level
C* 集群中的数据一致性将取决于一致性级别和复制因子(以及其他因素)。如果你有 RF=3 并且写在 CL=1,C* 仍然会让你的数据保持一致 'eventually'。调整这些属性以满足您的需求,这样您的读取将 return 一致的数据。
如果您在 CL=1 读取,您可能会得到不一致的数据。您可能想尝试仲裁或本地仲裁,这将导致 read_repair_chance 启动以修复任何不一致的数据。
我一直在 DataStax 文档和教程中寻找您的问题的答案,但我没能找到专门记录当一致性高于最新一致性时将完成修复的内容将返回单元格数据。
这是一个最终一致的工具包,所以我假设只有当您 运行 使用 nodetool repair 进行修复时才会进行修复,如果您使用默认 [=16],建议每周进行一次=] 或使用 read_repair_chance.
不要忘记,即使写入的 CL 为 1,写入也会对所有副本节点完成,只要您不在写入后立即进行读取,您应该最能获得正确的数据有时,如果您正在执行写入然后立即读取您有一个反模式,请将数据保留在您的应用程序中以减少读取和写入。
But sometimes I use QUORUM instead of ONE. Read QUORUM is reached when
two replicas respond, but the two records can be different. Cassandra
return the one with the most recent timestamp. Does it try to repair
the other one?
Assuming that my RF is 3 and write and read CL are QUORUM. What I mean
saying that 'wanted CL is reached' is that two replicas at least
respond, this is QUORUM. But nothing proves that the two records are
identical. Cassandra returns the one with the most recent timestamp.
But my question is does it try to repair the other record?
答案是肯定的。
Cassandra 将尝试修复另一个,即使 read_repair_chance = 0 和 dclocal_read_repair_chance = 0。
叫做'digest mismatch'。避免读取修复的唯一方法是读取 LOCAL_ONE 或不会发生摘要不匹配的 ONE。
我的理解是 read_repair_chance 是触发所有副本的 ReadRepair 的概率机会。如果发现不一致,最近的更新将用于修复数据。
ReadRepairs 对我来说太贵了,因为我读的大部分 CL 都是 ONE。 所以我也选择 read_repair_chance = 0 和 dclocal_read_repair_chance = 0.
但有时我使用 QUORUM 而不是 ONE。当两个副本响应时达到读取 QUORUM,但两个记录可以不同。 Cassandra return 具有最新时间戳的那个。它会尝试修复另一个吗?
我不清楚你说的 'wanted consistency level is achieved' 是什么意思。你怎么知道。请分享您正在使用的复制因子和一致性级别。
我会尽量回答我能理解的部分。
通过将这两个属性更改为“0”,您已禁用自动修复。
如果您想要自动修复功能,请将它们保留为默认值或将它们设置为适合您的级别。
You may also want to read up on Replication Factor and how it works with consistency level
C* 集群中的数据一致性将取决于一致性级别和复制因子(以及其他因素)。如果你有 RF=3 并且写在 CL=1,C* 仍然会让你的数据保持一致 'eventually'。调整这些属性以满足您的需求,这样您的读取将 return 一致的数据。
如果您在 CL=1 读取,您可能会得到不一致的数据。您可能想尝试仲裁或本地仲裁,这将导致 read_repair_chance 启动以修复任何不一致的数据。
我一直在 DataStax 文档和教程中寻找您的问题的答案,但我没能找到专门记录当一致性高于最新一致性时将完成修复的内容将返回单元格数据。
这是一个最终一致的工具包,所以我假设只有当您 运行 使用 nodetool repair 进行修复时才会进行修复,如果您使用默认 [=16],建议每周进行一次=] 或使用 read_repair_chance.
不要忘记,即使写入的 CL 为 1,写入也会对所有副本节点完成,只要您不在写入后立即进行读取,您应该最能获得正确的数据有时,如果您正在执行写入然后立即读取您有一个反模式,请将数据保留在您的应用程序中以减少读取和写入。
But sometimes I use QUORUM instead of ONE. Read QUORUM is reached when two replicas respond, but the two records can be different. Cassandra return the one with the most recent timestamp. Does it try to repair the other one?
Assuming that my RF is 3 and write and read CL are QUORUM. What I mean saying that 'wanted CL is reached' is that two replicas at least respond, this is QUORUM. But nothing proves that the two records are identical. Cassandra returns the one with the most recent timestamp. But my question is does it try to repair the other record?
答案是肯定的。
Cassandra 将尝试修复另一个,即使 read_repair_chance = 0 和 dclocal_read_repair_chance = 0。
叫做'digest mismatch'。避免读取修复的唯一方法是读取 LOCAL_ONE 或不会发生摘要不匹配的 ONE。