核心用法
DynamoDB 技能是一套面向 AWS 无服务器数据库的完整设计指南,涵盖从表结构规划到高级查询模式的全部关键环节。
关键设计原则
- 分区键策略:高基数键值实现负载均衡,热点分区通过复合键或随机后缀缓解
- 单表设计模式:前缀标识实体类型(
USER#123、ORDER#456),排序键重载支持多维度查询 - 访问优先建模:严格围绕查询模式设计,而非关系范式
查询机制
| 操作 | 性能特征 | 使用场景 |
|:---|:---|:---|
| **Query** | O(分区项目数),高效 | 已知分区键的精确/范围查询 |
| **Scan** | 全表扫描,昂贵 | 几乎不应直接使用 |
| **GSI** | 最终一致,独立容量 | 替代访问路径 |
高级特性
- 全局二级索引(GSI):支持稀疏索引技巧,仅含特定属性的项目进入索引
- 分页机制:1MB 返回上限,
LastEvaluatedKey驱动循环获取 - 一致性选项:默认最终一致,
ConsistentRead实现强一致(2 倍容量消耗) - 乐观锁与事务:
ConditionExpression防止竞态条件,TransactWriteItems提供原子多项目操作
容量与成本管理
- On-Demand:自动扩缩,适合不可预测负载
- Provisioned:预设容量更经济,需配合自动扩缩策略
- GSI 独立计费:每个索引需单独配置或支付请求费用
显著优点
- ✅ 模式实用主义:强调从访问模式出发,而非教条式单表设计
- ✅ 反模式警示:明确标记 Scan、FilterExpression 误用等常见陷阱
- ✅ 生产级细节:覆盖 BatchWriteItem 非原子性、TTL 延迟删除等边缘行为
- ✅ 成本意识:对比 On-Demand 与 Provisioned,提示 GSI 容量独立消耗
局限性与注意事项
- ⚠️ AWS 专属:全部特性绑定 DynamoDB 实现,不适用于其他 NoSQL 数据库
- ⚠️ 概念密集:单表设计、排序键重载等模式对 SQL 背景开发者学习曲线陡峭
- ⚠️ 容量规划复杂:Provisioned 模式需理解分区吞吐量限制(3000 RCU / 1000 WCU 每分区)
- ⚠️ 最终一致性限制:GSI 无强一致选项,写后读场景需显式处理
适合人群
- 后端工程师:构建高吞吐、低延迟的无服务器应用
- 系统架构师:评估 NoSQL 方案,设计多租户数据隔离策略
- 云迁移团队:从关系型数据库向 DynamoDB 迁移的建模转换
常规风险
- 热点分区:设计不当导致单一分区键过载,引发限流
- 容量耗尽:Provisioned 模式下
ProvisionedThroughputExceededException需退避重试 - GSI 成本失控:未预见的查询模式导致索引数量与费用膨胀
- Item 大小超限:400KB 限制需配合 S3 存储大对象,引入额外一致性考量