Amazon DynamoDB 中的服务、账户和表限额 - Amazon DynamoDB

Amazon DynamoDB 中的服务、账户和表限额

本节介绍 Amazon DynamoDB 中的当前配额(以前称为限制)。除非另行指定,否则每个配额将基于区域应用。

读/写容量模式和吞吐量

您可以随时将表从按需模式切换到预置容量模式。当您在容量模式之间进行多次切换时,以下条件适用:

  • 您可以随时将按需模式下新创建的表切换到预置容量模式。但是,您只有在表创建时间戳的 24 小时之后才能将其切换回按需模式。

  • 您可以随时将按需模式下的现有表切换到预置容量模式。但是,您只有在上次指示切换到按需模式的时间戳的 24 小时之后,才能将其切换回按需模式。

有关在读取和写入容量模式之间切换的更多信息,请参阅在 DynamoDB 中切换容量模式时的注意事项

容量单位大小(对于预调配表)

一个读取容量单位 = 对大小为 4KB 的项目每秒执行一次强一致性读取,或每秒执行两次最终一致性读取。

一个写入容量单位 = 对大小为 1 KB 的项目每秒执行一次写入。

事务读取请求需要 2 个读取容量单位才能对大小最多为 4KB 的项目每秒执行一次读取。

事务写入请求需要 2 个写入容量单位才能对大小最多为 1 KB 的项目每秒执行一次写入。

请求单位大小(对于按需表)

一个读取请求单位 = 对大小最多为 4 KB 的项目每秒执行一次强一致性读取,或每秒执行两次最终一致性读取。

一个写入请求单位 = 对大小最多为 1 KB 的项目每秒执行一次写入。

事务读取请求需要 2 个读取请求单位才能对大小最多为 4 KB 的项目每秒执行一次读取。

事务写入请求需要 2 个写入请求单位才能对大小最多为 1 KB 的项目每秒执行一次写入。

吞吐量默认限额

AWS 对您的账户在区域中可以预置和使用的吞吐量设置了一些默认配额。

在账户级别应用账户级别的读取吞吐量和账户级别的写入吞吐量配额。这些账户级别的配额应用于给定区域中您账户的所有表和全局二级索引的预置吞吐容量之和。可以为单个表或跨多个表预置账户的所有可用吞吐量。这些配额仅应用于使用预置容量模式的表。

表级读取吞吐量和表级写入吞吐量配额会以不同的方式应用于使用预置容量模式的表和使用按需容量模式的表。

对于预置容量模式的表和 GSI,配额是可以为该区域中的任何表或任何其 GSI 预置的最大读取和写入容量单位。任何单个表及其所有 GSI 的总和也必须保持在账户级读写吞吐量配额以下。除此之外,还要求所有预置表及其 GSI 的总和必须保持在账户级读写吞吐量配额以下。

对于按需容量模式的表和 GSI,表级配额是任何表或该表中任何单个 GSI 可用的最大读取和写入容量单位。在按需模式中,不对表应用账户级读写吞吐量配额。

默认情况下,以下是适用于您账户的吞吐量配额。

吞吐量配额名称 按需型 已预置 可调整

Per table

40,000 read request units and 40,000 write request units

40,000 read capacity units and 40,000 write capacity units

Per account

Not applicable

80,000 read capacity units and 80,000 write capacity units

Minimum throughput for any table or global secondary index

Not applicable

1 read capacity unit and 1 write capacity unit

如果需要,您可以使用 Service Quotas 控制台AWS APIAWS CLI 请求提高可调节的配额。

对于账户级别的吞吐量配额,您可以使用 Service Quotas 控制台AWS CloudWatch 控制台AWS APIAWS CLI 创建 CloudWatch 警报,并在当前使用量达到所应用配额值的指定百分比时自动收到通知。借助 CloudWatch,您还可以通过查看 AccountProvisionedReadCapacityUnitsAccountProvisionedWriteCapacityUnits AWS 使用率指标来监控使用情况。要了解有关使用率指标的更多信息,请参阅 AWS 使用率指标。

增加或减少吞吐量(对于预调配表)

增加预调配吞吐量

