Amazon Keyspaces 中支持的 Apache Cassandra 一致性级别 - Amazon Keyspaces(Apache Cassandra 兼容)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Keyspaces 中支持的 Apache Cassandra 一致性级别

此部分中的主题介绍了 Amazon Keyspaces(Apache Cassandra 兼容)中的读取和写入操作支持哪些 Apache Cassandra 一致性级别。

写入一致性级别

Amazon Keyspaces 跨多个可用区重复所有写入操作三次以实现持久性和高可用性。在使用 LOCAL_QUORUM 一致性级别确认写入之前,将持久存储写入。就每个 1 KB 的写入而言,对于使用预置容量模式的表,将向您收取 1 个写入容量单位 (WCU) 的费用,对于使用按需模式的表,将收取 1 个写入请求单位 (WRU) 的费用。

您可以使用 cqlsh 并用以下代码将当前会话中所有查询的一致性设置为 LOCAL_QUORUM

CONSISTENCY LOCAL_QUORUM;

要以编程方式配置一致性级别,您可以使用相应的 Cassandra 客户端驱动程序设置一致性级别。例如,4.x 版 Java 驱动程序允许您在 app config 文件中设置一致性级别,如下所示。

basic.request.consistency = LOCAL_QUORUM

如果您使用的是 3.x 版本的 Java Cassandra 驱动程序,则可以通过添加 .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM) 来指定会话的一致性级别,如以下代码示例所示。

Session session = Cluster.builder() .addContactPoint(endPoint) .withPort(portNumber) .withAuthProvider(new SigV4AuthProvider("us-east-2")) .withSSL() .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM) .build() .connect();

要为特定的写入操作配置一致性级别,可以在使用 Java 驱动程序时使用 setConsistencyLevel 参数调用 QueryBuilder.insertInto 时定义一致性。

读取一致性级别

Amazon Keyspaces 支持三个读取一致性级别:ONELOCAL_ONELOCAL_QUORUM。在 LOCAL_QUORUM 读取期间,Amazon Keyspaces 将返回一个响应来反映来自所有先前成功的写入操作的最近更新。通过使用一致性级别,ONELOCAL_ONE 可以提高读取请求的性能和可用性,但响应可能无法反映最近完成的写入操作的结果。

就每个使用 ONELOCAL_ONE 一致性的 4 KB 读取操作而言,对于使用预置容量模式的表,将向您收取 0.5 个读取容量单位 (RCU) 的费用,对于使用按需模式的表,将向您收取 0.5 个读取请求单位 (RRU) 的费用。就每个使用 LOCAL_QUORUM 一致性的 4 KB 读取操作而言,对于使用预置容量模式的表,将向您收取 1 个读取容量单位 (RCU) 的费用,对于使用按需模式的表,将向您收取 1 个读取请求单位 (RRU) 的费用。

根据每个表的读取一致性和读取容量吞吐量模式对每个 4 KB 的读取操作进行计费
一致性级别 已预置 按需
ONE 0.5 个 RCU 0.5 个 RRU
LOCAL_ONE 0.5 个 RCU 0.5 个 RRU
LOCAL_QUORUM 1 个 RCU 1 个 RRU

要为读取操作指定不同的一致性,请在使用 Java 驱动程序时使用 setConsistencyLevel 参数调用 QueryBuilder.select

不受支持的一致性级别

以下一致性级别不受 Amazon Keyspaces 的支持,并且将导致异常。

不受支持的一致性级别
Apache Cassandra Amazon Keyspaces
EACH_QUORUM 不支持
QUORUM 不支持
ALL 不支持
TWO 不支持
THREE 不支持
ANY 不支持
SERIAL 不支持
LOCAL_SERIAL 不支持