如何设置cassandra读写一致性

bho*_*ass 7 consistency cassandra

我找不到这方面的文档。我知道cqlsh中有一致性命令,但是读写一致性没有区别。我如何为读写设置不同的一致性级别?

此外,还提到了“默认”一致性级别。默认设置在哪里?是读还是写?

bec*_*hbd 5

默认情况下,所有 R/W 操作的一致性级别均为 1。

设置 CL 是在每个查询(读取或更新插入)的基础上完成的,方法是CONSISTENCY XXXX在查询上添加语法,如下所示:

https://cassandra.apache.org/doc/latest/cql/dml.html#insert

https://cassandra.apache.org/doc/4.0/tools/cqlsh.html


Ty *_*man 5

如何为读取和写入设置不同的一致性级别?

如果您只想更改当前会话的一致性级别,请使用CONSISTENCY

如果您想以编程方式更改一致性级别,请使用适合您的客户端语言的 cassandra 驱动程序。

由于可以为每个语句设置一致性级别,因此您可以在每个语句上设置它,也可以使用PreparedStatements。如果您使用的是 Java 驱动程序,则可以为读取和写入(但不仅是读取而且只能写入)配置全局一致性级别

默认的[一致性级别]在哪里设置?它是用于读还是写?

如果您想为读取设置与写入不同的一致性级别,则必须在每个语句的基础上进行设置。用于QueryOptions().setConsistencyLevel设置全局一致性级别(对于 Java 驱动程序)。它适用于读取和写入。

要设置当前会话的一致性级别,请使用CONSISTENCYcassandra shell (CQLSH) 中的

例如:

设置 CONSISTENCY 以强制大多数节点响应: CONSISTENCY QUORUM

要查看当前的一致性级别,只需CONSISTENCY;从 shell 运行:

ty@cqlsh> consistency; Current consistency level is ONE.

用于对客户端应用程序进行编程,请使用适当的驱动程序设置一致性级别。

例如,要使用 Java 驱动程序设置每个插入的QueryBuilder.insertInto一致性级别,请使用setConsistencyLevel.

例如:

PreparedStatement pstmt = session.prepare( "INSERT INTO product (sku, description) VALUES (?, ?)"); pstmt.setConsistencyLevel(ConsistencyLevel.QUORUM);

要使用 Java 驱动程序设置读取和写入的全局一致性级别,请执行以下操作:

QueryOptions qo = new QueryOptions().setConsistencyLevel(ConsistencyLevel.ALL);

  • 由于 Java 驱动程序仅执行 CQL 语句,这些语句可以对 Cassandra 进行读取或写入,因此无法全局配置仅读取或仅写入的一致性级别。为此,由于可以为每个语句设置一致性级别,因此您可以在每个语句上设置它,也可以使用PreparedStatements。更多信息请参见查询和结果文档。

有关读/写一致性级别的更多资源

有关一致性的其他资源: 您可能还需要研究副本放置策略和复制因子(这是其他形式的一致性)。为了更好的衡量,我添加了以下链接: