如何设置cassandra读写一致性

问题描述 投票:2回答:4

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

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

cassandra consistency
4个回答
2
投票

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

通过在查询中添加CONSISTENCY XXXX语法,在每个查询(读取或upsert)基础上设置CL,如下所示:

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

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


1
投票

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

如果您只想更改当前会话的一致性级别,请使用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);

  • 由于Java驱动程序只执行CQL语句(可以是对Cassandra的读取或写入),因此无法仅对读取或仅写入进行全局配置一致性级别。为此,由于可以为每个语句设置一致性级别,您可以在每个语句上设置它,也可以使用PreparedStatements。 Queries and Results文档中的更多信息。

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

关于一致性的其他资源:您可能还需要查看副本放置策略和复制因子(这是其他形式的一致性)。我在下面列出了很好的衡量指标:


0
投票

使用CQL USING子句不再设置一致性级别。请参阅CASSANDRA-4734以获得解释。

相反,使用CQLSH,您应该使用CONSISTENCY命令:有关详细信息,请参阅here

请注意,所有DataStax驱动程序中的默认一致性级别从ONE更改为LOCAL_ONE:有关详细信息,请参阅python driver documentation - 但是,尽管在幕后使用了python驱动程序,但CQLSH仍然具有ONE的默认一致性。


-1
投票
  1. 默认一致性在cassandra.conf文件中设置。它用于读写。
  2. 您可以在查询中添加USING选项来设置每个查询的一致性。
© www.soinside.com 2019 - 2024. All rights reserved.