DynamoDB 预置容量模式
在 DynamoDB 中创建新的预置表时,您必须指定其预置的吞吐能力。这是表可以支持的读写吞吐量。DynamoDB 使用这些信息来确保具有足够的系统资源来满足吞吐量需求。
您可以选择允许 DynamoDB Auto Scaling 管理表的吞吐容量。要使用自动扩缩,在创建表时,您必须提供读取和写入容量的初始设置。DynamoDB 自动扩缩使用这些初始设置作为起点,然后动态调整它们来满足应用程序要求。有关更多信息,请参阅 使用 DynamoDB Auto Scaling 自动管理吞吐能力。
随着应用程序的数据和访问要求发生变化,您可能需要调整表的吞吐量设置。如果您使用 DynamoDB Auto Scaling,则吞吐量设置将自动调整以响应实际工作负载。您也可以使用 UpdateTable 操作来手动调整表的吞吐能力。如果您需要将现有数据存储中的数据批量加载到新的 DynamoDB 表中,则可能会决定执行此操作。您可以使用较大的写入吞吐量设置创建表,然后在批量加载完数据后减小此设置。
您可以随时将表从按需模式切换到预置容量模式。当您在容量模式之间进行多次切换时,以下条件适用:
-
您可以随时将按需模式下新创建的表切换到预置容量模式。但是,您只有在表创建时间戳的 24 小时之后才能将其切换回按需模式。
-
您可以随时将按需模式下的现有表切换到预置容量模式。但是,您只有在上次指示切换到按需模式的时间戳的 24 小时之后,才能将其切换回按需模式。
有关在读取和写入容量模式之间切换的更多信息,请参阅在 DynamoDB 中切换容量模式时的注意事项。
读取容量单位和写入容量单位
对于预置模式表,您可以按容量单位指定吞吐量要求。这些单位表示您的应用程序每秒需要读取或写入的数据量。您可以稍后修改这些设置(如果需要)或启用 DynamoDB Auto Scaling 以自动修改这些设置。
对于最大为 4 KB 的项目,一个读取容量单位(RCU)表示每秒执行一次强一致性读取操作,或每秒执行两次最终一致性读取操作。有关 DynamoDB 读取一致性模型的更多信息,请参阅DynamoDB 读取一致性。
一个写入容量单位(WCU)表示对最大为 1 KB 的项目每秒执行一次写入操作。有关不同读取和写入操作的更多信息,请参阅DynamoDB 读取和写入操作。
选择初始吞吐量设置
每个应用程序对从数据库中读取和写入数据库有着不同的要求。在确定 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 自动扩缩
DynamoDB 自动扩缩主动管理表和全局二级索引的预置吞吐能力。使用自动扩缩功能,您可以为读取和写入容量单位定义一个范围(上限和下限)。您还可以定义该范围内的目标利用率百分比。DynamoDB Auto Scaling 旨在维持目标利用率,即使在应用程序工作负载增加或减少的情况下也是如此。
利用 DynamoDB Auto Scaling,表或全局二级索引可以增加其预置读写容量,以处理突增流量,而不限制请求。当工作负载减少时,DynamoDB Auto Scaling 可以减少吞吐量,这样您就无需为未使用的预置容量付费。
注意
如果您使用 AWS Management Console 创建表或全局二级索引,默认情况下将启用 DynamoDB Auto Scaling。
您可以随时使用控制台、AWS CLI 或其中一个 AWS SDK 管理自动扩缩设置。有关更多信息,请参阅 使用 DynamoDB Auto Scaling 自动管理吞吐能力。
利用率
利用率有助于您确定是否过度预置容量,如果存在过度预置,应减少表容量来节省成本。反过来,它也有助于您确定预置容量是否不足。在这种情况下,您应该增加表容量,防止在意外的高流量期间可能出现请求节流。有关更多信息,请参阅 Amazon DynamoDB auto scaling: Performance and cost optimization at any scale
如果您使用 DynamoDB 自动扩缩,则还需要设置目标利用率百分比。自动扩缩将使用此百分比作为向上或向下调整容量的目标。我们建议将目标利用率设置为 70%。有关更多信息,请参阅 使用 DynamoDB Auto Scaling 自动管理吞吐能力。