您可以根据需要使用 ReadCapacityUnitsWriteCapacityUnits 操作增加 AWS Management Console 或 UpdateTable。在单个调用中,您可以为表、该表的任何全局二级索引或它们的任意组合增加预调配吞吐量。新设置在 UpdateTable 操作完成后才会生效。

添加预置容量时不能超过每个账户的配额,且 DynamoDB 不会允许您太快地增加预置容量。除了这些限制以外,您还可以根据需要尽量增加表的预置容量。有关每个账户的配额的更多信息,请参阅上一部分 吞吐量默认限额

减少预调配吞吐量

对于 UpdateTable 操作中的每个表和全局二级索引,您可以减小 ReadCapacityUnitsWriteCapacityUnits(或者同时减小这两者)。新设置在 UpdateTable 操作完成后才会生效。

对于您每天可以对 DynamoDB 表执行的预调配容量减少次数,已设定原定设置限额。天依据协调世界时 (UTC) 定义。在某一天,您可以在一小时内执行最多四次减少,只要您在当天未执行任何其他减少。随后,您就可以每小时多执行一次额外的减少(每 60 分钟执行一次)。这实际上会让一天内的最大减少次数达到 27 次。

如果需要,您可以使用 Service Quotas 控制台AWS APIAWS CLI 请求提高配额。

重要

表与全局二级索引减小限制次数已分离,因此特定表的所有全局二级索引都具有其自己的减小限制。但是,如果一个请求减少了表和全局二级索引的吞吐量,则当表和全局二级索引中的任意一个超出当前限制时,请求都会被拒绝。请求未得到部分处理。

在一天的头 4 个小时内,具有全局二级索引的表可以按下面所示进行修改:

  • 将表的 WriteCapacityUnitsReadCapacityUnits(或两者)减少 4 次。

  • 将全局二级索引的 WriteCapacityUnitsReadCapacityUnits(或两者)减少 4 次。

在那一天结束时,表和全局二级索引的吞吐量各有机会减少 27 次。

预留容量

AWS 为您的账户可以购买的活跃预留容量设置了原定设置限额。限额限制是写入容量单位(WCU)和读取容量单位(RCU)的预留容量组合。

预留容量配额 活跃预留容量 可调整

每个 账户

1,000,000 个预调配容量单位(WCU _ RCU)

如果您尝试在单次购买中购买超过 1,000,000 个预调配容量单位,则会收到有关此服务限额限制的错误。如果您有活跃预留容量并尝试购买额外的预留容量,从而导致活跃的预调配容量单位超过 1,000,000 个,则会收到有关此服务限额限制的错误。

如果您需要的预留容量超过 1,000,000 个预调配容量单位,您可以通过向支持团队提交请求来请求增加限额。

导入配额

在 us-east-1、us-west-2 和 eu-west-1 区域中,从 Amazon S3 导入 DynamoDB 可以支持多达 50 个并发导入作业,每次导入源对象的总大小为 15TB。在所有其他区域,最多支持 50 个总大小为 1TB 的并发导入任务。在所有区域中,每个导入任务最多可处理 50000 个 Amazon S3 对象。有关导入和验证的更多信息,请参阅导入格式限额和验证

Contributor Insights

如果您在 DynamoDB 表上启用 Customer Insights,则仍然受 Contributor Insights 规则的限制。有关更多信息,请参阅 CloudWatch 服务配额

表大小

表的大小没有实际限制。表的项目数和字节数是无限制的。

最大表数(每个账户、每个区域)

对于任何 AWS 账户,每个 AWS 区域都有一个 2,500 个表的初始配额。

如果一个账户需要超过 2500 个表,请联系您的 AWS 账户团队请求增加表,最多可增加到 10000 个表。如果需要超过 10000 个表,推荐的最佳做法是设置多个账户,每个账户最多可提供 10000 个表。

您可以使用 Service Quotas 控制台AWS APIAWS CLI 查看账户中最大表数的默认和应用的配额值,并在需要时请求提高配额。您也可以通过向 AWS Support 开设票证来申请提高配额

使用 Service Quotas 控制台AWS APIAWS CLI,您可以创建 CloudWatch 警报,以便在当前使用量达到当前配额的指定百分比时自动收到通知。借助 CloudWatch,您还可以通过查看 TableCount AWS 使用率指标来监控使用情况。要了解有关使用率指标的更多信息,请参阅 AWS 使用率指标。

