Cassandra 卡桑德拉可调一致性的正确理解是什么?
据说一致性级别N定义了确认每个读写操作所需的副本数量。该数量越大,我们得到的结果越一致 如果我们将该参数定义为N(NCassandra 卡桑德拉可调一致性的正确理解是什么?,cassandra,Cassandra,据说一致性级别N定义了确认每个读写操作所需的副本数量。该数量越大,我们得到的结果越一致 如果我们将该参数定义为N(N
因此,后续两次并发读取会为同一个键返回不同的值?我说的对吗?是的,我们可以根据读写要求调整一致性。仲裁是针对单个DC的Cassandra建议的一致性级别。我们可以从以下公式计算:Quorum=N/2+1,其中N是副本数。我们可以从下面的命令设置一致性 一致性[水平] 有关可调一致性的更多详细信息,请参阅下文
在Cassandra中,很可能不同的客户端应用程序正在更新不同节点上相同密钥的值。您可以通过调整一致性级别来限制这一点 一致性级别始终取决于您决定的复制系数。 如果5个节点DC中的RF=3,则一致性级别仲裁或本地仲裁表示3个节点中有2个具有副本 调整后,以下任何组合都应为您提供正确的数据:
WRITE=ALL READ=ONE
WRITE=ONE READ=ALL
WRITE=LOCAL_QUORUM READ=LOCAL_QUORUM
您可以根据应用程序的负载调整应用程序中的一致性级别
根据我的说法,第3个本地仲裁应该工作得更好,因为有时节点可能处于高负载或可能停机状态。您的应用程序不会受到影响
在这种情况下,你写的比读的多;WRITE CL=ALL将使应用程序变慢。协调器将向拥有密钥的所有活动节点发送写请求。因此,一次写入将覆盖另一次写入。如果某些节点处于脱机状态,则会发生异常。检查此项:@ernest_k我特意注意到我们调整了一致性级别设置Yes。即使
N=2
和M=10
且密钥属于5
节点,协调器仍将根据文档向所有5个节点发送写请求。一致性仅在协调器无法从拥有密钥的N
节点(在向它们发送更新之前)获得响应时影响写入的成功。一致性级别不影响5个节点中有多少节点将收到写入,所有拥有密钥的节点都将更新。您的场景可能只会导致问题,如果两个协调员只能分别与5个中的2个进行物理对话。@ernest_k ah,那么一致性级别参数只告诉协调员在向用户发送响应之前从副本接收到多少确认?因此,如果有问题,请始终使用仲裁写入