You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB单表设计:多关联资源与复杂访问模式实现求助

DynamoDB单表设计重构方案(职位发布场景)

主表核心结构

PK (Hash Key)SK (Sort Key)TitlePublish DateStatusCompany IDRequired Certificates...
COMPANY#12345COMPANY#METAMicrosoft--12345-...
JOB#7890JOB#DETAILSDeveloper2023-03-28taking applications12345["AWS Certified", "Java"]...
JOB#7891JOB#DETAILSForklift Operator2023-04-01reviewing applications12345["Forklift certified"]...

针对性GSI设计(覆盖所有访问模式)

1. GSI1:按公司+发布日期访问

  • GSI1主键(PK):COMPANY#<Company ID>
  • GSI1排序键(SK):PUBLISH_DATE#<YYYY-MM-DD>#JOB#<Job ID>
  • 包含字段:所有职位核心属性

查询逻辑:

  • 按公司获取职位:GSI1-PK = 'COMPANY#12345',默认按发布日期升序排列;如需倒序,设置ScanIndexForward = false
  • 按公司+日期范围获取职位:GSI1-PK = 'COMPANY#12345' AND SK BETWEEN 'PUBLISH_DATE#2023-03-01' AND 'PUBLISH_DATE#2023-03-31'

2. GSI2:按状态+发布日期访问

  • GSI2主键(PK):STATUS#<Status Value>
  • GSI2排序键(SK):PUBLISH_DATE#<YYYY-MM-DD>#JOB#<Job ID>
  • 包含字段:所有职位核心属性

查询逻辑:

  • 按状态获取职位:GSI2-PK = 'STATUS#taking applications',支持按发布日期排序或筛选日期范围

3. GSI3:按证书+发布日期访问

  • GSI3主键(PK):CERT#<Certificate Name>
  • GSI3排序键(SK):PUBLISH_DATE#<YYYY-MM-DD>#JOB#<Job ID>
  • 注意:一个职位若需多个证书,要为每个证书单独写入一条GSI3记录(比如JOB#7890对应两条GSI3条目,PK分别为CERT#AWS Certified和CERT#Java)

查询逻辑:

  • 按所需证书获取职位:GSI3-PK = 'CERT#Forklift certified',可按发布日期排序

4. GSI4:全局职位列表(按发布日期)

  • GSI4主键(PK):ALL_JOBS
  • GSI4排序键(SK):PUBLISH_DATE#<YYYY-MM-DD>#JOB#<Job ID>
  • 包含字段:所有职位核心属性

查询逻辑:

  • 获取所有职位:GSI4-PK = 'ALL_JOBS',避免全表扫描,效率更高
  • 按发布日期获取职位:GSI4-PK = 'ALL_JOBS' AND SK BETWEEN 'PUBLISH_DATE#2023-03-01' AND 'PUBLISH_DATE#2023-03-31'

单个职位查询

直接用主表精准查询:

PK = 'JOB#7890' AND SK = 'JOB#DETAILS'

无需额外GSI,查询效率拉满。

设计优势

  • 每个访问模式都对应精准的GSI查询,避免低效的全表扫描或过滤
  • 排序键包含发布日期+职位ID,既支持按日期排序,又保证排序键的唯一性(避免同日期职位的键冲突)
  • 公司元数据与职位数据共存于单表,完全符合DynamoDB单表设计的核心原则

内容的提问来源于stack exchange,提问作者nicks6853

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:25:38