全局表

AWS 对您在使用全局表时可以预置或使用的吞吐量设置了一些默认配额。

默认全局表配额 按需型 已预置

Per table

40,000 read request units and 40,000 write request units

40,000 read capacity units and 40,000 write capacity units

Per table, per destination Region, per day

10 TB for all source tables to which a replica was added for this destination Region

10 TB for all source tables to which a replica was added for this destination Region

事务操作仅在最初写入的 AWS 区域内提供原子性、一致性、隔离性和持久性 (ACID) 保证。全局表中不支持跨区域的事务。例如,假设您在美国东部(俄亥俄州)和美国西部(俄勒冈州)区域有一个带副本的全局表,并且您在美国东部(弗吉尼亚州北部)区域执行 TransactWriteItems 操作。在此情况下,您可能会在复制更改时观察到美国西部(俄勒冈州)区域内已部分完成的事务。更改仅在源区域中提交后才复制到其他区域。

注意

在某些情况下,您可能需要通过 AWS Support 申请增加限额限制。如果以下任何一项适用于您,请参阅 https://aws.amazon.com/support

  • 如果要为配置为使用超过 4 万个写入容量单位 (WCU) 的表添加副本,则必须针对添加副本的 WCU 配额请求提高服务配额。

  • 如果要在 24 小时内将副本添加到超过 10TB 的目标区域,则必须针对添加副本数据回填配额请求提高服务配额。

  • 如果您遇到类似以下内容的错误消息:

    • 无法在区域“example_region_A”中创建表“example_table”的副本,因为它超过了您在区域“example_region_B”中的当前账户限制。

二级索引

每个表的二级索引

您最多可以定义 5 个本地二级索引。

每个表都有 20 个全局二级索引的原定设置限额。您可以使用 Service Quotas 控制台AWS APIAWS CLI 查看为账户申请的每个表的全局二级索引数的默认和当前配额,并在需要时请求提高配额。您还可以通过向 https://aws.amazon.com/support 开设票证来请求提高配额。

您只能为每个 UpdateTable 操作创建或删除一个全局二级索引。

每个表的投影二级索引属性

您最多可将 100 个属性投影到表的所有本地和全局二级索引,此限制只适用于用户指定的投影属性。

CreateTable 操作中,如果您指定 INCLUDEProjectionType,则 NonKeyAttributes 中指定的属性总数量(所有二级索引的属性之和)不能超过 100。如果您将同一属性名称投影到两个不同的索引中,就会在确定总量时计为两个不同的属性。

此限制不适用于具有 ProjectionTypeKEYS_ONLYALL 的二级索引。

分区键和排序键

分区键长度

分区键值的最小长度为 1 个字节,最大长度为 2048 个字节。

分区键值

表和二级索引的不同分区键值的数量没有实际限制。

排序键长度

排序键值的最小长度为 1 个字节。最大长度为 1024 个字节。

排序键值

一般情况下,每个分区键值的不同排序键值的数量没有实际限制。

具有二级索引的表则例外。项目集合是一组具有相同分区键属性值的项目。在全局二级索引中,项目集合独立于基表(并可以具有不同的分区键属性),但在本地二级索引中,索引视图与表中的项目位于同一个分区中,并且共享相同的分区键属性。由于这种本地性质,当一个表有一个或多个 LSI 时,项目集合不能分布到多个分区。

对于包含一个或多个 LSI 的表,项目集合的大小不能超过 10GB。这包括所有基表项目和具有相同分区键属性值的所有投影 LSI 视图。10GB 是分区的最大大小。有关更多详细信息,请参阅 项目集合大小限制

命名规则

表名称和二级索引名称

表名称和二级索引名称的长度必须至少为 3 个字符,但不得超过 255 个字符。以下是允许的字符:

  • A-Z

  • a-z

  • 0-9

  • _(下划线)

  • -(连字符)

  • .(圆点)

属性名称

一般情况下,属性名称的长度必须至少为 1 个字符,但不得超过 64KB。

