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

命名规则和数据类型

本部分介绍 Amazon DynamoDB 命名规则和 DynamoDB 支持的各种数据类型。数据类型存在限制。有关更多信息,请参阅 数据类型

命名规则

DynamoDB 中的表、属性和其他对象必须具有名称。名称应该简明扼要 — 例如,ProductsBooksAuthors 之类的名称是都是不言而喻的。

下面是 DynamoDB 的命名规则:

  • 所有名称都必须使用 UTF-8 进行编码,并且区分大小写。

  • 表名称和索引名称的长度必须介于 3 到 255 个字符之间,而且只能包含以下字符:

    • a-z

    • A-Z

    • 0-9

    • _ (下划线)

    • - (短划线)

    • . (圆点)

  • 属性名称的长度必须介于 1 到 255 个字符之间。

保留字和特殊字符

DynamoDB 具有保留字和特殊字符的列表。有关 DynamoDB 中的保留字的完整列表,请参阅 DynamoDB 中的保留关键字。此外,以下字符在 DynamoDB 中具有特殊含义:#(哈希)和 :(冒号)。

尽管 DynamoDB 允许您将这些保留字和特殊字符用于名称,但我们建议您避免这样做,因为在表达式中使用这些名称时必须定义占位符变量。有关更多信息,请参阅表达式属性名称

数据类型

DynamoDB 对表中的属性支持很多不同的数据类型。可按以下方式为属性分类:

  • 标量类型 – 标量类型可准确地表示一个值。标量类型包括数字、字符串、二进制、布尔值和 null。

  • 文档类型 – 文档类型可表示具有嵌套属性的复杂结构,例如您将在 JSON 文档中找到的结构。文档类型包括列表和映射。

  • 集类型 – 集类型可表示多个标量值。集类型包括字符串集、数字集和二进制集。

当您创建表或二级索引时,您必须指定每个主键属性 (分区键和排序键) 的名称和数据类型。此外,每个主键属性必须定义为字符串、数字或二进制类型。

DynamoDB 是 NoSQL 数据库并且无架构。这意味着,与主键属性不同,您无需在创建表时定义任何属性或数据类型。与此相对,关系数据库要求您在创建表时定义每个列的名称和数据类型。

下面是每种数据类型的说明以及采用 JSON 格式的示例。

标量类型

标量类型包括数字、字符串、二进制、布尔值和 null。

数字

数字可为正数、负数或零。数字最多可精确到 38 位。超过此位数将导致异常。

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

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

在 DynamoDB 中,数字以可变长度形式表示。系统会删减开头和结尾的 0。

所有数字将作为字符串通过网络发送到 DynamoDB,以最大程度地提高不同语言和库之间的兼容性。但是,DynamoDB 会将它们视为数字类型属性以方便数学运算。

注意

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

您可以使用数字数据类型表示日期或时间戳。执行此操作的一种方法是使用纪元时间 — 自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。例如,纪元时间 1437136300 表示 2015 年 7 月 17 日下午 12:31:40 UTC。

有关更多信息,请访问 http://en.wikipedia.org/wiki/Unix_time

字符串

字符串是使用 UTF-8 二进制编码的 Unicode。字符串的长度必须大于零且受限于最大 DynamoDB 项目大小 400 KB。

以下附加约束将适用于定义为字符串类型的主键属性:

  • 对于简单的主键,第一个属性值 (分区键) 的最大长度为 2048 字节。

  • 对于复合主键,第二个属性值 (排序键) 的最大长度为 1024 字节。

DynamoDB 使用基础的 UTF-8 字符串编码字节整理和比较字符串。例如,“a”(0x61) 大于“A”(0x41),“¿”(0xC2BF) 大于“z”(0x7A)。

您可使用字符串数据类型表示日期或时间戳。执行此操作的一种方法是使用 ISO 8601 字符串,如以下示例所示:

  • 2016-02-15

  • 2015-12-21T17:42:34Z

  • 20150311T122706Z

有关更多信息,请访问 http://en.wikipedia.org/wiki/ISO_8601

二进制

二进制类型属性可以存储任意二进制数据,如压缩文本、加密数据或图像。DynamoDB 会在比较二进制值时将二进制数据的每个字节视为无符号。

二进制属性的长度必须大于零且受限于最大 DynamoDB 项目大小 400 KB。

如果您将主键属性定义为二进制类型属性,以下附加限制将适用:

  • 对于简单的主键,第一个属性值 (分区键) 的最大长度为 2048 字节。

  • 对于复合主键,第二个属性值 (排序键) 的最大长度为 1024 字节。

在将二进制值发送到 DynamoDB 之前,您的应用程序必须采用 Base64 编码格式对其进行编码。收到这些值后,DynamoDB 会将数据解码为无符号字节数组,将其用作二进制属性的长度。

下面的示例是一个采用 Base64 编码文本的二进制属性。

dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk

Boolean

布尔类型属性可以存储 truefalse

Null

空代表属性具有未知或未定义状态。

文档类型

文档类型包括列表和映射。这些数据类型可以互相嵌套,用来表示深度最多为 32 层的复杂数据结构。

只要包含值的项目大小在 DynamoDB 项目大小限制 (400 KB) 内,列表或映射中值的数量就没有限制。

属性值不能是空字符串或空集(字符串集、数字集或二进制集),但可以是空列表和映射。有关更多信息,请参阅 属性

列表

列表类型属性可存储值的有序集合。列表用方括号括起:[ ... ]

列表类似于 JSON 数组。列表元素中可以存储的数据类型没有限制,列表元素中的元素也不一定为相同类型。

以下示例显示了包含两个字符串和一个数字的列表。

FavoriteThings: ["Cookies", "Coffee", 3.14159]

注意

DynamoDB 让您可以使用列表中的单个元素,即使这些元素深层嵌套也是如此。有关更多信息,请参阅在 DynamoDB 中使用表达式

映射

映射类型属性可以存储名称/值对的无序集合。映射用大括号括起:{ ... }

映射类似于 JSON 对象。映射元素中可以存储的数据类型没有限制,映射中的元素也不一定为相同类型。

映射非常适合用来将 JSON 文档存储在 DynamoDB 中。以下示例显示了一个映射,该映射包含一个字符串、一个数字和一个含有另一个映射的嵌套列表。

{ Day: "Monday", UnreadEmails: 42, ItemsOnMyDesk: [ "Coffee Cup", "Telephone", { Pens: { Quantity : 3}, Pencils: { Quantity : 2}, Erasers: { Quantity : 1} } ] }

注意

DynamoDB 让您可以使用映射中的单个元素,即使这些元素深层嵌套也是如此。有关更多信息,请参阅在 DynamoDB 中使用表达式

DynamoDB 支持表示数字、字符串或二进制值集的类型。集中的所有元素必须为相同类型。例如,数字集类型的属性只能包含数字,字符串集只能包含字符串,依此类推。

只要包含值的项目大小在 DynamoDB 项目大小限制 (400 KB) 内,集中的值的数量就没有限制。

集中的每个值必须是唯一的。集中的值的顺序不会保留。因此,您的应用程序不能依赖集中的元素的任何特定顺序。最后,DynamoDB 不支持空集。

以下示例显示了一个字符串集、一个数字集和一个二进制集:

["Black", "Green", "Red"] [42.2, -19, 7.5, 3.14] ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]

本页内容: