命名规则和数据类型 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

命名规则和数据类型

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

命名规则

DynamoDB 中的表、属性和其他对象必须具有名称。名称应该简明扼要例如,名称如产品Books, 和作者是不言自明的.

以下是 DynamoDB 的命名规则:

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

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

    • a-z

    • A-Z

    • 0-9

    • _ (下划线)

    • - (短划线)

    • . (圆点)

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

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

    • 辅助索引分区键名称。

    • 辅助索引排序键名称。

    • 任意用户指定的投影属性的名称 (仅适用于本地二级索引)。

保留字和特殊字符

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

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

数据类型

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

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

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

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

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

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

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

标量类型

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

Number

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

  • 正数范围:E-99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

  • 负数范围:-9.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

在 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

String

字符串是使用 UTF-8 二进制编码的 Unicode。如果属性未用作索引或表的键,且受到最大 DynamoDB 项目大小限制的约束,则字符串的最小长度可以为零。

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

  • 对于简单的主键,第一个属性值 (分区键) 的最大长度为 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

Binary

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

如果二进制属性未用作索引或表的键,且受到最大 DynamoDB 项目大小限制的约束,则该属性的长度可以为零。

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

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

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

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

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

dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk

Boolean

布尔类型属性可以存储 truefalse

Null

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

文档类型

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

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

如果属性未用于表或索引键,属性值可以是空字符串或空二进制值。属性值不能为空集(字符串集、数字集或二进制集),但允许使用空的列表和映射。列表和映射中允许使用空的字符串和二进制值。有关更多信息,请参阅Attributes

List

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

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

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

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

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

Map

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

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

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

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

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

Sets

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

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

集中的每个值必须是唯一的。集中的值的顺序不会保留。因此,您的应用程序不能依赖集中的元素的任何特定顺序。DynamoDB 不支持空集,不过,一个集中允许使用空的字符串和二进制值。

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

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