java Cassandra复制因子大于节点数
我正在使用Apache Cassandra(2.1.9版)的datastax java驱动程序,我想知道当我将复制系数设置为大于节点数时会发生什么。我在某个地方读到,Cassandra允许这个操作,但当我试图保存一些数据时,应该会失败(当然这取决于写入一致性级别,但我指的是所有情况)
问题是,一切正常,没有引发异常,即使我试图保存数据。为什么
也许我读到的信息是旧的,对于卡桑德拉的旧版本?
还有一个问题,这是不是真的,比我向集群添加另一个节点时会发生什么还要多
# 1 楼答案
Cassandra提出了“可调一致性”的概念,这在一定程度上意味着您可以控制读/写操作的一致性级别设置
你可以在解释consistency levels以及如何在cqlsh shell中设置它们的文档中阅读更多内容
为了了解更多信息,我建议在Cassandra的单个节点上试验cqlsh。例如,我们可以创建一个复制因子为2的密钥空间,并向其中加载一些数据:
一切正常,因为默认的一致性级别是1,所以只有1个节点必须联机。现在尝试相同的方法,但将其设置为ALL:
因为第二个节点不存在,所以读取和写入都不起作用。事实上,错误消息将提供一个有用的线索,即需要两个副本,但只有一个可用
一旦您了解了使用cqlsh,就可以使用Java驱动程序应用同样的方法,具体取决于您的应用程序需要什么
# 2 楼答案
您不应该将其设置为高于节点数的值,因为当写入副本和读取副本计数大于复制因子时,Cassandra将实现更高的一致性
例如,如果您有5个节点,并且已将复制因子设置为5。现在,如果1个节点宕机,您将无法获得高一致性,因此您失去了Cassandra可用性的优势
添加节点后,可以智能地增加因子,因为一致性级别不允许写入超过复制因子指定的节点数