DynamoDB Streams
变更捕获、Lambda 触发概念。
30 分钟
DynamoDB Streams
DynamoDB Streams 捕获表中 Item 级变更(INSERT / MODIFY / REMOVE),按时间排序推送给 Lambda 等消费者,实现 变更数据捕获(CDC)。
学习目标
- 理解 Stream 记录结构与视图类型
- 掌握 Stream → Lambda 的典型链路
- 对照 MySQL binlog、MongoDB Change Streams
核心内容
启用 Stream
aws dynamodb update-table \
--table-name UserProgress \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES
| StreamViewType | 内容 |
|---|---|
| KEYS_ONLY | 仅主键 |
| NEW_IMAGE | 变更后 Item |
| OLD_IMAGE | 变更前 Item |
| NEW_AND_OLD_IMAGES | 前后完整对比 |
事件结构(概念)
{
"eventName": "MODIFY",
"dynamodb": {
"Keys": { "PK": "USER#u_1001", "SK": "LESSON#ddb-crud" },
"NewImage": { "action": "complete", "viewCount": 3 },
"OldImage": { "action": "view", "viewCount": 2 }
}
}
Lambda 函数(aws-essentials)订阅 Stream ARN,批量处理 Records。
典型用途
UserProgress 写入/更新
↓ Stream
Lambda 聚合 → 写入统计表 / 推 SNS / 同步 OpenSearch
↓
MySQL cf_track 不受影响(权威数据仍走 JPA)
- 异步 denormalize:进度变更更新「课程完成人数」计数
- 审计日志:OLD/NEW 对比写 S3
- 跨系统同步:推送到 MySQL 只读副本(最终一致)
对照 mongodb-essentials Change Streams;MySQL 用 binlog + Debezium(sql-essentials 进阶话题)。
注意事项
- Stream 保留约 24 小时,消费者需幂等
- 与全局表、事务写入的 ordering 需单独评估
- 不要用 Stream 替代主库事务;
cf_track元数据变更仍走 MySQL
练习
- 为 UserProgress 启用 NEW_AND_OLD_IMAGES Stream,查看 Stream ARN
- 设计 Lambda 伪代码:MODIFY 时若 action 变为 complete 则 increment 计数
- 对比 MongoDB Change Stream 与 DynamoDB Stream 的触发粒度