如何为读取和写入设置不同的一致性级别?
如果您只想更改当前会话的一致性级别,请使用CONSISTENCY
.
如果您想以编程方式更改一致性级别,请使用适合您的客户端语言的 cassandra 驱动程序。
由于可以为每个语句设置一致性级别,因此您可以在每个语句上设置它,也可以使用PreparedStatements。如果您使用 Java 驱动程序,则可以为读取和写入配置全局一致性级别(但不能only读取和only写道)。
默认的[一致性级别]在哪里设置?它是用于读还是写?
如果您想为读取设置与写入不同的一致性级别,则必须在每个语句的基础上进行设置。使用QueryOptions().setConsistencyLevel
设置全局一致性级别(对于 Java 驱动程序)。它适用于读取和写入。
设置当前会话的一致性级别, 使用一致性 https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlshConsistency.html命令
来自 cassandra shell (CQLSH)。
例如:
设置 CONSISTENCY 以强制大多数节点响应:
CONSISTENCY QUORUM
要查看当前的一致性级别,只需运行CONSISTENCY;
从外壳:
ty@cqlsh> consistency;
Current consistency level is ONE.
用于对客户端应用程序进行编程,使用适当的驱动程序设置一致性级别。
要设置一个每次插入使用Java驱动程序的一致性级别,例如,调用QueryBuilder.insertInto
with setConsistencyLevel
.
例如:
PreparedStatement pstmt = session.prepare(
"INSERT INTO product (sku, description) VALUES (?, ?)");
pstmt.setConsistencyLevel(ConsistencyLevel.QUORUM);
要设置一个global使用 Java 驱动程序读取和写入的一致性级别,执行以下操作:
QueryOptions qo = new QueryOptions().setConsistencyLevel(ConsistencyLevel.ALL);
- 由于 Java 驱动程序仅执行 CQL 语句,这些语句可以对 Cassandra 进行读取或写入,因此无法全局配置仅读取或仅写入的一致性级别。为此,由于可以为每个语句设置一致性级别,因此您可以在每个语句上设置它,也可以使用PreparedStatements。更多信息在查询和结果 https://docs.datastax.com/en/developer/java-driver/3.4/upgrade_guide/migrating_from_astyanax/queries_and_results/文档。
有关读/写一致性级别的更多资源
-
How consistency level is configured https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html
- Cassandra 的 Java 驱动程序文档 https://docs.datastax.com/en/developer/java-driver/3.3/manual/
- 请参阅中的“一致性级别”部分配置与 Java 驱动程序的一致性 https://docs.datastax.com/en/developer/java-driver/3.4/upgrade_guide/migrating_from_astyanax/configuration/
有关一致性的其他资源:您可能还想研究您的副本放置策略和复制因子(这是其他形式的一致性)。
为了更好的衡量,我添加了以下链接:
- Cassandra 中数据复制的背景 https://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateKeyspace.html
- 如何使用 CREATE KEYSPACE 更新副本策略和复制因子 https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlCreateKeyspace.html
-
一致性如何影响性能 https://docs.datastax.com/en/cql/3.3/cql/cql_using/useTracingPerf.html