CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
DynamoDB 入门/课时/GSI 与 LSI
RawBlame
课时目录12 节

DynamoDB 入门

  1. 01DynamoDB 是什么
  2. 02数据模型
  3. 03分区键与排序键
  4. 04CRUD 与条件写
  5. 05GSI 与 LSI
  6. 06Query 与 Scan
  7. 07DynamoDB Streams
  8. 08Spring 集成
  9. 09容量模式
  10. 10时序库对照
  11. 11DynamoDB vs MySQL
  12. 12综合练习

GSI 与 LSI

二级索引、查询模式。

35 分钟

GSI 与 LSI

主键外的查询需求靠 二级索引 解决:GSI(Global Secondary Index) 独立分区键,跨表投影;LSI(Local Secondary Index) 同 PK、不同 SK,创建表时固定。

学习目标

  • 区分 GSI 与 LSI 的适用场景
  • 理解投影类型(KEYS_ONLY / INCLUDE / ALL)
  • 为「按课时查进度」设计 GSI

核心内容

GSI vs LSI

GSILSI
PK可与基表不同必须与基表相同
创建时机随时添加仅建表时
容量独立 RCU/WCU共享基表分区
数量每表 20 个每表 5 个
# 创建 GSI:按课时 slug 反查用户进度
aws dynamodb update-table \
  --table-name UserProgress \
  --attribute-definitions \
      AttributeName=GSI1PK,AttributeType=S \
      AttributeName=GSI1SK,AttributeType=S \
  --global-secondary-index-updates '[{
    "Create": {
      "IndexName": "ByLesson",
      "KeySchema": [
        {"AttributeName": "GSI1PK", "KeyType": "HASH"},
        {"AttributeName": "GSI1SK", "KeyType": "RANGE"}
      ],
      "Projection": {"ProjectionType": "ALL"},
      "ProvisionedThroughput": {"ReadCapacityUnits": 5, "WriteCapacityUnits": 5}
    }
  }]'

On-Demand 模式可省略 ProvisionedThroughput(见 ddb-capacity)。

写入时维护 GSI 键

{
  "PK": "USER#u_1001",
  "SK": "LESSON#ddb-crud",
  "GSI1PK": "LESSON#ddb-crud",
  "GSI1SK": "USER#u_1001",
  "action": "complete"
}

Query GSI1PK = LESSON#ddb-crud → 该课所有用户进度。MySQL 等价:INDEX(lesson_slug) + WHERE lesson_slug = ?(sql-essentials)。

设计原则

  • 一个访问模式一个索引,避免「万能 GSI」
  • 投影 INCLUDE 只带必要字段,降低存储与写入放大
  • GSI 写入与基表 最终一致(通常毫秒级延迟)

对照 mongodb-essentials:MongoDB 任意字段建索引即可查;DynamoDB 需 预定义 索引键并随 Item 写入。

练习

  • 为 UserProgress 设计 ByTrack GSI(按 trackSlug 查进度)
  • 说明 GSI 投影选 KEYS_ONLY 时 Query 返回什么
  • 对比 PostgreSQL 二级索引(postgresql-essentials)与 GSI 一致性差异
  • 小结

    GSI = 换一套 PK/SK 支撑新查询模式;先列访问模式再建索引。 下一课 Query 与 Scan。

    加载本节练习…
    ← 上一课CRUD 与条件写下一课 →Query 与 Scan