导入
数据是如何存储的
了解 DynamoDB 如何存储信息。
DynamoDB 以一种比其他关系型数据库更简单高效的方式管理数据。它提供了可用于管理数据库中信息的数据类型和表示方式。
存储结构
DynamoDB 是一种强大的数据库,它在存储信息时不会创建实体之间的关联。本质上,它仅涉及一个表来存储数据。每个表至少包含以下四个组成部分:
- 项(Items):这些是存储的记录。
- 属性(Attributes):它们代表每条记录所拥有的列。
- 分区键(Partition key):作为记录的标识符,必须在整个表中唯一。
- 排序键(Sort key):该键为可选字段,顾名思义,用于对表中存储的信息进行排序。
下图展示了 DynamoDB 中表的结构:
...
Table in DynamoDB
需要特别说明的是,DynamoDB 是无模式的(schemaless),这意味着可以以任意格式存储信息,某些记录可能拥有其他记录没有的属性。
...
Table with different attributes
上图展示了记录在格式和属性方面可以各不相同。
DynamoDB 支持的数据类型
DynamoDB 提供了一些内置数据类型,可用于存储信息。这些类型分为三大类,每类又包含若干子类型。三大类数据类型如下:
- 文档类型:这类字段可以存储 JSON 文档。需要注意的是,文档大小最多可达 400 KB。
- 标量类型:这类字段仅存储单一值,例如字符串、数字等。
- 集合类型:这类字段是标量类型的集合,其元素类型可以是字符串、数字或二进制数据。集合大小最大可达 400 KB。
文档类型
文档通过两种结构形式表示:
- 列表(List):这种结构按保存顺序存储不同元素。需要注意的是,同一列表中可以包含不同类型的数据。以下代码示例展示了一个列表的结构:
1["RWR1Y2F0aXZlIGNvdXJzZSBhYm91dCBEeW5hbW9EQg==","Educative",1234]
- 映射(Map):用于存储键值对,可通过键查找对应的值。主要限制是嵌套层级不得超过 32 层。以下代码示例展示了一个映射的结构:
1{ 2 "Companies": "education", 3 "records": [ 4 { 5 "company": "educative", 6 "students": 23345 7 }, 8 { 9 "company": "Edu", 10 "students": 34 11 } 12 ] 13}
标量类型
- 字符串(String):以 UTF-8 格式存储数据,最大支持 400 KB。
- 数字(Number):包括正数和负数。根据 AWS 官方说明,支持的范围如下:
- 正数范围:1E-130 到 9.9999999999999999999999999999999999999E+125
- 负数范围:-9.9999999999999999999999999999999999999E+125 到 -1E-130
- 二进制(Binary):可用于存储任意类型的二进制数据,如图片、文件等。此类字段的最大大小为 400 KB。
- 布尔值(Boolean):存储 true 或 false。空值(Null):表示无值。
集合类型
集合类型可包含字符串、数字或二进制数据。以下是一些集合的示例:
1["Educative","DynamoDb","Course"]
1[1234,456,6789]
1["RWR1Y2F0aXZlIGNvdXJzZSBhYm91dCBEeW5hbW9EQg==","RWR1Y2F0aXZlIGAWQS5dXJzZSBhYm91dCBEeW5hbW9EQg==","RWR1BNVCZS3lIGNvdXJzZSBhYm91dCBEeW5hbW9EQg=="]
示例表示
以下 JSON 文档展示了 DynamoDB 如何存储信息。这种表示形式在使用 AWS API 时会在系统间来回传递。
1{ 2 "partitionKey":"1", 3 "sortKey": "order", 4 "companies": "education", 5 "records": [ 6 { 7 "company": "educative", 8 "students": 23345 9 }, 10 { 11 "company": "Edu", 12 "students": 34 13 } 14 ], 15 "PhoneNumbers": [2223334444, 9995551234], 16 "image": "RWR1Y2F0aXZlIGNvdXJzZSBhYm91dCBEeW5hbW9EQg==", 17 "active": true 18}
核心要点
DynamoDB 将信息存储在一个无模式的表中。该表可存储简单的数据(如字符串或数字),也可存储复杂的数据结构(如映射或集合)。