Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

读取和写入吞吐容量

在 Amazon DynamoDB 中创建表或索引时,必须指定读写活动的容量要求。通过提前定义您的吞吐容量,DynamoDB 可以预留必要的资源,以满足您的应用程序所需的读写活动,同时确保一致的低延迟性能。

您可以通过读取容量单位和写入容量单位指定吞吐容量:

  • 一个读取容量单位 表示对大小最多为 4 KB 的项目每秒执行一次强一致性读取,或每秒执行两次最终一致性读取。如果您需要读取大于 4 KB 的项目,DynamoDB 需要消耗额外的读取容量单位。所需的读取容量单位的总数取决于项目大小以及您需要最终一致性读取还是强一致性读取。

  • 一个写入容量单位 表示对大小最多为 1 KB 的项目每秒执行一次写入。如果您需要写入大于 1 KB 的项目,DynamoDB 需要消耗额外的写入容量单位。所需的写入容量单位的总数取决于项目大小。

例如,假设您创建了具有 5 个读取容量单位和 5 个写入容量单位的表。使用这些设置,您的应用程序可以:

  • 执行高达每秒 20KB 的强一致性读取 (4 KB × 5 个读取容量单位)。

  • 执行高达每秒 40KB 的最终一致性读取 (读取吞吐量的两倍)。

  • 每秒写入高达 5KB (1 KB × 5 个写入容量单位)。

如果您的应用程序读取或写入较大型的项目 (最大为 DynamoDB 的项目大小上限 400 KB),它将消耗更多的容量单位。

如果您的读取或写入请求超过了表或索引的吞吐量设置,则 DynamoDB 可能会限制 该请求。限制会阻止您的应用程序消耗太多容量单位。当请求受到限制时,它将失败并出现代码 HTTP 400 (Bad Request) 和一个 ProvisionedThroughputExceededException。AWS 开发工具包提供对重试限制请求的内置支持 (请参阅错误重试和指数退避);您无需自行编写此逻辑。

您可以使用 AWS 管理控制台 监视预置和实际吞吐量,并在必要时修改吞吐量设置。

DynamoDB 提供了以下管理吞吐量的机制:

  • DynamoDB Auto Scaling

  • 预置吞吐量

  • 预留容量

DynamoDB Auto Scaling

DynamoDB Auto Scaling 主动管理表和全局二级索引的吞吐容量。使用 Auto Scaling,您可以为读取和写入容量单位定义一个范围 (上限和下限)。您还可以在该范围内定义目标利用率百分比。即使在应用程序工作负载增加或减少的情况下,DynamoDB Auto Scaling 也会努力维持目标利用率。

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

注意

如果您使用 AWS 管理控制台创建表或全局二级索引,默认情况下,将启用 DynamoDB Auto Scaling。

您可以随时使用控制台、AWS CLI 或其中一个 AWS 开发工具包管理 Auto Scaling 设置。

有关更多信息,请参阅 使用 DynamoDB Auto Scaling 自动管理吞吐容量

预置吞吐量

如果您未使用 DynamoDB Auto Scaling,则必须手动定义吞吐量要求。预置吞吐量是应用程序可以从表或索引中消耗的最大容量。如果您的应用程序超出了预置吞吐量设置,则会发生请求限制。

例如,假设您希望从表中每秒读取 80 个项目。这些项目的大小为 3 KB,而且您需要强一致性读取。在这种情况下,每次读取需要一个预置读取容量单位。为确定这一点,您应将此操作的项目大小除以 4 KB,然后向上取整到最近的整数,如下所示:

  • 3 KB / 4 KB = 0.75,或 1 个读取容量单位

在这种情况下,您必须将表的预置读取吞吐量设置为 80 个读取容量单位:

  • 每个项目 1 个读取容量单位 × 每秒 80 次读取 = 80 个读取容量单位

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

  • 512 字节 / 1 KB = 0.5,或 1

在这种情况下,您需要将表的预置写入吞吐量设置为 100 个写入容量单位:

  • 每个项目 1 个写入容量单位 × 每秒 100 次写入 = 100 个写入容量单位

有关更多信息,请参阅 项目大小和容量单位消耗

预留容量

作为 DynamoDB 客户,您可以提前购买预留容量,如 Amazon DynamoDB 定价中所述。通过预留容量,您可以支付一次性预付费用并承诺在一段时间内支付最低用量级别的费用。与按需的预置吞吐量设置相比,通过提前预留读取和写入容量单位,您可以节省大量成本。

要管理预留容量,请转到 DynamoDB 控制台并选择 Reserved Capacity

注意

您可以阻止用户查看或购买预留容量,同时仍允许他们访问控制台的其余部分。有关更多信息,请参阅Amazon DynamoDB 的身份验证和访问控制中的“授予权限以阻止购买预留容量服务”。