AWS DynamoDB文档包含示例schema for a forum。但是,此模式能够回答的问题数量似乎很少。此外,该表似乎还存在热键问题(一连串的备份都备份在同一分区上)。
在主题为“ Amazon DynamoDB的高级设计模式”的演讲者中,演示者around 43 minutes breaks down仅使用带有3个GSI(索引)的单个表,就来自Audible的一个复杂用例。
我正在尝试从标准RDBMS 3NF背景知识中学习正确的DynamoDB建模。如何设计一个论坛来防止热分区,同时又能满足这些常见用例?
查询:
基本架构(?):
- 论坛:分区键:Forum_GUID。属性:名称,描述
- 用户:分区键:User_GUID。属性:电子邮件,加入日期
- 线程:复合键:Forum_GUID,Topic_GUID。属性:posted_by,日期,投票,正文,主题
- 回复:组合键:Topic_GUID,Reply_GUID。属性:posted_by,日期,投票,正文
我假设有多种解决方案(包括使用单个表)。我正在寻找可以解决此问题的任何答案,同时提供有关properly use indexes的时间和方式的指南,以扩展应用程序的写入。
答案 0 :(得分:2)
您可以使用上述架构。现在为您查询
论坛主题(按发布日期或最新回复排序)
Select from GSI2 where GSI2 pk=Forum123 and sortby GSI2 SK
您可以根据经常问到的用例,选择将谁保留在GSI2 Sk最近的回复/发布日期中。
按主题答复(按分页发布的日期排序)
Select where pk=topic and sk startswith reply and sortby sk
用户答复(按发布日期排序)
Select from GSI2 where pk=User123 and sk startswith reply and sortby sk
按用户分类的主题(按发布日期排序)
Select from GSI2 where pk=User123 and sk startswith topic and sortby sk
This will require another GSI if you want to do this operation across multiple forums. but This GSI will certainly suffer from hot key issue. since there will be only one key. Instead of doing that, you can keep one fixed key value in your table who keeps these counts. and these values are updated by an async process.