读/写容量模式 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

读/写容量模式

Amazon DynamoDB 具有两个读/写容量模式来处理表的读写:

  • 按需

  • 预置(默认,符合免费套餐的要求)

读/写容量模式控制对读写吞吐量收费的方式以及管理容量的方式。您可以在创建表时设置读/写容量模式,也可以稍后更改。

本地二级索引继承基表的读/写容量模式。有关更多信息,请参阅 更改读取/写入容量模式时的注意事项

以下视频将向您介绍表容量模式。

有关优化 DynamoDB 表成本的最佳实践的更多信息,请参阅 优化 DynamoDB 表的成本

按需模式

Amazon DynamoDB on-demand 是一个灵活的计费选项,可以每秒处理数千个请求而不需要进行容量规划。DynamoDB 按需 pay-per-request 提供读取和写入请求的定价,因此您只需为实际用量付费。

在选择按需模式时,DynamoDB 会随着工作负载的增加或减少,根据之前达到的任意流量水平即时调节工作负载。如果某个工作负载的流量级别达到一个新的峰值,DynamoDB 将快速调整以适应该工作负载。使用按需模式的表可提供 DynamoDB 已经提供的相同个位数毫秒级延迟、服务等级协议 (SLA) 承诺和安全性。您可以同时对新表和现有表选择按需模式,并可以继续使用现有的 DynamoDB API 而不更改代码。

如果满足以下任意条件,则按需模式是很好的选项:

  • 您创建工作负载未知的新表。

  • 您具有不可预测的应用程序流量。

  • 您更喜欢只为您使用的容量付费。

请求速率仅受 DynamoDB 吞吐量默认表配额限制,但可以根据请求提升。有关更多信息,请参阅 吞吐量默认限额

要开始使用按需,您可以创建或更新表以使用按需模式。有关更多信息,请参阅 针对 DynamoDB 表的基本操作

可以每隔 24 小时将表切换为按需模式。创建按需模式表也会启动这一 24 小时周期。可以随时将表返回到预置容量模式。有关在切换读/写容量模式时应考虑的问题,请参阅 更改读取/写入容量模式时的注意事项

读取请求单位和写入请求单位

对于按需模式表,您无需指定预期应用程序执行的读取和写入吞吐量。DynamoDB 按照读取请求单位和写入请求单位对应用程序在表上执行的读取和写入操作收费。

DynamoDB 读取请求可以是强一致性、最终一致性或事务性的。

  • 一个不超过 4KB 的项目的强一致性读取请求需要一个读取请求单位。

  • 一个不超过 4KB 的项目的最终一致性读取请求需要半个读取请求单位。

  • 一个不超过 4KB 的项目的事务性读取请求需要两个读取请求单位。

如果您需要读取大于 4KB 的项目,DynamoDB 需要额外的读取请求单位。所需的读取请求单位的总数取决于项目大小以及您需要最终一致性读取还是强一致性读取。例如,如果您的项目大小为 8 KB,您需要 2 个读取请求单位才能承受一次强一致性读取;如果您选择最终一致性读取,则需要 1 个读取请求单位;而对于事务读取请求,则需要 4 个读取请求单位。

要了解有关 DynamoDB 读取一致性模型的更多信息,请参阅 读取一致性

重要

如果您对某个不存在 的项目执行读取操作,DynamoDB 仍将占用读取吞吐量,如上所述。

一个写入请求单位表示对大小最多为 1 KB 的项目执行一次写入。如果您需要写入大于 1 KB 的项目,DynamoDB 需要消耗额外的写入请求单位。事务写入请求需要 2 个写入请求单位才能对大小最多为 1 KB 的项目执行一次写入。所需的写入请求单位的总数取决于项目大小。例如,如果您的项大小为 2 KB,您需要 2 个写入请求单位才能承受一个读取请求;而对于事务写入请求,则需要 4 个写入请求单位。

有关详细的定价示例以及如何使用定价计算器估算成本,请参阅 Amazon DynamoDB 定价

峰值流量和扩缩属性

使用按需容量模式的 DynamoDB 表会自动适应应用程序的流量。按需容量模式会即时在表中承受之前双倍的峰值流量。例如,如果应用程序的流量模式在每秒 25,000 次到 50,000 次强一致性读取之间变化,其中每秒 50,000 次读取是先前的峰值流量,则按需容量模式会即时持续承受每秒高达 100,000 次读取的流量。如果应用程序承受每秒 100,000 次读取的流量,则该峰值将成为新的之前峰值,从而使后续流量高达每秒 200,000 次读取。

