

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

# 支持的 Apache Cassandra 读写一致性级别和相关成本
<a name="consistency"></a>

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

**Topics**
+ [写入一致性级别](#WriteConsistency)
+ [读取一致性级别](#ReadConsistency)
+ [不受支持的一致性级别](#UnsupportedConsistency)

## 写入一致性级别
<a name="WriteConsistency"></a>

 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-1"))  
                      .withSSL()
                      .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM)
                      .build()  
                      .connect();
```

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

## 读取一致性级别
<a name="ReadConsistency"></a>

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

对于使用`ONE`或`LOCAL_ONE`一致性进行每 4 KB 读取，对于使用预置容量模式的表，您需要支付 0.5 个读取容量单位 (RCUs)，对于使用按需模式的表，则需支付 0.5 个读取请求单位 (RRUs) 的费用。就每个使用 `LOCAL_QUORUM` 一致性的 4 KB 读取操作而言，对于使用预置容量模式的表，将向您收取 1 个读取容量单位 (RCU) 的费用，对于使用按需模式的表，将向您收取 1 个读取请求单位 (RRU) 的费用。


**根据每个表的读取一致性和读取容量吞吐量模式对每个 4 KB 的读取操作进行计费**  

| 一致性级别 | 已预置 | 按需 | 
| --- | --- | --- | 
| ONE | 0.5 RCUs | 0.5 RRUs | 
| LOCAL\$1ONE | 0.5 RCUs | 0.5 RRUs | 
| LOCAL\$1QUORUM | 1 个 RCU | 1 个 RRU | 

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

## 不受支持的一致性级别
<a name="UnsupportedConsistency"></a>

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


**不受支持的一致性级别**  

| Apache Cassandra | Amazon Keyspaces | 
| --- | --- | 
| EACH\$1QUORUM | 不支持 | 
| QUORUM | 不支持 | 
| ALL  | 不支持 | 
| TWO | 不支持 | 
| THREE | 不支持 | 
| ANY | 不支持 | 
| SERIAL | 不支持 | 
| LOCAL\$1SERIAL | 不支持 | 