Amazon DynamoDB 中支持的数据类型和命名规则 - Amazon DynamoDB

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

Amazon DynamoDB 中支持的数据类型和命名规则

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

命名规则

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

下面是 DynamoDB 的命名规则:

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

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

    • a-z

    • A-Z

    • 0-9

    • _ (下划线)

    • - (短划线)

    • . (圆点)

  • 属性名称的长度必须至少为 1 个字符,但大小小于 64KB。最佳实践是使属性名称尽可能短。这有助于减少占用的读取请求单位数量,因为属性名称包含在存储和吞吐量使用量的计量中。

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

    • 二级索引分区键名称

    • 二级索引排序键名称

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

保留字和特殊字符

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

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

数据类型

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

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

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

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

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

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

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

标量类型

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

数字

数字可为正数、负数或零。数字最多可精确到 38 位。超过此位数将导致异常。如果您需要 38 位以上的精度,可以使用字符串。

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

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

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

所有数字将作为字符串通过网络发送到 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 本身不支持日期和时间数据类型。相反,使用 Unix 纪元时间将日期和时间数据存储为数字数据类型可能很有用。

二进制

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

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

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

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

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

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

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

dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk

布尔值

布尔类型属性可以存储 truefalse

Null

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

文档类型

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

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

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

列出

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

列表类似于 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 中使用表达式

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

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

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

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

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

数据类型描述符

低级别 DynamoDB API 协议使用数据类型描述符作为令牌,这些令牌告诉 DynamoDB 如何解释每个属性。

以下是 DynamoDB 数据类型描述符的完整列表:

  • S – String

  • N – Number

  • B – Binary

  • BOOL – Boolean

  • NULL – Null

  • M – Map

  • L – List

  • SS – String Set

  • NS – Number Set

  • BS – Binary Set