数据模型
Table、Item、Attribute;与 MongoDB 文档对照。
35 分钟
数据模型
DynamoDB 用 Table → Item → Attribute 组织数据。Item 类似 MongoDB 文档,但 必须含主键,且 schema 灵活(除键外无固定列)。
学习目标
- 掌握 Table、Item、Attribute 三层结构
- 理解 DynamoDB 类型系统与 JSON 映射
- 对照 MongoDB 文档模型与 MySQL 表行
核心内容
三层结构
| 层级 | 含义 | 对照 |
|---|---|---|
| Table | 逻辑容器,类似 Collection/表 | MongoDB Collection / MySQL Table |
| Item | 一条记录,最多 400 KB | MongoDB Document / MySQL Row |
| Attribute | 键值对字段 | Document 字段 / Column |
{
"PK": { "S": "TRACK#mongodb-essentials" },
"SK": { "S": "META" },
"title": { "S": "MongoDB 入门" },
"lessonCount": { "N": "12" },
"tags": { "SS": ["nosql", "document"] }
}
CLI 用类型前缀(S/N/SS 等);SDK v2 可自动映射 Java 类型。
类型与 Java 映射
// AWS SDK v2 Enhanced Client 注解示例
@DynamoDbBean
public class TrackMeta {
private String pk; // PK = TRACK#<slug>
private String sk; // SK = META
private String title;
private Integer lessonCount;
@DynamoDbPartitionKey
public String getPk() { return pk; }
@DynamoDbSortKey
public String getSk() { return sk; }
}
对照 mongodb-essentials:@Document 无强制主键结构;DynamoDB 主键设计决定一切查询能力(见 ddb-keys)。
单表设计(Single-Table Design)
PK=USER#u_1001 SK=PROFILE → 用户资料
PK=USER#u_1001 SK=LESSON#xxx → 课时进度
PK=TRACK#mongo SK=META → 课程元数据(实验用,非 cf_track 权威)
MySQL 会拆成 user、user_progress、cf_track 多表;DynamoDB 常用 一张表 + 复合键 承载多种实体。cf_track 仍留 MySQL,实验表名如 CodeRoadMapLab。
练习
- 用 AWS CLI
describe-table查看某表的 KeySchema - 设计 3 种 Item 的 PK/SK 前缀(USER、TRACK、LESSON)