

# DynamoDB 预置容量模式
<a name="provisioned-capacity-mode"></a>

在 DynamoDB 中创建新的预置表时，您必须指定其*预置的吞吐能力*。这是表可以支持的读写吞吐量。系统将根据您已预置的每小时读取和写入容量向您收费，而不是根据您实际消耗的预置容量向您收费。

随着应用程序的数据和访问要求发生变化，您可能需要调整表的吞吐量设置。您可以使用自动扩缩根据流量变化自动调整表的预置容量。DynamoDB 自动扩缩在 [Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html) 中使用[扩缩策略](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)。要在 DynamoDB 中配置自动扩缩，除了目标利用率百分比外，还需要设置读取和写入容量的最低和最高级别。Application Auto Scaling 创建和管理当指标偏离目标时触发扩缩事件的 CloudWatch 警报。自动扩缩会监控表的活动，并根据预配置的阈值向上或向下调整其容量设置。当所使用的容量在两个连续的一分钟时段内均超过配置的目标利用率时，就会触发自动扩缩。在触发自动扩缩之前，CloudWatch 警报可能会有至多几分钟的短暂延迟。有关更多信息，请参阅 [使用 DynamoDB Auto Scaling 自动管理吞吐能力](AutoScaling.md)。

如果您使用 DynamoDB Auto Scaling，则吞吐量设置将自动调整以响应实际工作负载。您也可以使用 [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html) 操作来手动调整表的吞吐能力。例如，如果您需要将现有数据存储中的数据批量加载到新的 DynamoDB 表中，则可能会决定执行此操作。您可以使用较大的写入吞吐量设置创建表，然后在批量加载完数据后减小此设置。

