我找不到这方面的文档。我知道cqlsh中有一个一致性命令,但读写一致性没有区别。如何为读写设置不同的一致性级别?
此外,还提到了“默认”一致性级别。默认设置在哪里?它是读还是写?
默认情况下,所有R / W操作的一致性级别为1。
通过在查询中添加CONSISTENCY XXXX
语法,在每个查询(读取或upsert)基础上设置CL,如下所示:
https://cassandra.apache.org/doc/latest/cql/dml.html#insert
和
如何为读写设置不同的一致性级别?
如果您只想更改当前会话的一致性级别,请使用CONSISTENCY
。
如果要以编程方式更改一致性级别,请使用cassandra驱动程序作为客户端语言。
由于可以为每个语句设置一致性级别,因此您可以在每个语句上设置它,也可以使用PreparedStatements。如果您正在使用Java驱动程序,则可以为BOTH读取和写入配置全局一致性级别(但不仅仅是读取和写入)。
默认[一致性级别]设置在哪里?它是读还是写?
如果要为读取设置不同的一致性级别而不是写入,则必须在每个语句的基础上进行。使用QueryOptions().setConsistencyLevel
设置全局一致性级别(对于Java驱动程序)。这是为了BOTH读写。
要设置当前会话的一致性级别,请使用cassandra shell(CQLSH)中的CONSISTENCY命令。
例如:
设置CONSISTENCY以强制大多数节点响应:
CONSISTENCY QUORUM
要查看当前的一致性级别,只需从shell运行CONSISTENCY;
:
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);
有关读/写一致性级别的更多资源
关于一致性的其他资源:您可能还需要查看副本放置策略和复制因子(这是其他形式的一致性)。我在下面列出了很好的衡量指标:
使用CQL USING
子句不再设置一致性级别。请参阅CASSANDRA-4734以获得解释。
相反,使用CQLSH,您应该使用CONSISTENCY
命令:有关详细信息,请参阅here。
请注意,所有DataStax驱动程序中的默认一致性级别从ONE
更改为LOCAL_ONE
:有关详细信息,请参阅python driver documentation - 但是,尽管在幕后使用了python驱动程序,但CQLSH仍然具有ONE
的默认一致性。