存在以下例外。这些属性名称的长度不得超过 255 个字符:

  • 二级索引分区键名称。

  • 二级索引排序键名称。

  • 任意用户指定的投影属性的名称(仅适用于本地二级索引)。在 CreateTable 操作中,如果您将 ProjectionType 指定为 INCLUDE,那么 NonKeyAttributes 参数中属性名称的长度就有限制。KEYS_ONLYALL 投影类型不受此影响。

这些属性名称必须使用 UTF-8 进行编码,并且每个名称(编码后)的总大小不能超过 255 字节。

数据类型

String

字符串的长度会受到 400 KB 的最大项目大小限制。

字符串是使用 UTF-8 二进制编码的 Unicode。由于 UTF-8 是宽度可变的编码,因此 DynamoDB 使用其 UTF-8 字节确定字符串的长度。

数字

数字最多可精确到 38 位,并且可以为正数、负数或零。

  • 正数范围:1E-1309.9999999999999999999999999999999999999E+125

  • 负数范围:-9.9999999999999999999999999999999999999E+125-1E-130

DynamoDB 使用 JSON 字符串代表请求和回复中的数字数据。有关更多信息,请参阅 DynamoDB 低级 API

如果数字精度十分重要,则应使用从数字类型转换的字符串将数字传递给 DynamoDB。

二元

二进制的长度会受到项目大小上限 400 KB 的限制。

使用二进制属性的应用程序必须先用 Base64 格式对数据进行编码,然后将其发送至 DynamoDB。接收到数据后,DynamoDB 将数据解码为无符号字节数组,将其用作属性的长度。

物品

项目大小

DynamoDB 中的项目大小上限为 400 KB,包括属性名称二进制长度(UTF-8 长度)和属性值长度(同为二进制长度)。属性名称也包含在此大小限制之内。

例如,比如一个项目有两个属性:一个属性名为“shirt-color”,值为“R”,另一个属性名为“shirt-size”,值为“M”。该项目的总大小为 23 字节。

具有本地二级索引的表的项目大小

对于表上的每个本地二级索引,以下对象的总大小有 400 KB 的限制:

  • 表中项目数据的大小。

  • 所有本地二级索引中对应条目的大小(包括键值和投影属性)。

Attributes

每个项目的属性名称-值对

每个项目的属性的累计大小必须在 DynamoDB 项目大小上限 (400 KB) 以内。

列表、映射或集中值的数量

只要包含值的项目大小在 400 KB 这一大小限制以内,列表、映射或集中值的数量就没有限制。

属性值

如果属性未用作表或索引的键属性,则允许使用空的字符串和二进制属性值。“集”、“列表” 和 “映射” 类型中允许使用空的字符串和二进制值。属性值不能是空集(字符串集、数字集或二进制集)。但可以是空列表和映射。

嵌套属性深度

DynamoDB 支持高达 32 级深度的嵌套属性。

表达式参数

表达式参数包括 ProjectionExpressionConditionExpressionUpdateExpressionFilterExpression

长度

任何表达式字符串的最大长度均为 4KB。例如,ConditionExpression a=b 的大小是 3 个字节。

任何一个表达式属性名称或表达式属性值的最大长度均为 255 字节。例如,#name 是 5 个字节;:val 是 4 个字节。

表达式中所有替代变量的最大长度为 2 MB。这是所有 ExpressionAttributeNamesExpressionAttributeValues 的长度之和。

运算符数和操作数

UpdateExpression 中允许的运算符或函数的最大数量为 300。例如,UpdateExpression SET a = :val1 + :val2 + :val3 包括两个“+”运算符。

IN 比较器的操作数最大数量为 100。

保留字

DynamoDB 不会阻止您使用与保留字冲突的名称。(有关完整列表,请参阅 DynamoDB 中的保留字。)

但是,如果您在表达式参数中使用了保留字,则还必须指定 ExpressionAttributeNames。有关更多信息,请参阅 DynamoDB 中的表达式属性名称(别名)

DynamoDB 事务

