gpt4 book ai didi

java - Cassandra 复制因子大于节点数

转载 作者:搜寻专家 更新时间:2023-11-01 01:50:25 24 4
gpt4 key购买 nike


我正在为 Apache Cassandra(v.2.1.9)使用 datastax java 驱动程序,我想知道当我将 replication_factor 设置为大于节点数时会发生什么。我在某处读到 Cassandra 允许此操作,但是当我尝试保存一些数据时应该会失败(当然这取决于写入一致性级别,但我指的是 ALL 的情况)。
问题是一切正常,没有抛出异常,即使我尝试保存数据。为什么?
对于旧版本的 Cassandra,也许我读过的信息是旧的?还有一个问题是,当我向集群中添加另一个节点时会发生什么,这是否属实?

最佳答案

Cassandra 有一个“可调一致性”的概念,这在一定程度上意味着您可以控制读/写操作的一致性级别设置。

您可以在解释 consistency levels 的文档中阅读更多内容以及如何在 cqlsh shell 中设置它们.

要了解更多信息,我建议在 Cassandra 的单节点上试验 cqlsh。例如,我们可以创建一个复制因子为 2 的键空间,并将一些数据加载到其中:

cqlsh> create keyspace test with replication = {'class': 'SimpleStrategy', 'replication_factor':2};
cqlsh> create table test.keys (key int primary key, val int);
cqlsh> insert into test.keys (key, val) values (1, 1);
cqlsh> select * from test.keys;

key | val
-----+-----
1 | 1

一切正常,因为默认的一致性级别是 ONE,所以只有 1 个节点必须在线。现在尝试相同但将其设置为 ALL:

cqlsh> CONSISTENCY ALL;
Consistency level set to ALL.
cqlsh> insert into test.keys (key, val) values (2, 2);
Traceback (most recent call last):
File "resources/cassandra/bin/cqlsh.py", line 1324, in perform_simple_statement
result = future.result()
File "resources/cassandra/bin/../lib/cassandra-driver.zip/cassandra-driver/cassandra/cluster.py", line 3133, in result
raise self._final_exception
Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ALL" info={'required_replicas': 2, 'alive_replicas': 1, 'consistency': 'ALL'}

cqlsh> select * from test.keys;
Traceback (most recent call last):
File "resources/cassandra/bin/cqlsh.py", line 1324, in perform_simple_statement
result = future.result()
File "resources/cassandra/bin/../lib/cassandra-driver.zip/cassandra-driver/cassandra/cluster.py", line 3133, in result
raise self._final_exception
Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ALL" info={'required_replicas': 2, 'alive_replicas': 1, 'consistency': 'ALL'}

因为第二个节点不存在,所以读取和写入都不起作用。事实上,错误消息会提供一个有用的线索,表明需要两个副本,但只有一个可用。

一旦您了解了 cqlsh 的使用,您就可以使用 Java 驱动程序来应用它,具体取决于您的应用程序需要什么。

关于java - Cassandra 复制因子大于节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35889750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com