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

DynamoDB单表设计:如何建模一对多关系满足多App最新版本查询需求

DynamoDB单表设计调整方案

核心思路

利用你当前App总数最多仅数百个的规模优势,通过冗余每条App的最新版本、最新已发布版本两条专属记录+稀疏GSI的方式,低成本满足所有访问模式。

调整步骤

1. 基础表结构补充

原有表结构无需修改,仅需在每次新增版本、切换IsReleased状态时,同步更新对应App的两条冗余记录:

  • 最新版本记录:pk和对应App的defaults记录一致,sk固定为latest_version,冗余存储该App当前最高版本号的全量版本属性
  • 最新已发布版本记录:pk和对应App的defaults记录一致,sk固定为latest_released_version,冗余存储该App当前版本号最高且IsReleased=1的全量版本属性
    同时给这两条冗余记录新增两个属性:
  • platform:从pk中拆分出的平台标识,取值为ios/android
  • bundle_id:从pk中拆分出的应用包名

2. 新增两个稀疏GSI

GSI编号GSI PKGSI SK适用场景
GSI1platformbundle_id仅latest_version记录写入
GSI2platformbundle_id仅latest_released_version记录写入

所有访问模式实现方式

    1. 列出所有App的最新版本:直接Scan GSI1,总数据量最多数百条,毫秒级返回
    1. 列出指定平台下所有App的最新版本:Query GSI1,PK=指定平台(ios/android)
    1. 列出所有IsReleased=1的App的最新版本:直接Scan GSI2
    1. 列出指定平台下所有IsReleased=1的App的最新版本:Query GSI2,PK=指定平台
    1. 获取指定App的最新版本:直接GetItem基础表,pk=App唯一标识,sk=latest_version
    1. 获取指定App的最新已发布版本:直接GetItem基础表,pk=App唯一标识,sk=latest_released_version
    1. 获取指定App的所有版本:Query基础表,pk=App唯一标识,sk以version_为前缀,按sk降序排序
    1. 获取指定App的所有已发布版本:Query基础表,pk=App唯一标识,sk以version_为前缀,增加FilterExpression IsReleased=1,或额外新增GSI(PK=App标识,SK=版本号,仅IsReleased=1的版本写入)避免过滤
    1. 获取指定App的Default属性:直接GetItem基础表,pk=App唯一标识,sk=defaults

适配约束说明

  • 冗余记录总数量最多仅为App总数的2倍,存储成本几乎可忽略
  • 版本发布、IsReleased状态切换时仅需额外1-2次写操作,开销极低
  • 高频的已发布版本相关查询均直接走索引或单点查询,性能满足要求
  • 即使后续App规模扩容到数千个,Scan操作的性能依然足够

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:03