我是cassandra的新手,我想了解一致性级别和复制因子之间的细微差别。
场景:如果我的复制因子为2且一致性级别为3,那么将如何执行写入操作?当一致性级别设置为3时,表示在写入3个节点后将向客户端确认结果。如果将数据写入3个节点,那么它给出的复制因子为3而不是2 ..?在这种情况下,我们是否牺牲了复制因子?
有人可以解释我的理解错误吗?
谢谢!
答案 0 :(得分:4)
复制因子:应该有多少节点保存此密钥空间的数据。
一致性级别:需要多少个节点响应协调器节点才能使请求成功。
因此,您不能仅具有高于复制因子的一致性级别,因为您不能期望更多节点应答请求而不是持有数据的节点数量。
以下是一些参考资料:
答案 1 :(得分:0)
您将收到错误:无法达到一致性级别3.
您可以进一步阅读here
答案 2 :(得分:0)
一致性级别有两种类型,写入一致性和读取一致性。一致性级别可以是一,二,三或法定人数。如果是法定数量,则至少有一半节点可用于操作。否则(一,二,三),名称本身为您提供定义。
复制因子是您计划在群集中维护的副本数。如果策略很简单,那么您将只有一个复制因子。如果您正在使用网络拓扑策略并且正在使用多直流群集,则必须为每个数据中心设置复制因子。
在您的方案中,如果RF为2且CL为3,则它将起作用(我假设群集中有超过3个节点且至少有一个种子节点)。在这种情况下,它将检查三个节点是否正常接收数据,如果满足CL,它将向两个节点写入两个副本。
关于你的第二个问题
当一致性级别设置为3时,表示结果为 写入3个节点后向客户端确认。如果将数据写入3个节点,那么它给出的复制因子为3而不是2 ..?
据我所知,卡桑德拉不会承认卡桑德拉。它只需要满足CL,并且确认新数据的节点数将等于RF。 因此,毫无疑问,牺牲RF。