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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
DynamoDB 入门/课时/Query 与 Scan
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综合练习

Query 与 Scan

避免全表 Scan;分页 LastEvaluatedKey。

30 分钟

Query 与 Scan

Query 按主键或 GSI 键高效读取;Scan 全表遍历,成本高、应尽量避免。DynamoDB 没有 SQL 式任意 WHERE。

学习目标

  • 掌握 Query 的 KeyCondition 与 FilterExpression
  • 理解分页 LastEvaluatedKey 与 Limit
  • 知道何时 Scan 可接受、如何控成本

核心内容

Query(推荐)

aws dynamodb query \
  --table-name UserProgress \
  --key-condition-expression "PK = :pk AND begins_with(SK, :prefix)" \
  --expression-attribute-values '{
    ":pk": {"S": "USER#u_1001"},
    ":prefix": {"S": "LESSON#"}
  }' \
  --scan-index-forward false \
  --limit 10
参数作用
KeyConditionExpression必填,仅主键/GSI 键条件
FilterExpression可选,键条件后再过滤非键属性
ScanIndexForwardfalse = SK 降序
ExclusiveStartKey分页起点(上一页 LastEvaluatedKey)

Java Query 分页

QueryRequest req = QueryRequest.builder()
    .tableName("UserProgress")
    .keyConditionExpression("PK = :pk")
    .expressionAttributeValues(Map.of(
        ":pk", AttributeValue.builder().s("USER#u_1001").build()))
    .limit(20)
    .build();

QueryResponse resp = client.query(req);
// 若 resp.lastEvaluatedKey() 非空,放入 exclusiveStartKey 继续

Scan(慎用)

aws dynamodb scan \
  --table-name UserProgress \
  --filter-expression "#a = :complete" \
  --expression-attribute-names '{"#a":"action"}' \
  --expression-attribute-values '{":complete":{"S":"complete"}}'

Scan 读 每一分区每一 Item,再应用 Filter——大表极贵。报表/analytics 导出到 S3 + Athena,或同步到 postgresql-essentials 只读副本。

与 MongoDB / SQL 对照

操作DynamoDBMongoDBMySQL
主键查GetItemfindOne({_id})PK lookup
索引范围Query + GSIfind({field})WHERE + INDEX
全表Scan(贵)
find({})
SELECT *(可控)

cf_track 列表查询在 MySQL 用 ORDER BY + 索引;DynamoDB 需 预设计 SK 排序 或 GSI。

练习

  • Query 某用户全部 LESSON# 前缀进度,SK 降序取 Top 5
  • 实现分页:循环 Query 直到 LastEvaluatedKey 为空
  • 说明 FilterExpression 为何不减少 RCU 消耗

小结

Query 按键读、Scan 全表扫;生产路径 Query + GSI,Scan 仅小表或离线。 下一课 DynamoDB Streams。

加载本节练习…
← 上一课GSI 与 LSI下一课 →DynamoDB Streams