Amazon DynamoDB
开发人员指南 (API 版本 2012-08-10)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

读/写容量模式

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

  • 按需

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

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

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

按需模式

按需 Amazon DynamoDB 是一个灵活的结算选项,可以每秒处理数千个请求而不需要进行容量规划。按需 DynamoDB 针对读写请求提供按需支付定价,以便您只需为您使用的资源付费。

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

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

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

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

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

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

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

您可以每 24 小时在读/写容量模式之间切换一次。有关您在切换读/写容量模式时应考虑的问题,请参阅更改读/写容量模式时的注意事项

注意

AWS Data Pipeline、DynamoDB 导入/导出工具和 AWS Glue 目前不支持按需模式。

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

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

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

    注意

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

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

有关按需 DynamoDB 可用的 AWS 区域的列表,请参阅 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 次读取。

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

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

  • 在按需容量模式下新创建的表:先前峰值为 2,000 个写入请求单位或 6,000 个读取请求单位。您可以设法立即使先前峰值翻倍,这使得新创建的按需表可提供高达 4,000 个写入请求单位或 12,000 个读取请求单位,或者两者的任意线性组合。

  • 现有表切换为按需容量模式:先前峰值是为该表预置的最大先前读取容量单位和写入容量单位,或者是按需容量模式的新建表的设置,以较高者为准。

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

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

预置模式

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

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

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

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

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

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

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

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

    注意

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

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

重要

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

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

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

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

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

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

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

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

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

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

限制会阻止您的应用程序消耗太多容量单位。当请求受到限制时,它将失败并出现代码 HTTP 400 (Bad Request) 和一个 ProvisionedThroughputExceededException。AWS 开发工具包提供对重试限制请求的内置支持 (请参阅错误重试和指数退避);您无需自行编写此逻辑。

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

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

注意

在按需模式下,预留容量不可用。

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

注意

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

本页内容: