本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
此部分中的主题介绍了 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 支持三个读取一致性级别:ONE
、LOCAL_ONE
和 LOCAL_QUORUM
。在 LOCAL_QUORUM
读取期间,Amazon Keyspaces 将返回一个响应来反映来自所有先前成功的写入操作的最近更新。通过使用一致性级别,ONE
或 LOCAL_ONE
可以提高读取请求的性能和可用性,但响应可能无法反映最近完成的写入操作的结果。
就每个使用 ONE
或 LOCAL_ONE
一致性的 4 KB 读取操作而言,对于使用预置容量模式的表,将向您收取 0.5 个读取容量单位 (RCU) 的费用,对于使用按需模式的表,将向您收取 0.5 个读取请求单位 (RRU) 的费用。就每个使用 LOCAL_QUORUM
一致性的 4 KB 读取操作而言,对于使用预置容量模式的表,将向您收取 1 个读取容量单位 (RCU) 的费用,对于使用按需模式的表,将向您收取 1 个读取请求单位 (RRU) 的费用。
一致性级别 | 已预置 | 按需 |
---|---|---|
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 |
不支持 |