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

DynamoDB 中的限制

此部分介绍了 Amazon DynamoDB 中的当前限制 (某些情况下没有限制)。除非另行指定,否则下面列出的每个限制将基于区域应用。

读/写容量模式和吞吐量

您可以每 24 小时在读/写容量模式之间切换一次。

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

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

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

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

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

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

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

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

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

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

吞吐量默认限制

AWS 对您可预置的吞吐量设了一些默认限制。下面是相关限制,除非您请求更高的容量。要请求提高服务限制,请参阅 http://www.amazonaws.cn/support

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

    按需 已预置

    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

  • 所有其他区域:

    按需 已预置

    Per table

    10,000 read request units and 10,000 write request units

    10,000 read capacity units and 10,000 write capacity units

    Per account

    Not applicable

    20,000 read capacity units and 20,000 write capacity units

    Minimum throughput for any table or global secondary index

    Not applicable

    1 read capacity unit and 1 write capacity unit

    注意

    可以将账户的所有可用吞吐量应用于单个表或多个表。

预置吞吐量限制包含表的容量及其所有全局二级索引的容量的和。

在 AWS 管理控制台中,您可以使用 AWS CloudWatch,通过在 Metrics (指标) 选项卡上查看 read capacitywrite capacity graphs,以查看给定区域中您当前的读写吞吐量是多少。确保您离限制不算太近。

如果您提高了预置吞吐量的默认限值,则可以使用 DescribeLimits 操作查看当前限值。

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

增加预置吞吐量

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

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

减少预置吞吐量

对于 UpdateTable 操作中的每个表和全局二级索引,您可以减小 ReadCapacityUnitsWriteCapacityUnits (或者同时减小这两者)。新设置在 UpdateTable 操作完成后才会生效。每天的任何时间最多可执行 4 次减小操作。此处的“天”是根据 GMT 时区定义的。此外,如果过去 1 小时内未执行减小操作,则可以执行额外的减小操作,这实际上将每日的减小操作的最大次数设置为 27 次 (在前 1 个小时内为 4 次减小操作,对于一天内的每个后续 1 小时时段,为 1 次减小操作)。

重要

表与 GSI 减小限制次数已分离,因此特定表的所有 GSI 都具有其自己的减小限制。但是,如果一个请求减少了表和 GSI 的吞吐量,则当表和 GSI 中的任意一个超出当前限制时,请求都会被拒绝。不会对请求执行部分处理。

在一天的头 4 个小时内,具有 GSI 的表可以按下面所示进行修改:

  • 减小表的 WriteCapacityUnits 或 ReadCapacityUnits (或两者) 4 次。

  • 减小 GSI 的 WriteCapacityUnits 或 ReadCapacityUnits (或两者) 4 次。

在那一天结束时,表和 GSI 的吞吐量各有机会减少 27 次。

表大小

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

每个账户中表的数量

对于任何 AWS 账户,每个区域的初始限制为 256 个表。

要请求提高服务限制,请参阅 http://www.amazonaws.cn/support

二级索引

每个表的二级索引

您最多可以定义 5 个local secondary index。

每个表的初始限制为 20 个全局二级索引。要请求提高服务限制,请参阅 http://www.amazonaws.cn/support

以下区域的每个表的全局二级索引限制为 5:

  • AWS GovCloud(美国东部)

  • AWS GovCloud(美国西部)

  • 欧洲(斯德哥尔摩)

  • US ISO East

  • 美国 ISOB 东部 (俄亥俄)

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

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

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

此限制不适用于 ProjectionTypeKEYS_ONLY 或者 ALL 的二级索引。

以下区域的每个表的预计二级索引属性限制为 20:

  • AWS GovCloud(美国东部)

  • AWS GovCloud(美国西部)

  • 欧洲(斯德哥尔摩)

  • US ISO East

  • 美国 ISOB 东部 (俄亥俄)

分区键和排序键

分区键长度

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

分区键值

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

排序键长度

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

排序键值

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

具有local secondary index的表则例外。使用local secondary index,项目集合的大小有限制:对于每个不同的分区键值,所有表和索引项目的大小总共不能超过 10GB。这可能会限制每个分区键值的排序键的数量。有关更多信息,请参阅项目集合大小限制

命名规则

表名称和二级索引名称

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

  • A-Z

  • a-z

  • 0-9

  • _ (下划线)

  • - (连字符)

  • . (圆点)

属性名称

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

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

  • Secondary index分区键名称。

  • Secondary index排序键名称。

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

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

数据类型

字符串

字符串的长度会受到 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 字节。

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

对于表上的每个local secondary index,以下对象的总大小有 400 KB 的限制:

  • 表中项目数据的大小。

  • 与该项目对应的local secondary index条目的大小,包括其键值和投影属性。

属性

每个项目的属性“名称/值”对

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

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

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

属性值

属性值不能是空字符串或空集(字符串集、数字集或二进制集),但可以是空列表和映射。

嵌套属性深度

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

表达式参数

表达式参数包括 ProjectionExpressionConditionExpressionUpdateExpressionFilterExpression

长度

任何表达式字符串的最大长度均为 4 KB。例如,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 事务 API 具有以下约束:

  • 一个事务不能包含超过 10 个唯一操作。

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

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

  • 目前,您不能对全局表使用事务。如果您要对全局表使用事务,请咨询客户代表或联系 Amazon Support

DynamoDB 流

DynamoDB 流 中的分区同时读取器

禁止两个以上的进程同时从同一个 DynamoDB 流 分区进行读取。超过此限制会导致请求被拒。

启用了流的表的最大写入容量

AWS 对启用 Streams 的 DynamoDB 表的写入容量设了一些默认限制。下面是相关限制,除非您请求更高的容量。要请求提高服务限制,请参阅 http://www.amazonaws.cn/support

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

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

  • 所有其他区域:

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

注意

预配置的吞吐量限制也适用于启用了 Streams 的 DynamoDB 表。有关更多信息,请参阅吞吐量默认限制

DynamoDB Accelerator (DAX)

AWS 区域可用性

有关支持 DAX 的区域的列表,请参阅 AWS General Reference 中的 DynamoDB Accelerator (DAX)

节点

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

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

参数组

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

子网组

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

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

特定于 API 的限制

CreateTable/UpdateTable/DeleteTable

通常,您同时可以运行多达 10 个 CreateTableUpdateTableDeleteTable 请求(任一组合)。也就是说,处于 CREATINGUPDATINGDELETING 状态的表的总数不能超过 50 个。

唯一例外是在创建含有一个或多个二级索引的表时。您可以一次运行最多 25 个这种请求;不过,如果表或索引指定很复杂,则 DynamoDB 可能会暂时降低并发操作的数量。

BatchGetItem

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

BatchWriteItem

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

DescribeLimits

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

Query

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

Scan

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

DynamoDB 静态加密

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

您可以根据需要切换加密密钥以使用 AWS 拥有的 CMK。

下面是相关限制,除非您请求更高的容量。要请求提高服务限制,请参阅 http://www.amazonaws.cn/support