Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

DynamoDB 中的限制

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

容量单位和预置吞吐量

容量单位大小

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

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

预置吞吐量默认限制

对于任何表或全局二级索引,预置吞吐量的最低设置为 1 个读取容量单位和 1 个写入容量单位。

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

  • 美国东部(弗吉尼亚北部) 区域:

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

    • 每个账户 – 80000 个读取容量单位和 80000 个写入容量单位

  • 所有其他区域:

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

    • 每个账户 – 20000 个读取容量单位和 20000 个写入容量单位

    注意

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

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

在 AWS 管理控制台中,您可以查看您当前在给定区域中的预置容量,并确保不过分接近限值。如果您提高了默认限值,则可以使用 DescribeLimits 操作查看当前限值。

增加预置吞吐量

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

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

减少预置吞吐量

您可随时减小表的 ReadCapacityUnitsWriteCapacityUnits 设置 (每天最多可执行此操作 4 次)。此处的“天”是根据 GMT 时区定义的。此外,如果过去 4 小时内未执行减小操作,则可以执行额外的调低操作,这可将每天的减小操作的最大次数设置为 四次 (一天中前 4 个小时 4 次减小操作,随后的每个 4 小时时段 1 次减小操作)。

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

表大小

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

每个账户中表的数量

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

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

二级索引

每个表的二级索引

您最多可以为每个表定义 5 个local secondary index和 5 个全局二级索引。

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

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

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

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

分区键和排序键

分区键长度

分区键值的最小长度为 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 流 中的分区同时读取器

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

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

以下写入容量限制适用于启用了 DynamoDB 流的表:

  • 美国东部 (弗吉尼亚北部) 地区:

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

    • 每个账户 - 80000 个写入容量单位

  • 所有其他区域:

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

    • 每个账户 - 20000 个写入容量单位

如果您需要为启用了 DynamoDB Streams 的表增加写入容量,请转至 http://www.amazonaws.cn/support 并打开新的 Service Limit Increase 案例。将“Table Write Capacity Units”指定为要提高的限制。

DynamoDB Accelerator (DAX)

AWS 区域可用性

DAX 在以下 AWS 区域中可用:

  • 美国东部(弗吉尼亚北部)

  • 美国西部(加利福尼亚北部)

  • 美国西部(俄勒冈)

  • 欧洲(爱尔兰)

  • 亚太区域(东京)

节点

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

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

参数组

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

子网组

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

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

特定于 API 的限制

CreateTable/UpdateTable/DeleteTable

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

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

BatchGetItem

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

BatchWriteItem

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

DescribeLimits

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

Query

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

Scan

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