DynamoDB如何实现可选主键并设计站点摄像头关联存储表结构?
DynamoDB 表结构设计方案
现有方案合理性验证
你提出的主表设置SITE_ID为分区键、CAMERA_ID为排序键,无归属站点的摄像头填充noSite作为占位分区键的方案,属于DynamoDB处理无归属数据的常规实现,对你的场景完全适用,并非临时方案。你的数据规模最大仅1万条,即使noSite分区下最多存1000条数据,完全不会触发热分区问题,不用额外优化。
基础表结构
- 主表分区键(PK):
SITE_ID - 主表排序键(SK):
CAMERA_ID - 通用属性:
enabled(布尔类型)、摄像头其他业务属性 - 无归属站点的摄像头统一设置
SITE_ID = 'noSite'
三类查询需求适配
1. 查询指定站点下的所有摄像头
直接调用主表Query接口,指定SITE_ID为目标站点ID即可获取全部结果,无归属摄像头直接查询SITE_ID = 'noSite'即可。
2. 查询指定ID的摄像头信息
新增一个全局二级索引(GSI),设置该GSI的分区键为CAMERA_ID,无需排序键。查询时直接调用该GSI的Query接口,传入目标摄像头ID即可精确匹配结果。因数据规模极小,该GSI的额外存储成本几乎可以忽略。
3. 查询所有enabled === true的摄像头
直接调用主表Scan接口,添加FilterExpression = 'enabled = :trueVal'过滤条件即可。1万条数据的全表扫描成本极低,完全不需要为这个查询单独新建索引增加额外存储开销。
最终方案优势
- 完全覆盖三类核心查询需求
- 仅新增一个必要GSI,存储和读写成本均压到最低,符合你优先成本的需求
- 无复杂设计,适配你当前的DynamoDB熟悉程度,后续维护成本极低
内容的提问来源于stack exchange,提问作者lowcrawler
相关产品推荐
相关产品推荐

