DynamoDB 的索引、流与优化

在 AWS 中使用数据存储

Dunieski Otano

AWS Solutions Architect

无法完成的查询

  • 表:userId(分区键),orderDate(排序键)
  • 需求:按邮箱地址查找订单
  • 问题:无法查询非键属性
  • 解决:全局二级索引(GSI)
    • 索引支持多种访问模式

gsi

在 AWS 中使用数据存储

全局二级索引(GSI)

  • 与基表不同的分区键
  • 可在建表后随时添加
  • 仅最终一致读取
  • 用途:查询非主键属性

gsi_1

在 AWS 中使用数据存储

本地二级索引(LSI)

  • 相同分区键,不同排序键
  • 必须在建表时创建
  • 支持强一致读取
  • 用途:分区内的替代排序

lsi

在 AWS 中使用数据存储

GSI 与 LSI:何时使用

  • GSI:分区键不同,可随时添加,最终一致
  • LSI:分区键相同,建表时创建,强一致
  • 最常用:GSI,灵活的访问模式

选择 gsi 或 lsi

在 AWS 中使用数据存储

DynamoDB 的数据序列化

  • 问题:DynamoDB 不存储 Python 对象
  • 解决:序列化为 JSON 或二进制
  • JSON:简单数据(字典、列表)- json.dumps()
  • Base64:二进制数据(图像、令牌)

序列化

在 AWS 中使用数据存储

用于变更数据捕获的 DynamoDB Streams

  • Streams:表更改的有序日志
  • 捕获:插入、更新、删除
  • 用途:审计日志、复制、触发器
  • 用 Lambda 处理以实时响应

流

在 AWS 中使用数据存储

自动过期的生存时间(TTL)

  • TTL:到期后自动删除项
  • 在 TTL 属性中设置 Unix 时间戳
  • 适用:会话、临时令牌、缓存
  • TTL 删除不计费

ttl

在 AWS 中使用数据存储

索引投影类型与查询性能

  • KEYS_ONLY:仅键属性,体积最小
  • INCLUDE:键 + 指定属性
  • ALL:全部属性,体积最大,无需回表
  • 权衡:存储成本 vs 查询性能

索引

在 AWS 中使用数据存储

批量操作与事务

  • BatchGetItem:读取最多 100 项,最大 16MB
  • BatchWriteItem:写入最多 25 项
  • TransactWriteItems:跨最多 100 项的 ACID
  • 用途:效率(批量)或一致性(事务)

批量

在 AWS 中使用数据存储

让我们练习吧!

在 AWS 中使用数据存储

Preparing Video For Download...