

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

# 在 Amazon Keyspaces 中配置 read/write 容量模式
<a name="ReadWriteCapacityMode"></a>

Amazon Keyspaces 有两种 read/write 容量模式用于处理表上的读取和写入：
+  按需（默认） 
+  已预置 

 您选择的 read/write 容量模式控制如何对读取和写入吞吐量收费，以及如何管理表吞吐量容量。

**Topics**
+ [配置按需容量模式](ReadWriteCapacityMode.OnDemand.md)
+ [配置预置容量模式](ReadWriteCapacityMode.Provisioned.md)
+ [在 Amazon Keyspaces 中查看表的容量模式](ReadWriteCapacityMode.ProvisionedThroughput.ManagingCapacity.md)
+ [在 Amazon Keyspaces 中更改表的容量模式](ReadWriteCapacityMode.SwitchReadWriteCapacityMode.md)
+ [为 Amazon Keyspaces 中的表配置预热](warm-throughput.md)

# 配置按需容量模式
<a name="ReadWriteCapacityMode.OnDemand"></a>

Amazon Keyspaces（Apache Cassandra 兼容）*按需*容量模式是一个灵活的计费选项，可以每秒处理数千个请求而不需要进行容量规划。此选项为读取和写入请求提供 pay-per-request定价，因此您只需为实际用量付费。

 选择按需模式时，Amazon Keyspaces 可以将表的吞吐容量立即扩展到以前达到的任何流量级别，然后在应用程序流量减少时调整回来。如果工作负载的流量级别达到新的峰值，则该服务会迅速调整以便为您的表增加吞吐容量。您可以为新表和现有表启用按需容量模式。

如果满足以下任意条件，则按需模式是很好的选项：
+ 您创建工作负载未知的新表。
+ 您的应用程序流量不可预测。
+ 您更喜欢只为您使用的容量付费的便利性。

要开始使用按需模式，您可以使用控制台或使用几行 Cassandra 查询语言 (CQL) 代码创建新表或更新现有表以使用按需容量模式。有关更多信息，请参阅 [表](cql.ddl.table.md)。

