Amazon DynamoDB 中的服务、账户和表限额
本节介绍 Amazon DynamoDB 中的当前配额(以前称为限制)。除非另行指定,否则每个配额将基于区域应用。
主题
读/写容量模式和吞吐量
您可以在 24 小时内更改两次此设置,所以不必担心未来需要更改时无法更改。
容量单位大小(对于预调配表)
一个读取容量单位 = 对大小为 4KB 的项目每秒执行一次强一致性读取,或每秒执行两次最终一致性读取。
一个写入容量单位 = 对大小为 1 KB 的项目每秒执行一次写入。
事务读取请求需要 2 个读取容量单位才能对大小最多为 4KB 的项目每秒执行一次读取。
事务写入请求需要 2 个写入容量单位才能对大小最多为 1 KB 的项目每秒执行一次写入。
请求单位大小(对于按需表)
一个读取请求单位 = 对大小最多为 4KB 的项目执行一次强一致性读取,或执行两次最终一致性读取。
一个写入请求单位 = 对大小最多为 1 KB 的项目执行一次写入。
事务读取请求需要 2 个读取请求单位才能对大小最多为 4KB 的项目执行一次读取。
事务写入请求需要 2 个写入请求单位才能对大小最多为 1 KB 的项目执行一次写入。
吞吐量默认限额
Amazon 对您的账户在区域中可以预置和使用的吞吐量设置了一些原定设置配额。相关配额如下,但您也可以请求提高配额。要请求提高服务配额,请参阅 https://aws.amazon.com/support
按需 | 已预置 | |
---|---|---|
|
|
|
|
|
|
|
|
|
可以将账户的所有可用吞吐量应用于单个表或多个表。
预置吞吐量配额是表容量加上其所有全局二级索引容量的总和。
在 Amazon Web Services Management Console 上,可以使用 Amazon CloudWatch,通过查看 Metrics(指标)选项卡上的 read capacity
和 write capacity graphs
,监控给定 Amazon 区域的当前读写吞吐量。切记不要太接近配额。
如果您提高了预置吞吐量的默认配额,可以使用 DescribeLimits 操作来查看当前的配额值。
增加或减少吞吐量(对于预调配表)
增加预调配吞吐量
您可以根据需要使用 ReadCapacityUnits
或 WriteCapacityUnits
操作增加 Amazon Web Services Management Console 或 UpdateTable
。在单个调用中,您可以为表、该表的任何全局二级索引或它们的任意组合增加预置吞吐量。新设置在 UpdateTable
操作完成后才会生效。
添加预置容量时不能超过每个账户的配额,且 DynamoDB 不会允许您太快地增加预置容量。除了这些限制以外,您还可以根据需要尽量增加表的预置容量。有关每个账户的配额的更多信息,请参阅上一部分 吞吐量默认限额。
减少预调配吞吐量
对于 UpdateTable
操作中的每个表和全局二级索引,您可以减小 ReadCapacityUnits
或 WriteCapacityUnits
(或者同时减小这两者)。新设置在 UpdateTable
操作完成后才会生效。每天的任何时间最多可执行 4 次减小操作。天依据通用协调时间 (UTC) 定义。此外,如果过去 1 小时内未执行减小操作,则可以执行额外的减小操作。这实际上将每日的减小操作的最大次数设置为 27 次(在前 1 个小时内为 4 次减小操作,对于一天内的每个后续 1 小时时段,为 1 次减小操作)。
表与全局二级索引减小限制次数已分离,因此特定表的所有全局二级索引都具有其自己的减小限制。但是,如果一个请求减少了表和全局二级索引的吞吐量,则当表和全局二级索引中的任意一个超出当前限制时,请求都会被拒绝。请求未得到部分处理。
例
在一天的头 4 个小时内,具有全局二级索引的表可以按下面所示进行修改:
-
将表的
WriteCapacityUnits
或ReadCapacityUnits
(或两者)减少 4 次。 -
将全局二级索引的
WriteCapacityUnits
或ReadCapacityUnits
(或两者)减少 4 次。
在那一天结束时,表和全局二级索引的吞吐量各有机会减少 27 次。
表
表大小
表的大小没有实际限制。表的项目数和字节数是无限制的。
最大表数(每个账户、每个区域)
对于任何 Amazon 账户,每个 Amazon 区域都有一个 2,500 个表的初始配额。
要请求提高服务配额,请参阅 https://aws.amazon.com/support
您可以使用 Service Quotas 控制台
全局表
Amazon 对您在使用全局表时可以预置或使用的吞吐量设置了一些默认配额。
按需 | 已预置 | |
---|---|---|
|
|
|
|
|
|
如果要为配置为使用超过 4 万个写入容量单位 (WCU) 的表添加副本,则必须针对添加副本的 WCU 配额请求提高服务配额。要请求提高服务配额,请参阅 https://aws.amazon.com/support
如果要在 24 小时内将副本添加到超过 10TB 的目标区域,则必须针对添加副本数据回填配额请求提高服务配额。
事务操作仅在最初写入的 Amazon 区域内提供原子性、一致性、隔离性和持久性 (ACID) 保证。全局表中不支持跨区域的事务。例如,假设您在美国东部(俄亥俄)和美国西部(俄勒冈)区域有一个带副本的全局表,并且您在美国东部(弗吉尼亚北部)区域执行 TransactWriteItems 操作。在此情况下,您可能会在复制更改时观察到美国西部(俄勒冈)区域内已部分完成的事务。更改仅在源区域中提交后才复制到其他区域。
二级索引
每个表的二级索引
您最多可以定义 5 个本地二级索引。
每个表都有 20 个全局二级索引的初始配额。要请求提高服务配额,请参阅 https://aws.amazon.com/support
您只能为每个 UpdateTable
操作创建或删除一个全局二级索引。
每个表的投影二级索引属性
您最多可将 100 个属性投影到表的所有本地和全局二级索引,此限制只适用于用户指定的投影属性。
在 CreateTable
操作中,如果您指定 INCLUDE
的 ProjectionType
,则 NonKeyAttributes
中指定的属性总数量(所有二级索引的属性之和)不能超过 100。如果您将同一属性名称投影到两个不同的索引中,就会在确定总量时计为两个不同的属性。
此限制不适用于具有 ProjectionType
为 KEYS_ONLY
或 ALL
的二级索引。
分区键和排序键
分区键长度
分区键值的最小长度为 1 个字节,最大长度为 2048 个字节。
分区键值
表和二级索引的不同分区键值的数量没有实际限制。
排序键长度
排序键值的最小长度为 1 个字节。最大长度为 1024 个字节。
排序键值
一般情况下,每个分区键值的不同排序键值的数量没有实际限制。
具有二级索引的表则例外。项目集合是一组具有相同分区键属性值的项目。在全局二级索引中,项目集合独立于基表(并可以具有不同的分区键属性),但在本地二级索引中,索引视图与表中的项目位于同一个分区中,并且共享相同的分区键属性。由于这种本地性质,当一个表有一个或多个 LSI 时,项目集合不能分布到多个分区。
对于具有一个或多个 LSI 的表,任何项目集合(包括所有基表项目和具有相同分区键属性值的所有投影 LSI 视图)的大小都不能超过 10GB。这是因为 10GB 是分区的最大大小。有关更多详细信息,请参阅项目集合大小限制。
命名规则
表名称和二级索引名称
表名称和二级索引名称的长度必须至少为 3 个字符,但不得超过 255 个字符。以下是允许的字符:
-
A-Z
-
a-z
-
0-9
-
_
(下划线) -
-
(连字符) -
.
(圆点)
属性名称
一般情况下,属性名称的长度必须至少为 1 个字符,但不得超过 64KB。
存在以下例外。这些属性名称的长度不得超过 255 个字符:
-
二级索引分区键名称。
-
二级索引排序键名称。
-
任意用户指定的投影属性的名称(仅适用于本地二级索引)。在
CreateTable
操作中,如果您将ProjectionType
指定为INCLUDE
,那么NonKeyAttributes
参数中属性名称的长度就有限制。KEYS_ONLY
和ALL
投影类型不受此影响。
这些属性名称必须使用 UTF-8 进行编码,并且每个名称 (编码后) 的总大小不能超过 255 字节。
数据类型
字符串
字符串的长度会受到 400 KB 的最大项目大小限制。
字符串是使用 UTF-8 二进制编码的 Unicode。由于 UTF-8 是宽度可变的编码,因此 DynamoDB 使用其 UTF-8 字节确定字符串的长度。
数字
数字最多可精确到 38 位,并且可以为正数、负数或零。
-
正数范围:
1E-130
到9.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 的限制:
-
表中项目数据的大小。
-
所有本地二级索引中对应条目的大小(包括键值和投影属性)。
属性
每个项目的属性名称-值对
每个项目的属性的累计大小必须在 DynamoDB 项目大小上限 (400 KB) 以内。
列表、映射或集中值的数量
只要包含值的项目大小在 400 KB 这一大小限制以内,列表、映射或集中值的数量就没有限制。
属性值
如果属性未用作表或索引的键属性,则允许使用空的字符串和二进制属性值。“集”、“列表” 和 “映射” 类型中允许使用空的字符串和二进制值。属性值不能是空集(字符串集、数字集或二进制集)。但可以是空列表和映射。
嵌套属性深度
DynamoDB 支持高达 32 级深度的嵌套属性。
表达式参数
表达式参数包括 ProjectionExpression
、ConditionExpression
、UpdateExpression
和 FilterExpression
。
长度
任何表达式字符串的最大长度均为 4KB。例如,ConditionExpression
a=b
的大小是 3 个字节。
任何一个表达式属性名称或表达式属性值的最大长度均为 255 字节。例如,#name
是 5 个字节;:val
是 4 个字节。
表达式中所有替代变量的最大长度为 2 MB。这是所有 ExpressionAttributeNames
和 ExpressionAttributeValues
的长度之和。
运算符数和操作数
UpdateExpression
中允许的运算符或函数的最大数量为 300。例如,UpdateExpression SET a = :val1 + :val2 + :val3
包括两个“+
”运算符。
IN
比较器的操作数最大数量为 100。
保留字
DynamoDB 不会阻止您使用与保留字冲突的名称。(有关完整列表,请参阅 DynamoDB 中的保留字。)
但是,如果您在表达式参数中使用了保留字,则还必须指定 ExpressionAttributeNames
。有关更多信息,请参阅 DynamoDB 中的表达式属性名称。
DynamoDB 事务
DynamoDB 事务 API 操作具有以下约束:
-
一个事务不能包含超过 100 个具有唯一性的项目。
-
一个事务不能包含超过 4 MB 数据。
-
不能对同一个表中的同一个项目执行事务中的两个操作。例如,您不能在一个事务中对同一个项目同时执行
ConditionCheck
和Update
。 -
事务无法对超过一个 Amazon 账户或区域中的表执行操作。
-
事务操作仅在最初写入的 Amazon 区域内提供原子性、一致性、隔离性和持久性 (ACID) 保证。全局表中不支持跨区域的事务。例如,假设您在美国东部(俄亥俄)和美国西部(俄勒冈)区域有一个带副本的全局表,并且您在美国东部(弗吉尼亚北部)区域执行
TransactWriteItems
操作。在此情况下,您可能会在复制更改时观察到美国西部(俄勒冈)区域内已部分完成的事务。更改仅在源区域中提交后才复制到其他区域。
DynamoDB Streams
DynamoDB Streams 中的分片同时读取器
禁止两个以上的进程同时从同一个 DynamoDB Streams 分区进行读取。超过此限制会导致请求被拒。
启用了 DynamoDB Streams 的表的最大写入容量
Amazon 为启用 DynamoDB Streams 的 DynamoDB 表的写入容量设置了一些默认配额。相关配额如下,但您也可以请求提高配额。要请求提高服务配额,请参阅 https://aws.amazon.com/support
-
美国东部(弗吉尼亚北部)、美国东部(俄亥俄)、美国西部(加利福尼亚北部)、美国西部(俄勒冈)、南美洲(圣保罗)、欧洲(法兰克福)、欧洲(爱尔兰)、亚太地区(东京)、亚太地区(首尔)、亚太地区(新加坡)、亚太地区(悉尼)、中国(北京)区域。
-
每个表 - 40000 个写入容量单位
-
-
所有其他区域:
-
每个表 - 10000 个写入容量单位
-
预置吞吐量配额同样适用于启用了 DynamoDB Streams 的 DynamoDB 表。有关更多信息,请参阅吞吐量默认限额。
DynamoDB Accelerator (DAX)
Amazon 区域可用性
有关提供 DAX 的Amazon 区域,请参阅 Amazon 一般参考的 DynamoDB Accelerator (DAX)。
节点
DAX 集群由刚好 1 个主节点和 0 到 10 个只读副本节点组成。
一个 Amazon 区域中的节点总数(每个 Amazon 账户)不能超过 50 个。
参数组
您最多可以为每个区域创建 20 个 DAX 参数组。
子网组
您最多可以为每个区域创建 50 个 DAX 子网组。
在一个子网组中,您最多可以定义 20 个子网。
特定于 API 的限制
CreateTable
/UpdateTable
/DeleteTable
-
通常,您同时可以运行多达 500 个
CreateTable
、UpdateTable
和DeleteTable
请求(任意组合)。也就是说,处于CREATING
、UPDATING
或DELETING
状态的表的总数不能超过 500 个。唯一例外是在创建含有一个或多个二级索引的表时。您可以一次运行最多 250 个此类请求。不过,如果表或索引指定很复杂,则 DynamoDB 可能会暂时降低并发操作的数量。
BatchGetItem
-
一个
BatchGetItem
操作最多可以检索 100 个项目。检索到的所有项目总大小不能超过 16 MB。
BatchWriteItem
-
一个
BatchWriteItem
操作最多可包含 25 个PutItem
或DeleteItem
请求。写入的所有项目总大小不能超过 16 MB。
DescribeTableReplicaAutoScaling
-
DescribeTableReplicaAutoScaling
方法每秒仅支持 10 个请求。
DescribeLimits
-
DescribeLimits
只应定期调用。如果您在一分钟内多次调用它,则可能遇到限制错误。
DescribeContributorInsights
/ListContributorInsights
/UpdateContributorInsights
-
DescribeContributorInsights
、ListContributorInsights
和UpdateContributorInsights
只应定期调用。对于这些 API 中的每一个,DynamoDB 每秒最多支持五个请求。
Query
-
来自
Query
的结果集大小上限为每个调用 1 MB。您可以使用查询响应中的LastEvaluatedKey
检索更多结果。
Scan
-
来自
Scan
的结果集大小上限为每个调用 1 MB。您可以使用扫描响应中的LastEvaluatedKey
检索更多结果。
UpdateTableReplicaAutoScaling
-
UpdateTableReplicaAutoScaling
方法每秒仅支持 10 个请求。
UpdateTableTimeToLive
-
UpdateTableTimeToLive
方法仅支持每小时针对指定的表发出一个启用或禁用Time to Live (TTL)
的请求。完全处理此更改可能最多需要一个小时。在这一个小时的持续时间内,对同一个表的任何其他UpdateTimeToLive
调用都会导致 ValidationException。
静态 DynamoDB 加密
从创建表开始,每 24 小时时段,允许在 Amazon 拥有的密钥、Amazon 托管式密钥 和客户托管密钥之间以每个表为基础切换最多四次。此外,如果过去 6 小时内未执行任何更改,则可以执行额外的更改。这实际上将每日的更改操作的最大次数设置为 8 次(在前 6 个小时内为 4 次更改操作,对于一天内的每个后续 6 小时时段,为 1 次更改操作)。
您可以根据需要切换加密密钥以使用 Amazon 拥有的密钥,即使上述配额已用尽。
相关配额如下,但您也可以请求提高配额。要请求提高服务配额,请参阅 https://aws.amazon.com/support
将表导出到 Amazon S3
最多可以导出 300 个并发导出任务,或所有正在进行的表导出的总容量最多为 100TB。在对导出进行排队之前,将检查这两个限制。
备份与还原
通过 DynamoDB 按需备份进行恢复时,您最多可以并发执行 4 个恢复过程,总大小为 50TB。通过 Amazon Backup 进行恢复时,您最多可以并发执行 4 个恢复过程,总大小为 25TB。有关备份的更多信息,请参阅使用 DynamoDB 的按需备份和还原。