DynamoDB 的索引、流与优化
在 AWS 中使用数据存储
Dunieski Otano
AWS Solutions Architect
无法完成的查询
- 表:userId(分区键),orderDate(排序键)
- 需求:按邮箱地址查找订单
- 问题:无法查询非键属性
- 解决:全局二级索引(GSI)
全局二级索引(GSI)
- 与基表不同的分区键
- 可在建表后随时添加
- 仅最终一致读取
- 用途:查询非主键属性
本地二级索引(LSI)
- 相同分区键,不同排序键
- 必须在建表时创建
- 支持强一致读取
- 用途:分区内的替代排序

GSI 与 LSI:何时使用
- GSI:分区键不同,可随时添加,最终一致
- LSI:分区键相同,建表时创建,强一致
- 最常用:GSI,灵活的访问模式
DynamoDB 的数据序列化
- 问题:DynamoDB 不存储 Python 对象
- 解决:序列化为 JSON 或二进制
- JSON:简单数据(字典、列表)- json.dumps()
- Base64:二进制数据(图像、令牌)
用于变更数据捕获的 DynamoDB Streams
- Streams:表更改的有序日志
- 捕获:插入、更新、删除
- 用途:审计日志、复制、触发器
- 用 Lambda 处理以实时响应
自动过期的生存时间(TTL)
- TTL:到期后自动删除项
- 在 TTL 属性中设置 Unix 时间戳
- 适用:会话、临时令牌、缓存
- TTL 删除不计费
索引投影类型与查询性能
- KEYS_ONLY:仅键属性,体积最小
- INCLUDE:键 + 指定属性
- ALL:全部属性,体积最大,无需回表
- 权衡:存储成本 vs 查询性能
批量操作与事务
- BatchGetItem:读取最多 100 项,最大 16MB
- BatchWriteItem:写入最多 25 项
- TransactWriteItems:跨最多 100 项的 ACID
- 用途:效率(批量)或一致性(事务)
Preparing Video For Download...