如何设置cassandra读写一致性

时间:2016-03-01 19:13:56

标签: cassandra consistency

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

此外,还提到了一个"默认"一致性水平。默认设置在哪里?它是用于读还是写?

4 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

如果要以编程方式更改一致性级别,请使用cassandra驱动程序作为客户端语言。

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

默认的[consistency level]设置在哪里?可以读写吗?

如果要为读写设置不同的一致性级别,则必须根据每个语句进行设置。使用QueryOptions().setConsistencyLevel设置全局一致性级别(用于Java驱动程序)。它同时用于读写。

要设置当前会话的一致性级别,请使用CONSISTENCY命令 来自cassandra外壳(CQLSH)。

例如:

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

要查看当前的一致性级别,只需从外壳运行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驱动程序为读写设置 global 一致性级别,请执行以下操作:

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

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

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

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

答案 2 :(得分:0)

使用CQL USING子句不再设置一致性级别。有关说明,请参阅CASSANDRA-4734

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

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

答案 3 :(得分:-1)

  1. 默认一致性在cassandra.conf文件中设置。它用于读写。

  2. 您可以在查询中添加USING选项来设置每个查询的一致性。