能否使用partition key查询AWS DynamoDB单表的全部条目
核心结论
DynamoDB 的 Query 操作强制要求指定 partition key 的精确值,仅支持查询单个 partition 内的所有数据。你当前的用户表仅以user_id作为唯一主键(无 sort key),每个用户对应独立的 partition,原生结构下无法直接通过 Query 实现全量用户拉取,Scan 是该结构下官方支持的全量读取方案。
若必须用 Query 实现的改造方案
如果你的业务场景对全量拉取的性能、成本有明确要求,需要用 Query 替代 Scan,可以通过新增全局二级索引(GSI)实现:
- 给所有用户条目新增一个固定值的公共属性,例如命名为
record_type,所有用户的该属性值统一设置为user - 以
record_type作为 GSI 的 partition key,user_id作为 GSI 的 sort key 创建新的全局二级索引,索引投影属性指定为你需要的user_id、first_name、last_name三个字段 - 后续对该 GSI 发起
Query操作,指定record_type = 'user'作为查询条件,即可拉取到所有用户的对应字段,也可直接搭配分页参数使用
场景适配说明
- 上述 GSI 方案仅适合用户量较小的场景:单个 DynamoDB partition 最大容量为10GB、默认最大支持3000读容量单位/1000写容量单位,所有用户归集到同一个 GSI partition 会产生热点问题,用户量超过阈值后性能会严重下降
- 若你的用户规模不大、全量拉取频率不高,直接使用原生
Scan搭配ProjectionExpression指定返回字段即可,改造成本最低 - 全量拉取数据量较大时,无论是
Scan还是基于GSI的Query,都建议添加Limit参数分页拉取,避免单次请求数据量过大导致超时
内容的提问来源于stack exchange,提问作者smriti
相关产品推荐
相关产品推荐