如果您对于表需要的峰值高于之前峰值的两倍,DynamoDB 会自动分配更多容量作为流量增量,以帮助确保您的工作负载不遇到限制。但是,如果您在 30 分钟内超出先前峰值的两倍,则可能发生限制。例如,如果应用程序的流量模式在每秒 25,000 次到 50,000 次强一致性读取之间变化,其中每秒 50,000 次读取是先前达到的峰值流量,则 DynamoDB 会建议让流量增长的间隔超过至少 30 分钟,然后才会超过每秒 100,000 次读取。

按需容量模式的最初吞吐量

如果您最近首次将现有表切换为按需容量模式,或者,如果您在启用按需容量模式的情况下创建了新表,则该表将具有以下之前峰值设置,即使该表之前尚未使用按需容量模式提供流量也是如此。

以下是可能的场景示例。

  • 配置为 100WCU 和 100RCU 的预置表。当该表首次切换为按需模式时,DynamoDB 将确保其扩展到能够即时维持每秒至少 4,000 个写入单位和 12,000 个读取单位。

  • 配置为 8,000WCU 和 24,000RCU 的预置表。当该表切换为按需模式时,它将继续能够维持在任何时候均为每秒至少 8,000 个写入单位和 24,000 个读取单位。

  • 配置了 8,000WCU 和 24,000RCU 的预置表,在维持期间每秒占用 6,000 个写入单位和 18,000 个读取单位。当该表切换为按需模式时,它将继续能够维持每秒至少 8,000 个写入单位和 24,000 个读取单位。之前的流量可能进一步允许该表维持相当高的流量水平而不节流。

  • 之前预置了 10,000WCU 和 10,000RCU,但目前预置了 10RCU 和 10WCU 的表。当该表切换为按需模式时,它将能够维持每秒至少 10,000 个写入单位和 10,000 个读取单位。

切换读/写容量模式时的表行为

当您将表从预置的容量模式切换到按需容量模式时,DynamoDB 会对表和分区的结构进行若干更改。此过程可能耗时数分钟。在切换期间,您的表将提供与先前预置的写入容量单位和读取容量单位数量相一致的吞吐量。当从按需容量模式切换回预置的容量模式时,表将提供与表设置为按需容量模式时达到的先前峰值一致的吞吐量。

针对按需容量模式预热表

在按需容量模式下,请求量可能会激增至表上先前峰值的两倍。请注意,如果请求量在 30 分钟内激增至超过原定设置容量或先前达到的峰值请求速率的两倍,则可能会发生节流。一种解决方案是将表预热到这一激增的预期峰值容量。

要预热表,请执行以下步骤:

  1. 请务必检查您的账户限制,并确认在预调配模式下可以达到所需的容量。

  2. 如果您要预热已存在的表,或者要在按需模式下预热新表,请在达到预期峰值前至少 24 小时开始此过程。每 24 小时只能在按需模式和预调配模式之间切换一次。

  3. 要预热当前处于按需模式的表,请将其切换到预配置模式,然后等到该表处于活动状态。然后执行下一步。

    如果您想预热处于预调配模式或已进入预配置模式达 24 小时的新表,则无需等待即可继续执行下一步。

  4. 将表的写入吞吐量设置为所需的峰值并保持几分钟。在切换回按需模式之前,您将因如此高的吞吐量而产生费用。

  5. 切换到按需容量模式。这应该可以维持预调配的吞吐能力值。

预调配模式

如果您选择预置模式,则指定您的应用程序需要的每秒读取和写入次数。您可以使用 Auto Scaling 根据流量变化自动调整表的预置容量。这可帮助您控制您对 DynamoDB 的使用,使之保持或低于定义的请求速率,以便获得成本可预测性。

如果满足以下任意条件,则预置模式是很好的选项:

  • 您具有可预测的应用程序流量。

  • 您​运行流量比较稳定或逐渐增加的应用程序。

  • 您可以预测容量要求以控制成本。​

读取容量单位和写入容量单位

