读/写容量模式 - Amazon DynamoDB

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

读/写容量模式

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

  • 按需

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

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

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

按需模式

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

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

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

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

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

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

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

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

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

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

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

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

    注意

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

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

有关列表AWS可按需使用 DynamoDB 的区域,请参阅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) 指定吞吐量容量:

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

    注意

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

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

重要

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

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

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

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

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

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

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

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

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

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

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

您可以使用 AWS Management Console 监视预置和实际吞吐量,并在必要时修改吞吐量设置。

DynamoDB Auto Scaling

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

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

注意

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

您可以随时使用控制台、AWS CLI,或者其中一个AWS开发工具包。

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

预留容量

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

注意

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

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

注意

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