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 驱动程序来应用它,这取决于您的应用程序需要什么。