对于预置模式表,您可以按读取容量单位 (RCU) 和写入容量单位 (WCU) 指定吞吐量容量:

  • 一个读取容量单位表示对大小最多为 4KB 的项目每秒执行一次强一致性读取,或每秒执行两次最终一致性读取。事务读取请求需要 2 个读取容量单位才能对大小最多为 4KB 的项目每秒执行一次读取。如果您需要读取大于 4KB 的项目,DynamoDB 必须消耗额外的读取容量单位。所需的读取容量单位的总数取决于项目大小以及您需要最终一致性读取还是强一致性读取。例如,如果您的项目大小为 8 KB,您需要 2 个读取容量单位才能承受每秒一次强一致性读取;如果您选择最终一致性读取,则需要 1 个读取容量单位;而对于事务读取请求,则需要 4 个读取容量单位。有关更多信息,请参阅 读取的容量单位消耗

    注意

    要了解有关 DynamoDB 读取一致性模型的更多信息,请参阅 读取一致性

  • 一个写入容量单位表示对大小最多为 1 KB 的项目每秒执行一次写入。如果您需要写入大于 1 KB 的项目,DynamoDB 必须消耗额外的写入容量单位。事务写入请求需要 2 个写入容量单位才能对大小最多为 1 KB 的项目每秒执行一次写入。所需的写入容量单位的总数取决于项目大小。例如,如果您的项目大小为 2 KB,您需要 2 个写入容量单位才能每秒承受一个读取请求;而对于事务写入请求,则需要 4 个写入容量单位。有关更多信息,请参阅 写入的容量单位消耗

重要

当对按需表调用 DescribeTable 时,读取容量单位和写入容量单位设置为 0。

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

例如,假设您创建一个具有 6 个读取容量单位和 6 个写入容量单位的预置表。使用这些设置,您的应用程序可以执行以下操作:

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

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

  • 执行高达每秒 12 KB 的事务读取请求。

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

  • 执行高达每秒 3KB 的事务写入请求。

有关更多信息,请参阅 管理 DynamoDB 预调配容量表的吞吐量设置

预置吞吐量 是应用程序可以从表或索引中消耗的最大容量。如果您的应用程序超出了表或索引的预置吞吐容量,则会发生请求限制。

限制会阻止您的应用程序消耗太多容量单位。当请求受到限制时,它将失败并出现代码 HTTP 400 (Bad Request) 和一个 ProvisionedThroughputExceededException。这些 Amazon 软件开发工具包内置了重试受限制请求的支持(参见错误重试和指数回退),因此您无需自己编写此逻辑。有关如何解决限制问题的更多信息,请参阅为什么我的 Amazon DynamoDB 表受到限制?

您可以使用 Amazon Web Services Management Console 来监控您的预配置吞吐量和实际吞吐量,并在必要时修改吞吐量设置。

有关详细的定价示例以及如何使用定价计算器估算成本,请参阅 Amazon DynamoDB 定价

DynamoDB Auto Scaling

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

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

注意

如果您使用创建表或全局二级索引,则默认情况下会启用 DynamoDB 自动缩放。 Amazon Web Services Management Console

您可以使用控制台、或其中一个 SD Amazon K 随时管理 auto Scaling 设置。 Amazon CLI

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

预留容量

作为 DynamoDB 客户,您可以提前为使用 DynamoDB 标准表类别的表购买预留容量,如 Amazon DynamoDB 定价中所述。通过预留容量,您可以支付一次性预付费用并承诺在一段时间内支付最低预置用量级别的费用。您的预留容量按小时预留容量费率计费。通过提前预留读取和写入容量单元,您可以节省大量的预置容量成本。对于您预置的超出预留容量的任何容量,将按照标准的预置容量费率收费。

预留容量折扣首先应用于购买预留容量的账户。然后,任何未使用的预留容量 discount 折扣将应用于与购买账户位于同一 Amazon 组织中的其他账户。您可以在 Billing and Cost Management 控制台的 Preferences(首选项)页面上关闭预留实例折扣共享。有关更多信息,请参阅关闭预留实例和 Savings Plans 折扣共享

注意

对于复制的写入容量单元,预留容量不可用。预留容量仅适用于购买该容量的区域。预留容量也不适用于使用 DynamoDB Standard-IA 表类别或按需容量模式的表。

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

注意

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

有关具体定价的更多信息,请参阅 Amazon DynamoDB 定价