我找不到相关的文档。我知道在cqlsh中有一个一致性命令,但没有区分读和写的一致性级别。如何为读和写设置不同的一致性级别?
此外,提到了“默认”一致性级别。该默认级别在哪里设置?它是针对读还是写的?
我找不到相关的文档。我知道在cqlsh中有一个一致性命令,但没有区分读和写的一致性级别。如何为读和写设置不同的一致性级别?
此外,提到了“默认”一致性级别。该默认级别在哪里设置?它是针对读还是写的?
默认情况下,所有读写操作的一致性级别为 ONE。
可以通过在查询中添加 CONSISTENCY XXXX
语法来设置每个查询(读取或 upsert)的 CL。例如:
https://cassandra.apache.org/doc/latest/cql/dml.html#insert
和
如何为读和写设置不同的一致性级别?
如果您只想更改当前会话的一致性级别,请使用CONSISTENCY
。
如果您想以编程方式更改一致性级别,请使用适用于客户端语言的Cassandra驱动程序。
由于一致性级别可以针对每个语句进行设置,因此您可以在每个语句上设置它,或者使用预处理语句。如果您正在使用Java驱动程序,则可以为读和写配置全局一致性级别(但不是仅限于只读和只写)。
默认的[一致性级别]在哪里设置?它是用于读还是写?
如果您想为读和写设置不同的一致性级别,则必须在每个语句上进行设置。使用QueryOptions().setConsistencyLevel
设置全局一致性级别(对于Java驱动程序)。它适用于读和写。
CONSISTENCY QUORUM
要查看当前的一致性级别,只需从shell运行CONSISTENCY;
即可:
ty@cqlsh> consistency;
Current consistency level is ONE.
对于编程客户端应用程序,请使用适当的驱动程序设置一致性级别。QueryBuilder.insertInto
并使用setConsistencyLevel
。PreparedStatement pstmt = session.prepare(
"INSERT INTO product (sku, description) VALUES (?, ?)");
pstmt.setConsistencyLevel(ConsistencyLevel.QUORUM);
要使用Java驱动程序为读取和写入设置全局一致性级别,请执行以下操作:其他关于一致性的资源: 您可能还想了解副本放置策略和复制因子(这些是其他形式的一致性)。 我为了保险起见,包含了以下链接:
现在设置一致性级别不再使用PreparedStatement。该API已经更改。现在您必须使用BatchStatementBuilder。
这里是一个可行的示例代码。
BatchStatementBuilder builder = BatchStatement.builder(DefaultBatchType.UNLOGGED);
builder.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
PreparedStatement preparedStatement = session.prepare("INSERT INTO \"ScottKeySpace16\".\"Movie\" (title, year, plot) values (:k0, :k1, :k2)");
builder.addStatement(preparedStatement.boundStatementBuilder()
.setString("k0", "Movie44")
.setInt("k1", 2022)
.setString("k2", "This is a very funny movie")
.build());
BatchStatement batchStatement = builder.build();
session.execute(batchStatement);
一旦使用CQL USING
子句,一致性级别就不再设置。请参见CASSANDRA-4734以获取说明。
相反,在CQLSH中,您应该使用CONSISTENCY
命令:有关详细信息,请参见此处。
请注意,所有DataStax驱动程序中的默认一致性级别已从ONE
更改为LOCAL_ONE
:有关详细信息,请参见Python驱动程序文档 - 但是,尽管在幕后使用了Python驱动程序,但CQLSH仍具有ONE
的默认一致性级别)。
默认一致性设置在cassandra.conf文件中。它适用于读和写。
您可以通过在查询中添加USING选项来设置每个查询的一致性。