**Topics**
+ [读取请求单位和写入请求单位](#ReadWriteCapacityMode.requests)
+ [峰值流量和扩缩属性](#ReadWriteCapacityMode.PeakTraffic)
+ [按需容量模式的最初吞吐量](#ReadWriteCapacityMode.InitialThroughput)

## 读取请求单位和写入请求单位
<a name="ReadWriteCapacityMode.requests"></a>

 使用按需容量模式表，您无需预先指定您希望应用程序使用多少读取和写入吞吐量。Amazon Keyspaces 按读取请求单位 () 和写入请求单位 (RRUs) 向您收取您在表上执行的读取和写入操作的费用。WRUs
+ 对于大小不超过 4 KB 的行，一个 *RRU* 代表一个 `LOCAL_QUORUM` 读取请求，或两个 ` LOCAL_ONE` 读取请求。如果您需要读取大于 4 KB 的行，则读取操作会使用额外的 RRUs。 RRUs 所需的总数取决于行大小，以及您是要使用一致性`LOCAL_QUORUM`还是`LOCAL_ONE`读取一致性。例如， RRUs 使用读取一致性读取 8 KB 的行需要 2 个，如果您选择`LOCAL_QUORUM``LOCAL_ONE`读取一致性，则需要 1 个 RRU。
+ 一个 *WRU* 代表对大小不超过 1 KB 的行的一次写入。所有写入操作都使用`LOCAL_QUORUM`一致性，使用轻量级事务 (LWTs) 不收取额外费用。如果您需要写入大于 1 KB 的行，则写入操作会使用额外的 WRUs。 WRUs 所需的总数取决于行大小。例如，如果您的行大小为 2 KB，则需要有 2 KB WRUs 才能执行一个写入请求。

有关支持的一致性级别的信息，请参阅[支持的 Apache Cassandra 读写一致性级别和相关成本](consistency.md)。

## 峰值流量和扩缩属性
<a name="ReadWriteCapacityMode.PeakTraffic"></a>

使用按需容量模式的 Amazon Keyspaces 表会自动适应应用程序的流量。按需容量模式会即时在表中承受之前双倍的峰值流量。例如，您的应用程序流量模式可能在每秒 5,000 到 10,000 次 `LOCAL_QUORUM` 读取之间变化，其中每秒 10,000 次读取是以前的流量峰值。

使用这种模式，按需容量模式可即时容纳最高每秒 20,000 次读取的持续流量。如果应用程序承受每秒 20,000 次读取的流量，则该峰值将成为新的之前峰值，从而使后续流量高达每秒 40,000 次读取。

 如果您在一个表上需要的流量是前一个峰值的两倍以上，则随着流量的增加，Amazon Keyspaces 会自动分配更多容量。这有助于确保您的表具有足够的吞吐容量来处理额外的请求。但是，如果您在 30 分钟内超过前一个峰值的两倍，则可能会出现吞吐容量不足错误。

例如，假设您的应用程序流量模式在每秒 5,000 到 10,000 个强一致性读取之间变化，而上一次达到的流量峰值为每秒 20,000 次读取。在这种情况下，服务建议您在将流量推动到每秒 40,000 次读取之前，至少将流量增长的时间间隔 30 分钟。

要了解如何估算表的读取和写入容量消耗，请参阅[估算 Amazon Keyspaces 中读取和写入吞吐量的容量消耗](capacity-examples.md)。

要了解有关账户的默认配额以及如何增加此配额的更多信息，请参阅 [Amazon Keyspaces（Apache Cassandra 兼容）限额](quotas.md)。

## 按需容量模式的最初吞吐量
<a name="ReadWriteCapacityMode.InitialThroughput"></a>

如果您在启用按需容量模式的情况下创建了新表，或者首次将现有表切换为按需容量模式，则该表将具有以下之前峰值设置，即使该表之前尚未使用按需容量模式提供流量也是如此。
+  **新创建的按需容量模式表：**之前的峰值分别为 2,000 WRUs 和 6,000 RRUs。您可以立即将以前的峰值翻倍。这样做可以使新创建的按需表最多可容纳 4,000 WRUs 和 12,000 个 RRUs。
+  **现有表切换到按需容量模式：**之前的峰值是前一个峰值的一半， WCUs 并且是为该表或新创建的具有按需容量模式的表的设置进行 RCUs 预配置，以较高者为准。

# 配置预置容量模式
<a name="ReadWriteCapacityMode.Provisioned"></a>

 如果您选择*预置的吞吐容量* 模式，则指定您的应用程序需要的每秒读取和写入次数。这可以帮助您管理 Amazon Keyspaces 的使用情况，使其保持在或低于定义的请求速率，从而保持可预测性。要详细了解预置吞吐量的自动扩展，请参阅[使用 Amazon Keyspaces 自动扩缩自动管理吞吐能力](autoscaling.md)。

如果满足以下任意条件，则预置的吞吐容量模式是很好的选项：
+ 您具有可预测的应用程序流量。
+ 您​运行流量比较稳定或逐渐增加的应用程序。
+ 您可以预测容量需求。

## 读取容量单位和写入容量单位
<a name="ReadWriteCapacityMode.Provisioned.Units"></a>

 对于预置吞吐量容量模式表，您可以根据读取容量单位 (RCUs) 和写入容量单位 () 来指定吞吐容量：WCUs
+ 对于大小不超过 4 KB 的行，一个 *RCU* 表示每秒一个 `LOCAL_QUORUM` 读取操作或每秒两个 `LOCAL_ONE` 读取操作。如果您需要读取大于 4 KB 的行，则读取操作会使用额外的 RCUs。

   RCUs 所需的总数取决于行大小以及您想要`LOCAL_QUORUM`还是`LOCAL_ONE`读取。例如，如果您的行大小为 8 KB，则需要 2 RCUs 才能维持每秒`LOCAL_QUORUM`读取一次；如果您选择`LOCAL_ONE`读取，则需要 1 个 RCU。
+ 一个 *WCU* 表示每秒对大小不超过 1 KB 的行执行一次写入操作。所有写入操作都使用`LOCAL_QUORUM`一致性，使用轻量级事务 (LWTs) 不收取额外费用。如果您需要写入大于 1 KB 的行，则写入操作会使用额外的 WCUs。

   WCUs 所需的总数取决于行大小。例如，如果您的行大小为 2 KB，则需要 2 WCUs 才能维持每秒一个写入请求。有关如何估算表的读取和写入容量消耗的更多信息，请参阅[估算 Amazon Keyspaces 中读取和写入吞吐量的容量消耗](capacity-examples.md)。

如果您的应用程序读取或写入较大的行（最大为 1 MB 的 Amazon Keyspaces 行大小上限），它将消耗更多的容量单位。要了解有关如何估算行大小的更多信息，请参阅 [估算 Amazon Keyspaces 中的行大小](calculating-row-size.md)。例如，假设您创建了一个包含 6 RCUs 和 6 WCUs 的预配置表。使用这些设置，您的应用程序可以执行以下操作：
+ 执行高达每秒 24 KB (4 KB × 6 RCUs) 的`LOCAL_QUORUM`读取。
+ 执行最高每秒 48 KB 的 `LOCAL_ONE` 读取（读取吞吐量的两倍）。
+ 每秒最多写入 6 KB（1 KB × 6 WCUs）。

 *预置的吞吐量* 是应用程序可以从表消耗的最大吞吐容量。如果您的应用程序超出了预置的吞吐容量，则可能会发现容量不足错误。

例如，读取请求如果没有足够的吞吐容量，就会出现 `Read_Timeout` 异常，并发布到 `ReadThrottleEvents` 指标。写入请求如果没有足够的吞吐容量，就会出现 `Write_Timeout` 异常，并发布到 `WriteThrottleEvents` 指标。

您可以使用 Amazon CloudWatch 监控您的预配置吞吐量和实际吞吐量指标以及容量不足事件。有关这些指标的更多信息，请参阅 [Amazon Keyspaces 指标与维度](metrics-dimensions.md)。

**注意**  
由于容量不足而反复出现错误可能会导致客户端驱动程序特定的异常，例如， DataStax Java 驱动程序因出现故障。`NoHostAvailableException`

要更改表的吞吐容量设置，您可以使用 AWS 管理控制台 或使用 CQL 的 `ALTER TABLE` 语句，有关更多信息，请参阅 [ALTER TABLE](cql.ddl.table.md#cql.ddl.table.alter)。

要了解有关账户的默认配额以及如何增加此配额的更多信息，请参阅 [Amazon Keyspaces（Apache Cassandra 兼容）限额](quotas.md)。

# 在 Amazon Keyspaces 中查看表的容量模式
<a name="ReadWriteCapacityMode.ProvisionedThroughput.ManagingCapacity"></a>

您可以在 Amazon Keyspaces 系统键空间中查询系统表，以查看有关表的容量模式信息。您还可以查看表使用的是按需吞吐容量模式还是预置吞吐容量模式。如果表配置为预置吞吐量模式，您会看到为表预置的吞吐容量。

您也可以使用 AWS CLI 查看表的容量模式。

要更改表的预置吞吐量，请使用 [在 Amazon Keyspaces 中更改表的容量模式](ReadWriteCapacityMode.SwitchReadWriteCapacityMode.md)。

------
#### [ Cassandra Query Language (CQL) ]

**示例**

```
SELECT * from system_schema_mcs.tables where keyspace_name = 'mykeyspace' and table_name = 'mytable';
```

使用按需容量模式配置的表返回以下内容。

```
{
   "capacity_mode":{
      "last_update_to_pay_per_request_timestamp":"1579551547603",
      "throughput_mode":"PAY_PER_REQUEST"
   }
}
```

使用预置吞吐容量模式配置的表将返回以下内容。

```
{
   "capacity_mode":{
      "last_update_to_pay_per_request_timestamp":"1579048006000",
      "read_capacity_units":"5000",
      "throughput_mode":"PROVISIONED",
      "write_capacity_units":"6000"
   }
}
```

`last_update_to_pay_per_request_timestamp` 值以毫秒为单位。

------
#### [ CLI ]

使用查看表的吞吐容量模式 AWS CLI

```
aws keyspaces get-table --keyspace-name myKeyspace --table-name myTable
```

对于预置容量模式下的表，此命令的输出可能类似于以下内容。

```
"capacitySpecification": {
        "throughputMode": "PROVISIONED",
        "readCapacityUnits": 4000,
        "writeCapacityUnits": 2000
    }
```

而在按需模式下，表的输出类似如下内容。

```
"capacitySpecification": {
        "throughputMode": "PAY_PER_REQUEST",
        "lastUpdateToPayPerRequestTimestamp": "2024-10-03T10:48:19.092000+00:00"
    }
```

------

# 在 Amazon Keyspaces 中更改表的容量模式
<a name="ReadWriteCapacityMode.SwitchReadWriteCapacityMode"></a>

当您将表从预置的容量模式切换到按需容量模式时，Amazon Keyspaces 会对表和分区的结构进行若干更改。此过程可能耗时数分钟。在切换期间，您的表将提供与先前预置的 WCU 和 RCU 数量相一致的吞吐量。

当您从按需容量模式切换回预置的容量模式时，表将提供与表设置为按需容量模式时达到的先前峰值一致的吞吐量。

切换容量模式时，需要等待以下时间：
+ 您可以随时将按需模式下新创建的表切换到预置容量模式。但是，您只有在表创建时间戳的 24 小时之后才能将其切换回按需模式。
+ 您可以随时将按需模式下的现有表切换到预置容量模式。但是，在 24 小时内，您只能将容量模式从预置模式切换到按需模式一次。

------
#### [ Cassandra Query Language (CQL) ]

**使用 CQL 更改表的吞吐能力模式**

1. 要将表的容量模式更改为 `PROVIOSIONED`，必须根据工作负载的预期峰值配置读取容量和写入容量单位数。以下语句便是一个示例。您也可以运行此语句来调整表的读取容量或写入容量单位数。

   ```
   ALTER TABLE catalog.book_awards WITH CUSTOM_PROPERTIES={'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 6000, 'write_capacity_units': 3000}};
   ```

   要使用自动扩缩功能配置预置容量模式，请参阅[在现有表上配置自动扩缩](autoscaling.configureTable.md)。

1. 要将表的容量模式更改为按需模式，请将吞吐量模式设置为 `PAY_PER_REQUEST`。下面是一个示例语句。

   ```
   ALTER TABLE catalog.book_awards WITH CUSTOM_PROPERTIES={'capacity_mode':{'throughput_mode': 'PAY_PER_REQUEST'}};
   ```

1. 您可以使用以下语句来确认表的容量模式。

   ```
   SELECT * from system_schema_mcs.tables where keyspace_name = 'catalog' and table_name = 'book_awards';
   ```

   使用按需容量模式配置的表返回以下内容。

   ```
   {
      "capacity_mode":{
         "last_update_to_pay_per_request_timestamp":"1727952499092",
         "throughput_mode":"PAY_PER_REQUEST"
      }
   }
   ```

   `last_update_to_pay_per_request_timestamp` 值以毫秒为单位。

------
#### [ CLI ]

**使用更改表的吞吐容量模式 AWS CLI**

1. 要将表的容量模式更改为 `PROVIOSIONED`，必须根据工作负载的预期峰值配置读取容量和写入容量单位数。下面是一个命令示例。您也可以运行此命令来调整表的读取容量或写入容量单位数。

   ```
   aws keyspaces update-table --keyspace-name catalog --table-name book_awards  
                                       \--capacity-specification throughputMode=PROVISIONED,readCapacityUnits=6000,writeCapacityUnits=3000
   ```

   要使用自动扩缩功能配置预置容量模式，请参阅[在现有表上配置自动扩缩](autoscaling.configureTable.md)。

1. 要将表的容量模式更改为按需模式，请将吞吐量模式设置为 `PAY_PER_REQUEST`。下面是一个示例语句。

   ```
   aws keyspaces update-table --keyspace-name catalog --table-name book_awards 
                                       \--capacity-specification throughputMode=PAY_PER_REQUEST
   ```

1. 您可以使用以下命令查看为表配置的容量模式。

   ```
   aws keyspaces get-table --keyspace-name catalog --table-name book_awards
   ```

   而在按需模式下，表的输出类似如下内容。

   ```
   "capacitySpecification": {
           "throughputMode": "PAY_PER_REQUEST",
           "lastUpdateToPayPerRequestTimestamp": "2024-10-03T10:48:19.092000+00:00"
       }
   ```

------

# 为 Amazon Keyspaces 中的表配置预热
<a name="warm-throughput"></a>

Amazon Keyspaces 会根据按需或预配置的吞吐量自动扩展存储分区，但是对于新表或突然出现的吞吐量峰值，分配所需的存储分区可能需要更长的时间。为确保新表或现有表具有足够的容量来支持预期的峰值吞吐量，您可以手动设置特定的*热吞吐量*值来*预热*表。

*热吞吐量*是指您的 Amazon Keyspaces 表可以立即支持的读取和写入操作的数量。默认情况下，这些值适用于所有新建和现有表。如果您使用的是按需模式，或者如果您更新了预配置吞吐量，Amazon Keyspaces 可确保您的应用程序能够立即发出不超过这些值的请求。

随着使用量的增加，Amazon Keyspaces 会自动调整温吞吐量值。要调整即将到来的高峰事件的吞吐容量，例如，当您从另一个数据库迁移数据时（可能需要在短时间内加载数 TB 的数据），您可以手动增加表的热吞吐量值。这对于请求速率可能增加 10 倍、100 倍或更高的计划峰值事件非常有用。首先，评估当前的热吞吐量是否足以处理预期的流量。然后，如果您需要为计划的峰值工作负载预热表，则可以在不更改吞吐量设置或[容量模式](ReadWriteCapacityMode.md)的情况下手动增加热吞吐量值。

您可以预热表以进行读取操作、写入操作或两者兼而有之。您可以为新的和现有的单区域表和多区域表增加此值，并且您设置的热吞吐量设置会自动应用于多区域表的所有副本。您可以随时预热的 Amazon Keyspaces 表的数量没有限制。完成预热的时间取决于您设置的值和桌子的大小。您可以同时提交预热请求，这些请求不会干扰任何表操作。您可以将桌子预热到该地区账户的桌子配额上限。使用 S [ervice Quotas 控制台](https://console.aws.amazon.com/servicequotas)检查您当前的配额，并在需要时增加配额。

默认情况下，Amazon Keyspaces 根据您的按需使用量或预配置容量调整的温吞吐量值适用于所有表，无需支付额外费用。但是，如果您手动将预热吞吐量值增加到流量峰值事件的预热表，则需要支付额外费用。有关更多信息，请参阅 [Amazon Keyspaces](https://aws.amazon.com/keyspaces/pricing/) 定价。

以下是您在预热 Amazon Keyspaces 表时可以考虑的一些不同的场景和最佳实践。

## 热吞吐量和不均匀的访问模式
<a name="warm-throughput-scenarios-uneven"></a>

表的热吞吐量可能为每秒 30,000 个读取单位和每秒 10,000 个写入单元，但在达到这些值之前，读取或写入时仍可能遇到容量超出的事件。这可能是由于热分区造成的。虽然 Amazon Keyspaces 可以不断扩展以支持几乎无限的吞吐量，但每个分区限制为每秒 1,000 个写入单元和每秒 3,000 个读取单元。如果您的应用程序将过多的流量带到表的一小部分分区，则甚至在您达到表的热吞吐量值之前，就可能发生容量超出事件。我们建议遵循 [Amazon Keyspaces 最佳实践](bp-partition-key-design.md)，以确保无缝扩展并避免过热分区。

## 预置表的热吞吐量
<a name="warm-throughput-scenarios-provisioned"></a>

假设一个预配置表，它的热吞吐量为每秒 30,000 个读取单元和 10,000 个写入单元/秒，但目前的预配置吞吐量分别为 4,000 RCUs 和 8,000。 WCUs通过更新预配置吞吐量设置，您可以立即将表的预配置吞吐量扩展到 30,000 RCUs 或 10,000 WCUs 。当您将预配置吞吐量增加到这些值之外时，由于您已经建立了新的峰值吞吐量，因此热吞吐量会自动调整到新的更高值。例如，如果您将预配置吞吐量设置为 50,000 RCU，则热吞吐量将增加到每秒 50,000 个读取单位。

```
"ProvisionedThroughput": 
    {
        "ReadCapacityUnits": 4000,
        "WriteCapacityUnits": 8000 
    }
"WarmThroughput": 
    { 
        "ReadUnitsPerSecond": 30000,
        "WriteUnitsPerSecond": 10000
    }
```

## 按需表的热吞吐量
<a name="warm-throughput-scenarios-ondemand"></a>

新的按需表将以每秒 12000 个读取单位和每秒 4000 个写入单位的热吞吐量开始。表可以立即容纳高达这些级别的持续流量。当您的请求超过每秒 12,000 个读取单位或每秒 4,000 个写入单位时，热吞吐量会自动调整为更高的值。

```
"WarmThroughput": 
    { 
        "ReadUnitsPerSecond": 12000,
        "WriteUnitsPerSecond": 4000
    }
```

## 预热 Amazon Keyspaces 表的最佳实践
<a name="prewarming-best-practices"></a>

在为 Amazon Keyspaces 表实施预热时，请遵循以下最佳实践：

准确估计所需的容量  
由于预热会产生一次性成本，因此请根据预期的工作负载仔细计算所需的吞吐量，以避免过度配置。

考虑表的架构  
行数较大的表可能需要更多的分区才能实现相同的吞吐量。在估算预热需求时，请考虑您的平均行长。

监控表性能  
预热后，使用 CloudWatch 指标来验证您的表是否按预期处理负载。有关更多信息，请参阅 [使用 Amazon 监控预热桌子的性能 CloudWatch](monitor-prewarming-cloudwatch.md)。

管理配额  
如果您的应用程序需要的吞吐量高于默认配额允许的吞吐量（40,000 RCUs/WCUs 或 2,000 个分区），则请求配额会在高流量事件发生之前提前增加。要请求增加配额，您可以使用 [服务限额控制台](https://console.aws.amazon.com/servicequotas)。

优化成本  
对于临时的高流量事件，请考虑使用预热而不是切换到高容量的预配置模式，因为对于短时事件，这可能更具成本效益。有关定价的更多信息，请参阅 [Amazon Keyspaces](https://aws.amazon.com/keyspaces/pricing/) 定价。

**注意**  
在测试阶段监控应用程序的性能指标，以验证预热配置是否足以支持您的工作负载需求。

**Topics**
+ [热吞吐量和不均匀的访问模式](#warm-throughput-scenarios-uneven)
+ [预置表的热吞吐量](#warm-throughput-scenarios-provisioned)
+ [按需表的热吞吐量](#warm-throughput-scenarios-ondemand)
+ [预热 Amazon Keyspaces 表的最佳实践](#prewarming-best-practices)
+ [创建具有更高热吞吐量的新 Amazon Keyspaces 表](create-table-warm-throughput.md)
+ [增加现有 Amazon Keyspaces 表的热吞吐量](update-warm-throughput.md)
+ [查看 Amazon Keyspaces 表的热吞吐量](view-warm-throughput.md)
+ [使用 Amazon 监控预热桌子的性能 CloudWatch](monitor-prewarming-cloudwatch.md)

# 创建具有更高热吞吐量的新 Amazon Keyspaces 表
<a name="create-table-warm-throughput"></a>

在创建 Amazon Keyspaces 表时，您可以使用控制台、CQL 或调整热吞吐量值。 AWS CLI

------
#### [ Console ]

**如何使用热吞吐量设置创建新表**

1. [登录并在家中打开 Amazon Keyspaces 控制台。 AWS 管理控制台 https://console.aws.amazon.com/keyspaces/](https://console.aws.amazon.com/keyspaces/home)

1. 在导航窗格中，选择**表**，然后选择**创建表**。

1. 在**创建表**页面的**表详细信息**部分中，选择一个键空间并为新表提供一个名称。

1. 在**列**部分，为您的表创建架构。

1. 在**主键**部分中，定义表的主键并选择可选的集群列。

1. 在**表设置**部分，选择**自定义设置**。

1. 继续**读取/写入容量设置**。

1. 对于**容量模式**，您可以选择**按需**或**预配置。**

1. 在**表格的预热**部分中，您可以根据需要增加每秒**读取单位数和每秒****写入单位数**的值，以准备表处理计划的峰值事件。

   默认情况下，Amazon Keyspaces 根据您的按需使用量或预配置容量调整的温吞吐量值适用于所有表，无需支付额外费用。请注意，如果您手动增加默认的热吞吐量值以预热流量高峰事件，则需要支付额外费用。

1. 根据需要配置其他可选表格功能。然后选择 “**创建表**”。

------
#### [ Cassandra Query Language (CQL) ]
+ 使用以下方法之一创建具有温吞吐量的表：
  + 对于预配置模式，使用以下 CQL 语法创建表并指定读取和写入的预期峰值容量：

    ```
    CREATE TABLE catalog.book_awards (
       year int,
       award text,
       rank int,
       category text,
       book_title text,
       author text,
       publisher text,
       PRIMARY KEY ((year, award), category, rank))
    WITH CUSTOM_PROPERTIES = {  
        'capacity_mode': {
           'throughput_mode': 'PROVISIONED',
           'read_capacity_units': 20000,
           'write_capacity_units': 10000
         },
        'warm_throughput': {  
            'read_units_per_second': 40000,  
            'write_units_per_second': 20000  
         }
    };
    ```
  + 对于按需模式，使用以下 CQL 语法创建表并指定读取和写入的预期峰值容量：

    ```
    CREATE TABLE catalog.book_awards (
       year int,
       award text,
       rank int,
       category text,
       book_title text,
       author text,
       publisher text,
       PRIMARY KEY ((year, award), category, rank))
    WITH CUSTOM_PROPERTIES = {  
        'capacity_mode': {
           'throughput_mode': 'PAY_PER_REQUEST'
         },
        'warm_throughput': {  
            'read_units_per_second': 40000,  
            'write_units_per_second': 20000  
         }
    };
    ```

  要确认表的容量设置，请参阅[查看 Amazon Keyspaces 表的热吞吐量](view-warm-throughput.md)。

------
#### [ CLI ]

1. 使用以下方法之一创建具有温吞吐量的表 AWS CLI
   + 在预置模式下创建新表，并指定新表的预期读取和写入容量峰值。下面是一个示例语句。

     ```
     aws keyspaces create-table \
     --keyspace-name 'catalog' \
     --table-name 'book_awards' \
     --schema-definition 'allColumns=[{name=year,type=int},{name=award,type=text},{name=rank,type=int},{name=category,type=text},{name=book_title,type=text},{name=author,type=text},{name=publisher,type=text}],partitionKeys=[{name=year},{name=award}],clusteringKeys=[{name=category,orderBy=ASC},{name=rank,orderBy=ASC}]' \
     --capacity-specification throughputMode=PROVISIONED,readCapacityUnits=20000,writeCapacityUnits=10000 \
     --warm-throughput-specification readUnitsPerSecond=40000,writeUnitsPerSecond=20000
     ```
   + 在按需模式下创建新表，并为新表指定读取和写入的预期峰值容量值。下面是一个示例语句。

     ```
     aws keyspaces create-table \
     --keyspace-name 'catalog' \
     --table-name 'book_awards' \
     --schema-definition 'allColumns=[{name=year,type=int},{name=award,type=text},{name=rank,type=int},{name=category,type=text},{name=book_title,type=text},{name=author,type=text},{name=publisher,type=text}],partitionKeys=[{name=year},{name=award}],clusteringKeys=[{name=category,orderBy=ASC},{name=rank,orderBy=ASC}]' \
     --warmThroughputSpecification readUnitsPerSecond=40000,writeUnitsPerSecond=20000
     ```

1. 命令的输出返回表的 ARN，如下例所示。

   ```
   {
       "resourceArn": "arn:aws::cassandra:us-east-1:111122223333:/keyspace/catalog/table/book_awards>"
   }
   ```

   要确认表的容量设置，请参阅[查看 Amazon Keyspaces 表的热吞吐量](view-warm-throughput.md)。

------
#### [ Java ]

**使用适用于 Java 的 SDK 创建新表。**
+ 在预置模式下创建新表，并指定新表的预期读取和写入容量峰值。以下代码示例就是这方面的一个示例。

  ```
  import software.amazon.awssdk.services.keyspaces.KeyspacesClient;
  import software.amazon.awssdk.services.keyspaces.model.*;
  
  public class PreWarmingExample {
      public static void main(String[] args) {
          KeyspacesClient keyspacesClient = KeyspacesClient.builder().build();
  
          // Define schema
          List<ColumnDefinition> columns = Arrays.asList(
              ColumnDefinition.builder().name("year").type("int").build(),
              ColumnDefinition.builder().name("award").type("text").build(),
              ColumnDefinition.builder().name("rank").type("int").build(),
              ColumnDefinition.builder().name("category").type("text").build(),
              ColumnDefinition.builder().name("book_title").type("text").build(),
              ColumnDefinition.builder().name("author").type("text").build(),
              ColumnDefinition.builder().name("publisher").type("text").build()
          );
          
          List<PartitionKey> partitionKeys = Arrays.asList(
              PartitionKey.builder().name("year").build(),
              PartitionKey.builder().name("award").build()
          );
          
          List<ClusteringKey> clusteringKeys = Arrays.asList(
              ClusteringKey.builder().name("category").orderBy("ASC").build(),
              ClusteringKey.builder().name("rank").orderBy("ASC").build()
          );
          
          SchemaDefinition schema = SchemaDefinition.builder()
              .allColumns(columns)
              .partitionKeys(partitionKeys)
              .clusteringKeys(clusteringKeys)
              .build();
  
          // Define capacity specification
          CapacitySpecification capacitySpec = CapacitySpecification.builder()
              .throughputMode(ThroughputMode.PROVISIONED)
              .readCapacityUnits(20000)
              .writeCapacityUnits(10000)
              .build();
              
          // Define warm throughput specification
          WarmThroughputSpecification warmThroughput = WarmThroughputSpecification.builder()
              .readUnitsPerSecond(40000L)
              .writeUnitsPerSecond(20000L)
              .build();
  
          // Create table with PreWarming
          CreateTableRequest request = CreateTableRequest.builder()
              .keyspaceName("catalog")
              .tableName("book_awards")
              .schemaDefinition(schema)
              .capacitySpecification(capacitySpec)
              .warmThroughputSpecification(warmThroughput)
              .build();
              
          CreateTableResponse response = keyspacesClient.createTable(request);
          System.out.println("Table created with ARN: " + response.resourceArn());
      }
  }
  ```

------

# 增加现有 Amazon Keyspaces 表的热吞吐量
<a name="update-warm-throughput"></a>

您可以使用控制台、CQL 或来增加 Amazon Keyspaces 表的当前热吞吐量值。 AWS CLI

------
#### [ Console ]

**如何使用控制台增加桌子的预热设置**

1. [登录并在家中打开 Amazon Keyspaces 控制台。 AWS 管理控制台 https://console.aws.amazon.com/keyspaces/](https://console.aws.amazon.com/keyspaces/home)

1. 在导航窗格中，选择**表**，然后选择要更新的表。

1. 在表格的 “**容量**” 选项卡上，继续对**表格进行预热。**

1. 在 “**表格的预热**” 部分中，选择 “**编辑”**。

1. 在 **“编辑表格的预热**” 页面上，您可以更新每秒**读取单位数和每秒****写入单位数**的值。

1. 选择**保存更改**。您的桌子正在使用指定的预热设置进行更新。

------
#### [ Cassandra Query Language (CQL) ]

**使用 CQL 增加表的热吞吐量设置**
+ 使用`ALTER TABLE`语句来增加表的热吞吐量。下面是一个示例语句。

  ```
  ALTER TABLE catalog.book_awards 
  WITH CUSTOM_PROPERTIES = {
      'warm_throughput': {  
          'read_units_per_second': 60000,  
          'write_units_per_second': 30000  
      }
  };
  ```

  要确认表中更新的容量设置，请参阅[查看 Amazon Keyspaces 表的热吞吐量](view-warm-throughput.md)。

------
#### [ CLI ]

**使用增加桌子的预热设置 AWS CLI**
+ 要增加表格的热吞吐量，可以使用命令。`update-table`下面是一个示例语句。

  ```
  aws keyspaces update-table \
  --keyspace-name 'catalog' \
  --table-name 'book_awards' \
  --warmThroughputSpecification readUnitsPerSecond=60000,writeUnitsPerSecond=30000
  ```

  要确认表中更新的容量设置，请参阅[查看 Amazon Keyspaces 表的热吞吐量](view-warm-throughput.md)。

------
#### [ Java ]

**使用适用于 Java 的 SDK 更新表格的预热设置。**
+ 更新表的热吞吐量设置。以下代码示例就是这方面的一个示例。

  ```
  import software.amazon.awssdk.services.keyspaces.KeyspacesClient;
  import software.amazon.awssdk.services.keyspaces.model.*;
  
  public class UpdatePreWarmingExample {
      public static void main(String[] args) {
          KeyspacesClient keyspacesClient = KeyspacesClient.builder().build();
  
          // Define new warm throughput specification
          WarmThroughputSpecification warmThroughput = WarmThroughputSpecification.builder()
              .readUnitsPerSecond(60000L)
              .writeUnitsPerSecond(30000L)
              .build();
  
          // Update table with new PreWarming settings
          UpdateTableRequest request = UpdateTableRequest.builder()
              .keyspaceName("catalog")
              .tableName("book_awards")
              .warmThroughputSpecification(warmThroughput)
              .build();
              
          UpdateTableResponse response = keyspacesClient.updateTable(request);
          System.out.println("Table update requested: " + response.resourceArn());
      }
  }
  ```

------

# 查看 Amazon Keyspaces 表的热吞吐量
<a name="view-warm-throughput"></a>

您可以使用控制台、CQL 或查看您的 Amazon Keyspaces 表的当前热吞吐量值。 AWS CLI

------
#### [ Console ]

**如何使用控制台查看桌子的预热设置。**

1. [登录并在家中打开 Amazon Keyspaces 控制台。 AWS 管理控制台 https://console.aws.amazon.com/keyspaces/](https://console.aws.amazon.com/keyspaces/home)

1. 在导航窗格中，选择**表**，然后选择要查看的表。

1. 在表格的 “**容量**” 选项卡上，继续对**表格进行预热。**

------
#### [ Cassandra Query Language (CQL) ]

**使用 CQL 查看表的热吞吐量设置**
+ 要查看表的热吞吐量设置，可以使用以下 CQL 语句。

  ```
  SELECT custom_properties
  FROM system_schema_mcs.tables 
  WHERE keyspace_name='catalog' and table_name='book_awards';
  
  // Output:
  ...
  custom_properties
  ----------------------------------------------------------------------------------
  {
      'warm_throughput': 
      {
          'read_units_per_second': '40000', 
          'write_units_per_second': '20000', 
          'status': 'AVAILABLE'
      }
  }
  ...
  ```

------
#### [ CLI ]

**使用查看表的热吞吐量设置 AWS CLI**
+ 您可以使用`get-table`命令查看表的热吞吐量设置，如以下示例所示。

  ```
  aws keyspaces get-table \
  --keyspace-name 'catalog' \
  --table-name 'book_awards'
  ```

  以下显示了预配置模式下单区域表的`get-table`命令输出示例。

  ```
  {
      "keyspaceName": "catalog",
      "tableName": "book_awards",
      ... Existing Fields ...,
      "capacitySpecificationSummary": {
          "throughputMode": "PROVISIONED",
          "readCapacityUnits": 20000,
          "writeCapacityUnits": 10000
      },
      "warmThroughputSpecificationSummary": {
          "readUnitsPerSecond": 40000,
          "writeUnitsPerSecond": 20000,
          "status": "AVAILABLE"
      }
  }
  ```

  以下显示了按需模式下单区域表的输出示例。

  ```
  {
      "keyspaceName": "catalog",
      "tableName": "book_awards_ondemand",
      ... Existing Fields ...,
      "capacitySpecification": {
          "throughputMode": "PAY_PER_REQUEST"
      },
      "warmThroughputSpecificationSummary": {
          "readUnitsPerSecond": 40000,
          "writeUnitsPerSecond": 20000,
          "status": "AVAILABLE"
      }
  }
  ```

------
#### [ Java ]

**使用适用于 Java 的 SDK 读取表格的预热设置。**
+ 使用读取表的热吞吐量值。`get-table`以下代码示例就是这方面的一个示例。

  ```
  import software.amazon.awssdk.services.keyspaces.KeyspacesClient;
  import software.amazon.awssdk.services.keyspaces.model.*;
  
  public class GetTableWithPreWarmingExample {
      public static void main(String[] args) {
          KeyspacesClient keyspacesClient = KeyspacesClient.builder().build();
  
          // Get table details including PreWarming specification
          GetTableRequest request = GetTableRequest.builder()
              .keyspaceName("catalog")
              .tableName("book_awards")
              .build();
              
          GetTableResponse response = keyspacesClient.getTable(request);
          
          // Access PreWarming details
          if (response.warmThroughputSpecification() != null) {
              WarmThroughputSpecificationSummary warmThroughputSummary = response.warmThroughputSpecification();
              System.out.println("PreWarming Status: " + warmThroughputSummary.status());
              System.out.println("Read Units: " + warmThroughputSummary.readUnitsPerSecond());
              System.out.println("Write Units: " + warmThroughputSummary.writeUnitsPerSecond());
              
              // Check if PreWarming is active
              if (warmThroughputSummary.status().equals("AVAILABLE")) {
                  System.out.println("Table is fully pre-warmed and ready for high throughput");
              } else if (warmThroughputSummary.status().equals("UPDATING")) {
                  System.out.println("Table PreWarming is currently being updated");
              }
          } else {
              System.out.println("Table does not have PreWarming enabled");
          }
      }
  }
  ```

------

# 使用 Amazon 监控预热桌子的性能 CloudWatch
<a name="monitor-prewarming-cloudwatch"></a>

Amazon Keyspaces 预热不会引入新的 CloudWatch 指标，但您可以使用现有的 Amazon Keyspaces 指标来监控预热表的性能：

SuccessfulRequestLatency  
监控此指标以验证预热后的表是否正在处理具有预期延迟的请求。

WriteThrottleEvents 和 ReadThrottleEvents  
对于经过适当预热的桌子，这些指标应保持在较低水平。如果在预热后仍出现容量不足错误，则可能需要调整热吞吐量值。

ConsumedReadCapacityUnits 和 ConsumedWriteCapacityUnits  
这些指标显示了实际的容量消耗，这有助于验证预热配置是否合适。

ProvisionedReadCapacityUnits 和 ProvisionedWriteCapacityUnits  
对于已配置的表，这些指标显示当前分配的容量。

这些指标可以在 CloudWatch 控制台中查看，也可以使用 CloudWatch API 进行查询。有关更多信息，请参阅 [使用亚马逊监控亚马逊密钥空间 CloudWatch](monitoring-cloudwatch.md)。