DynamoDB简介 #
一、什么是DynamoDB #
Amazon DynamoDB 是 AWS 提供的一种完全托管的 NoSQL 数据库服务,可提供快速、可预测的性能以及无缝的可扩展性。
1.1 发展历史 #
text
2004年 Amazon内部开始开发Dynamo系统
2012年 AWS正式发布DynamoDB服务
2014年 引入全局二级索引
2017年 支持ACID事务
2018年 发布按需容量模式
2019年 支持全局表多区域复制
2022年 增强事务支持,支持条件写入
2024年 持续优化性能和功能
1.2 核心定位 #
DynamoDB 定位为:
- 完全托管:无需管理服务器、存储、网络
- 无服务器:自动扩展,按使用付费
- 高性能:个位数毫秒级延迟
- 高可用:跨多个AZ自动复制
二、核心特点 #
2.1 完全托管 #
| 特性 | 说明 |
|---|---|
| 无需管理基础设施 | AWS负责硬件、网络、存储管理 |
| 自动备份 | 支持按需备份和时间点恢复 |
| 自动扩展 | 自动调整容量应对流量变化 |
| 安全管理 | 内置加密、IAM集成 |
2.2 高性能 #
text
性能指标:
├── 读取延迟:个位数毫秒(通常<10ms)
├── 写入延迟:个位数毫秒
├── 吞吐量:每表可支持>10万亿请求/天
└── 数据量:单表可存储无限数据
2.3 无限扩展 #
text
扩展能力:
├── 存储容量:无限制
├── 读写吞吐量:自动扩展或手动配置
├── 并发连接:无限制
└── 表数量:默认256个/区域(可申请提高)
2.4 高可用与持久性 #
| 特性 | 说明 |
|---|---|
| 多AZ复制 | 数据自动复制到3个可用区 |
| SLA | 99.99%可用性 |
| 持久性 | 99.999999999%(11个9) |
| 全球部署 | 支持全局表多区域复制 |
三、与传统数据库对比 #
3.1 与关系型数据库对比 #
| 特性 | DynamoDB | MySQL/PostgreSQL |
|---|---|---|
| 数据模型 | 键值/文档 | 关系表 |
| Schema | 无Schema | 固定Schema |
| 扩展方式 | 水平扩展 | 垂直扩展为主 |
| 事务 | 支持有限事务 | 完整ACID |
| 查询 | 主键查询为主 | 复杂SQL查询 |
| JOIN | 不支持 | 支持 |
| 管理 | 完全托管 | 需要管理 |
3.2 与其他NoSQL对比 #
| 特性 | DynamoDB | MongoDB | Redis |
|---|---|---|---|
| 部署方式 | 完全托管 | 自建/Atlas | 自建/云托管 |
| 数据模型 | 文档/键值 | 文档 | 键值 |
| 查询能力 | 中等 | 强大 | 简单 |
| 扩展性 | 自动 | 手动分片 | 手动 |
| 一致性 | 最终/强一致 | 可配置 | 强一致 |
| 适用场景 | 大规模生产 | 灵活开发 | 缓存/会话 |
四、应用场景 #
4.1 适用场景 #
text
最佳实践场景:
├── 高吞吐量应用
│ ├── 游戏排行榜
│ ├── 物联网数据
│ └── 实时分析
├── 低延迟访问
│ ├── 用户会话存储
│ ├── 购物车
│ └── 实时推荐
├── 大规模数据
│ ├── 日志存储
│ ├── 事件追踪
│ └── 元数据管理
└── 无服务器架构
├── API后端
├── 移动应用
└── 微服务
4.2 典型案例 #
电商购物车 #
json
{
"PK": "USER#12345",
"SK": "CART#2024-01-01",
"items": [
{
"productId": "PROD001",
"name": "iPhone 15",
"price": 999,
"quantity": 1
}
],
"totalPrice": 999,
"lastUpdated": "2024-01-01T10:00:00Z"
}
游戏排行榜 #
json
{
"PK": "GAME#BATTLE_ROYALE",
"SK": "SCORE#99999#USER#12345",
"userId": "12345",
"score": 99999,
"rank": 1,
"timestamp": "2024-01-01T10:00:00Z"
}
物联网数据 #
json
{
"PK": "DEVICE#SENSOR001",
"SK": "2024-01-01T10:00:00",
"temperature": 25.5,
"humidity": 60,
"battery": 85,
"location": {
"lat": 39.9042,
"lng": 116.4074
}
}
4.3 不适用场景 #
text
不建议使用场景:
├── 复杂关系查询(多表JOIN)
├── 复杂事务(跨多表事务)
├── 即席查询(Ad-hoc查询)
├── 数据量小且稳定
└── 需要SQL兼容性
五、核心优势 #
5.1 开发效率 #
text
优势:
├── 无需管理基础设施
├── 自动处理扩展
├── 内置安全功能
├── 与AWS服务深度集成
└── 灵活的数据模型
5.2 成本效益 #
| 模式 | 计费方式 | 适用场景 |
|---|---|---|
| 按需容量 | 按请求计费 | 流量不可预测 |
| 预置容量 | 按RCU/WCU计费 | 流量可预测 |
| Auto Scaling | 自动调整容量 | 流量有波动 |
5.3 生态系统 #
text
AWS集成:
├── Lambda:触发器处理数据变更
├── API Gateway:直接集成DynamoDB
├── CloudWatch:监控和告警
├── S3:数据导入导出
├── Kinesis:流式数据处理
└── EMR:大数据分析
六、版本演进 #
6.1 重要里程碑 #
| 年份 | 功能 | 说明 |
|---|---|---|
| 2012 | 发布 | 基础键值存储 |
| 2014 | GSI | 全局二级索引 |
| 2015 | Streams | 数据变更流 |
| 2016 | TTL | 自动过期删除 |
| 2017 | 事务 | ACID事务支持 |
| 2018 | 按需模式 | 按请求计费 |
| 2019 | 全局表 | 多区域复制 |
6.2 最新特性 #
text
2024年新特性:
├── 增强的事务支持
├── 更大的项目大小限制
├── 改进的查询性能
├── 增强的备份功能
└── 更好的成本优化工具
七、学习路线建议 #
7.1 入门阶段 #
text
第1周:
├── 了解NoSQL基础概念
├── 创建AWS账户
├── 使用控制台创建表
└── 基本的CRUD操作
7.2 进阶阶段 #
text
第2-3周:
├── 理解主键设计
├── 学习Query和Scan
├── 掌握索引设计
└── 使用SDK开发
7.3 高级阶段 #
text
第4周+:
├── 事务处理
├── Streams应用
├── 全局表部署
└── 性能优化
八、总结 #
DynamoDB 是构建现代云原生应用的理想数据库选择:
| 优势 | 说明 |
|---|---|
| 托管服务 | 无需运维,专注开发 |
| 高性能 | 毫秒级延迟 |
| 可扩展 | 自动扩展,无限容量 |
| 高可用 | 多AZ复制,99.99%可用性 |
| 安全 | 内置加密,IAM集成 |
下一步,让我们学习如何搭建DynamoDB开发环境!
最后更新:2026-03-27