**注意**  
默认情况下，DynamoDB 可防止您的用量出现意外、失控的状况。要扩展以超越账户中所有表的 40000 个表级读取和写入吞吐量限制，您可以申请提高此配额。超过默认表吞吐量配额的吞吐量请求将受到限制。有关更多信息，请参阅 [吞吐量默认限额](ServiceQuotas.md#default-limits-throughput)。

在 24 小时滚动窗口内，表最多可以从预置容量模式切换到按需模式四次。您可以随时将表从按需模式切换到预置容量模式。

有关在读取和写入容量模式之间切换的更多信息，请参阅[在 DynamoDB 中切换容量模式时的注意事项](bp-switching-capacity-modes.md)。

**Topics**
+ [读取容量单位和写入容量单位](#read-write-capacity-units)
+ [选择初始吞吐量设置](#choosing-initial-throughput)
+ [DynamoDB Auto Scaling](#ddb-autoscaling)
+ [使用 DynamoDB Auto Scaling 自动管理吞吐能力](AutoScaling.md)
+ [DynamoDB 预留容量](reserved-capacity.md)

## 读取容量单位和写入容量单位
<a name="read-write-capacity-units"></a>

对于预置模式表，您可以按*容量单位*指定吞吐量要求。这些单位表示您的应用程序每秒需要读取或写入的数据量。您可以稍后修改这些设置（如果需要）或启用 DynamoDB Auto Scaling 以自动修改这些设置。

对于最大为 4 KB 的项目，一个*读取容量单位*（RCU）表示每秒执行一次强一致性读取操作，或每秒执行两次最终一致性读取操作。有关 DynamoDB 读取一致性模型的更多信息，请参阅[DynamoDB 读取一致性](HowItWorks.ReadConsistency.md)。

一个*写入容量单位*（WCU）表示对最大为 1 KB 的项目每秒执行一次写入操作。有关不同读取和写入操作的更多信息，请参阅[DynamoDB 读取和写入操作](read-write-operations.md)。

## 选择初始吞吐量设置
<a name="choosing-initial-throughput"></a>

每个应用程序对从数据库中读取和写入数据库有着不同的要求。在确定 DynamoDB 表的初始吞吐量设置时，请考虑以下事项：
+ **预期的读取和写入请求速率** - 您应该估计每秒需要执行的读取和写入次数。
+ **项目大小** - 一些项目足够小，可使用单个容量单位进行读取或写入。较大的项目需要多个容量单位。通过估计表中将包含的项目的平均大小，您可以为表的预调配吞吐量指定准确的设置。
+ **读取一致性要求** - 读取容量单位基于强一致性读取操作，这些操作消耗的数据库资源是最终一致性读取的两倍。您应确定您的应用程序是否需要强一致性读取，或者是否能放宽此要求并改为执行最终一致性读取操作。默认情况下，DynamoDB 中的读取操作是最终一致性读取。如有必要，您可以为这些操作请求强一致性读取。

例如，假设您希望从表中每秒读取 80 个项目。这些项目的大小为 3 KB，而且您需要强一致性读取。在这种情况下，每次读取需要一个预置读取容量单位。为确定此数字，请将此操作的项目大小除以 4 KB。然后，向上舍入到最近的整数，如下面的示例所示：
+ 3 KB/4 KB = 0.75，或者 **1** 个读取容量单位

因此，要从表中每秒读取 80 个项目，请将表的预置读取吞吐量设置为 80 个读取容量单位，如以下示例所示：
+ 每个项目 1 个读取容量单位 x 每秒 80 次读取 = **80** 个读取容量单位

现在假设您希望每秒向您的表写入 100 个项目，并且每个项目的大小为 512 个字节。在这种情况下，每次写入需要一个预置写入容量单位。为确定此数字，请将此操作的项目大小除以 1 KB。然后，向上舍入到最近的整数，如下面的示例所示：
+ 512 个字节/1 KB = 0.5 或 **1** 个写入容量单位

要每秒向表写入 100 个项目，请将表的预置写入吞吐量设置为 100 个写入容量单位：
+ 每个项目 1 个写入容量单位 x 每秒 100 次写入 = **100** 个写入容量单位

## DynamoDB Auto Scaling
<a name="ddb-autoscaling"></a>

DynamoDB 自动扩缩主动管理表和全局二级索引的预置吞吐能力。使用自动扩缩功能，您可以为读取和写入容量单位定义一个范围（上限和下限）。您还可以定义该范围内的目标利用率百分比。DynamoDB Auto Scaling 旨在维持目标利用率，即使在应用程序工作负载增加或减少的情况下也是如此。

利用 DynamoDB Auto Scaling，表或全局二级索引可以增加其预置读写容量，以处理突增流量，而不限制请求。当工作负载减少时，DynamoDB Auto Scaling 可以减少吞吐量，这样您就无需为未使用的预置容量付费。

**注意**  
如果您使用 AWS 管理控制台 创建表或全局二级索引，默认情况下将启用 DynamoDB Auto Scaling。  
您可以随时使用控制台、AWS CLI 或其中一个 AWS SDK 管理自动扩缩设置。有关更多信息，请参阅 [使用 DynamoDB Auto Scaling 自动管理吞吐能力](AutoScaling.md)。

### 利用率
<a name="ddb-autoscaling-utilization-rate"></a>

利用率有助于您确定是否过度预置容量，如果存在过度预置，应减少表容量来节省成本。反过来，它也有助于您确定预置容量是否不足。在这种情况下，您应该增加表容量，防止在意外的高流量期间可能出现请求节流。有关更多信息，请参阅 [Amazon DynamoDB auto scaling: Performance and cost optimization at any scale](https://aws.amazon.com/blogs/database/amazon-dynamodb-auto-scaling-performance-and-cost-optimization-at-any-scale/)。

如果您使用 DynamoDB 自动扩缩，则还需要设置目标利用率百分比。自动扩缩将使用此百分比作为向上或向下调整容量的目标。我们建议将目标利用率设置为 70%。有关更多信息，请参阅 [使用 DynamoDB Auto Scaling 自动管理吞吐能力](AutoScaling.md)。