DynamoDB 事务 API 操作具有以下约束:

  • 一个事务不能包含超过 100 个具有唯一性的项目。

  • 一个事务不能包含超过 4 MB 数据。

  • 不能对同一个表中的同一个项目执行事务中的两个操作。例如,您不能在一个事务中对同一个项目同时执行 ConditionCheckUpdate

  • 事务无法对超过一个 AWS 账户或区域中的表执行操作。

  • 事务操作仅在最初写入的 AWS 区域内提供原子性、一致性、隔离性和持久性 (ACID) 保证。全局表中不支持跨区域的事务。例如,假设您在美国东部(俄亥俄州)和美国西部(俄勒冈州)区域有一个带副本的全局表,并且您在美国东部(弗吉尼亚州北部)区域执行 TransactWriteItems 操作。在此情况下,您可能会在复制更改时观察到美国西部(俄勒冈州)区域内已部分完成的事务。更改仅在源区域中提交后才复制到其他区域。

DynamoDB Streams

DynamoDB Streams 中的分片同时读取器

对于作为非全局表的单区域表,您可以设计最多两个进程来同时从同一个 DynamoDB Streams 分区读取数据。超过此限制会导致请求被拒。对于全局表,我们建议您将并行读取器的数量限制为一个,以避免请求节流。

启用了 DynamoDB Streams 的表的最大写入容量

AWS 为启用 DynamoDB Streams 的 DynamoDB 表的写入容量设置了一些默认配额。这些默认配额仅适用于处于预置读/写容量模式的表。默认情况下,以下是适用于您账户的吞吐量配额。

  • 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(北加利福尼亚)、美国西部(俄勒冈州)、南美洲(圣保罗)、欧洲地区(法兰克福)、欧洲地区(爱尔兰)、亚太地区(东京)、亚太地区(首尔)、亚太地区(新加坡)、亚太地区(悉尼)、中国(北京)区域。

    • 每个表 - 40000 个写入容量单位

  • 所有其他区域:

    • 每个表 - 10000 个写入容量单位

您可以使用 Service Quotas 控制台AWS APIAWS CLI 查看应用于账户的已启用 DynamoDB Streams 的表的最大写入容量默认和当前配额,并在需要时请求提高配额。您也可以通过向 AWS Support 开设票证来请求提高配额。

注意

预调配吞吐量配额同样适用于启用了 DynamoDB Streams 的 DynamoDB 表。当您对启用了流的表请求增加写入容量限额时,请确保还请求增加此表的预置吞吐能力。有关更多信息,请参阅吞吐量默认配额。当处理更高吞吐量的 DynamoDB Streams 时,其他限额也适用。有关更多信息,请参阅 Amazon DynamoDB Streams API 参考指南

DynamoDB Accelerator (DAX)

AWS 区域可用性

有关提供 DAX 的 AWS 区域,请参阅《AWS 一般参考》中的 DynamoDB Accelerator (DAX)

Nodes

DAX 集群由刚好 1 个主节点和 0 到 10 个只读副本节点组成。

一个 AWS 区域中的节点总数(每个 AWS 账户)不能超过 50 个。

参数组

您最多可以为每个区域创建 20 个 DAX 参数组。

子网组

您最多可以为每个区域创建 50 个 DAX 子网组。

在一个子网组中,您最多可以定义 20 个子网。

特定于 API 的限制

CreateTable/UpdateTable/DeleteTable/PutResourcePolicy/DeleteResourcePolicy

通常,您能以任意组合同时运行多达 500 个 CreateTableUpdateTableDeleteTablePutResourcePolicyDeleteResourcePolicy 请求。因此,处于 CREATINGUPDATINGDELETING 状态的表的总数不能超过 500 个。

您可以跨表组,每秒提交多达 2500 个可变(CreateTableDeleteTableUpdateTablePutResourcePolicyDeleteResourcePolicy)控制面板 API 请求的请求。但是,PutResourcePolicyDeleteResourcePolicy 请求的单独限制较低。有关更多信息,请参阅 PutResourcePolicyDeleteResourcePolicy 的以下配额详细信息。

包含基于资源的策略的 CreateTablePutResourcePolicy 请求将针对每 KB 算作两个额外的请求。例如,策略大小为 5 KB 的 CreateTablePutResourcePolicy 请求将算作 11 个请求。1 个是针对 CreateTable 请求,10 个是针对基于资源的策略(2 x 5 KB)。同样,大小为 20 KB 的策略将算作 41 个请求。1 个是针对 CreateTable 请求,40 个是针对基于资源的策略(2 x 20 KB)。

