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

本节介绍了Amazon DynamoDB的命名规则和DynamoDB支持的各种数据类型。有一些限制适用于数据类型。

命名规则

DynamoDB中的表、属性和其他对象必须有名字。名称应该是有意义的和简洁的–例如,像产品、书籍和作者这样的名称是不言自明的。

以下是DynamoDB的命名规则:

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

表名和索引名的长度必须在3到255个字符之间,并且只能包含以下字符。

a-z

A-Z

0-9

_ (下划线)

  • (破折号)

. (点)

属性名称必须至少有一个字符长,但不超过64KB长。

以下是例外情况。这些属性名称的长度不得超过255个字符。

二级索引分区键名。

二级索引排序键名。

任何用户指定的预测属性的名称(仅适用于本地二级索引)。

保留字和特殊字符

DynamoDB有一个保留字和特殊字符的列表。有关DynamoDB中保留字的完整列表,请参见DynamoDB中的保留字。另外,以下字符在DynamoDB中具有特殊意义:#(散列)和:(冒号)。

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

数据类型

DynamoDB支持表内属性的许多不同数据类型。它们可以归类如下。

标量类型 - 一个标量类型可以准确地代表一个值。标量类型有数字、字符串、二进制、布尔值和空值。

文档类型–一个文档类型可以代表一个带有嵌套属性的复杂结构,比如你会在JSON文档中发现。文档类型是列表和地图。

集合类型–集合类型可以表示多个标量值。集合类型是字符串集合、数字集合和二进制集合。

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

DynamoDB是一个NoSQL数据库,是无模式的。这意味着,除了主键属性外,你在创建表时不需要定义任何属性或数据类型。相比之下,关系型数据库要求你在创建表时定义每一列的名称和数据类型。

下面是每种数据类型的描述,以及JSON格式的例子。

标量类型

标量类型有数字、字符串、二进制、布尔值和空值。

数值

数字可以是正数、负数或零。数字可以有多达38位的精度。超出这个范围就会出现异常。

正数范围。1E-130到9.9999999999999999999E+125

负值范围:-9.99999999999999999E+125至-1E-130

在DynamoDB中,数字被表示为可变长度。前导和尾部的零被修剪。

所有的数字都以字符串的形式通过网络发送到DynamoDB,以最大限度地提高不同语言和库的兼容性。然而,DynamoDB将它们视为数学运算的数字类型属性。

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

字符串

字符串是采用UTF-8二进制编码的Unicode。如果属性不被用作索引或表的键,那么字符串的最小长度可以是0,并且受到DynamoDB项目最大尺寸限制400KB的约束。

下面的额外约束适用于定义为字符串类型的主键属性。

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

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

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

你可以使用字符串数据类型来表示一个日期或一个时间戳。一种方法是使用ISO 8601字符串,如这些例子中所示。

2016-02-15

2015-12-21T17:42:34Z

20150311T122706Z

二进制

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

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

如果你把一个主键属性定义为二进制类型的属性,以下额外的约束条件适用。

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

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

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

下面的例子是一个二进制属性,使用base64编码的文本。

dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk

布尔型

一个布尔类型的属性可以存储真或假。

空值

Null代表一个未知或未定义状态的属性。

文件类型

文件类型是列表和地图。这些数据类型可以相互嵌套,以表示复杂的数据结构,最深可达32层。

列表或地图中的值的数量没有限制,只要包含这些值的项目符合DynamoDB的项目大小限制(400KB)。

如果一个属性不用于表或索引键,该属性值可以是一个空字符串或空二进制值。一个属性值不能是一个空的集合(字符串集、数字集或二进制集),然而,空的列表和地图是允许的。在列表和地图中允许空的字符串和二进制值。欲了解更多信息,请参见属性。

列表

一个列表类型的属性可以存储一个有序的值集合。列表用方括号括起来。[ … ]

列表类似于一个JSON数组。对可以存储在列表元素中的数据类型没有限制,而且列表元素中的元素不一定是同一类型。

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

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

字典

一个字典类型的属性可以存储一个无序的名-值对集合。地图是用大括号括起来的。{ … }

一个字典类似于一个JSON对象。对可以存储在地图元素中的数据类型没有限制,而且字典中的元素不一定是同一类型。

字典是在DynamoDB中存储JSON文档的理想选择。下面的例子显示了一个包含一个字符串、一个数字和一个包含另一个地图的嵌套列表的字典。

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

集合

DynamoDB支持代表数字、字符串或二进制值集合的类型。一个集合内的所有元素必须是同一类型。例如,一个Number Set类型的属性只能包含数字;String Set只能包含字符串;以此类推。

一个集合中的值的数量没有限制,只要包含这些值的项目适合DynamoDB的项目大小限制(400KB)。

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

下面的例子显示了一个字符串集,一个数字集,和一个二进制集。

["Black", "Green", "Red"]

[42.2, -19, 7.5, 3.14]

["U3Vubnk=", "UmFpbnk=", "U25vd3k="]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值