PutResourcePolicy

您可以跨一组表每秒提交多达 25 个 PutResourcePolicy API 请求。针对单个表成功执行请求表后,在接下来的 15 秒内不支持任何新的 PutResourcePolicy 请求。

基于资源的策略文档支持的最大大小为 20 KB。在计算策略大小时,DynamoDB 会将空格计入这一限制。

DeleteResourcePolicy

您可以跨一组表每秒提交多达 50 个 DeleteResourcePolicy API 请求。针对单个表成功执行 PutResourcePolicy 请求后,在接下来的 15 秒内不再支持任何 DeleteResourcePolicy 请求。

BatchGetItem

一个 BatchGetItem 操作最多可以检索 100 个项目。检索到的所有项目总大小不能超过 16 MB。

BatchWriteItem

一个 BatchWriteItem 操作最多可包含 25 个 PutItemDeleteItem 请求。写入的所有项目总大小不能超过 16 MB。

DescribeStream

您每秒最多可以调用 DescribeStream 10 次。

DescribeTableReplicaAutoScaling

DescribeTableReplicaAutoScaling 方法每秒仅支持 10 个请求。

DescribeLimits

DescribeLimits 只应定期调用。如果您在一分钟内多次调用它,则可能遇到限制错误。

DescribeContributorInsights/ListContributorInsights/UpdateContributorInsights

DescribeContributorInsightsListContributorInsightsUpdateContributorInsights 只应定期调用。对于这些 API 中的每一个,DynamoDB 每秒最多支持五个请求。

DescribeTable/ListTables/GetResourcePolicy

您可以每秒组合提交多达 2500 个只读(DescribeTableListTablesGetResourcePolicy)控制面板 API 请求。GetResourcePolicy API 的单独限制较低,为每秒 100 个请求。

Query

来自 Query 的结果集大小上限为每个调用 1 MB。您可以使用查询响应中的 LastEvaluatedKey 检索更多结果。

Scan

来自 Scan 的结果集大小上限为每个调用 1 MB。您可以使用扫描响应中的 LastEvaluatedKey 检索更多结果。

UpdateKinesisStreamingDestination

执行 UpdateKinesisStreamingDestination 操作时,您最多可以在 24 小时内 3 次将 ApproximateCreationDateTimePrecision 设置为新值。

UpdateTableReplicaAutoScaling

UpdateTableReplicaAutoScaling 方法每秒仅支持 10 个请求。

UpdateTableTimeToLive

UpdateTableTimeToLive 方法仅支持每小时针对指定的表发出一个启用或禁用 Time to Live (TTL) 的请求。完全处理此更改可能最多需要一个小时。在这一个小时的持续时间内,对同一个表的任何其他 UpdateTimeToLive 调用都会导致 ValidationException。

静态 DynamoDB 加密

从创建表开始,每 24 小时时段,允许在 AWS 拥有的密钥、AWS 托管式密钥 和客户托管密钥之间以每个表为基础切换最多四次。此外,如果过去 6 小时内未执行任何更改,则可以执行额外的更改。这实际上将每日的更改操作的最大次数设置为 8 次(在前 6 个小时内为 4 次更改操作,对于一天内的每个后续 6 小时时段,为 1 次更改操作)。

您可以根据需要切换加密密钥以使用 AWS 拥有的密钥,即使上述配额已用尽。

相关配额如下,但您也可以请求提高配额。要请求提高服务配额,请参阅 https://aws.amazon.com/support

将表导出到 Amazon S3

完整导出:最多可以导出 300 个并发导出任务,或所有正在进行的表导出的总容量最多为 100TB。在对导出进行排队之前,将检查这两个限制。

增量导出:在最短 15 分钟到最长 24 小时之间的导出期间时段内,最多可以同时导出 300 个并发作业或 100TB 的表大小。

备份与还原

通过 DynamoDB 按需备份进行恢复时,您最多可以并行执行 50 个恢复过程,总大小为 50 TB。通过 AWS Backup 进行恢复时,您最多可以并行执行 50 个恢复过程,总大小为 25 TB。有关备份的更多信息,请参阅DynamoDB 的备份和还原