我一直在从事新项目并尝试 DynamoDB 单表设计,最近我在实现更复杂的用例时遇到了一些问题,希望得到一些意见。
我想知道您如何在 DynamoDB 中实现具有多重关系的资源。我知道您在设计哈希和排序键时需要考虑访问模式,但我正在努力应对有多种数据访问方式的场景。这是一个包含职位发布及其访问模式的示例场景:
这是我想出的
PK(哈希键) | SK(排序键) | 标题 | 发布日期 | ... |
---|---|---|---|---|
公司#12345 | 公司#META | 微软 | ... | |
公司#12345 | 工作#7890 | 开发人员 | 2023-03-28 | ... |
有了这样的东西,我可以看到你如何获得一家公司的所有工作:
PK = 'COMPANY#12345') and begins\_with(SK, 'JOB#')
获取所有工作:
begins\_with(SK, 'JOB#')
使用交换 PK 和 SK 的 GSI 获得一份工作(假设您有 id)
SK = 'JOB#7890'
经过这三种访问模式,我不确定我看到最好的方法是什么。如果有人对如何重新设计事物以允许上述所有访问模式有一些提示,我将不胜感激。
通过所需的认证获得工作(例如:叉车认证)
这看起来像是现有访问模式的 FilterCondition。
按发布日期获取工作
需要一个 GSI,静态变量作为 PK,数据作为 SK,或者如果您想按日期按公司列出工作,您可以执行以下操作,允许您按公司按日期排序工作:
PK(哈希键) | SK(排序键) | 标题 | ... |
---|---|---|---|
公司#12345 | 公司#META | 微软 | |
公司#12345 | 2023-03-28#求职#7890 | 开发人员 | |
公司#12345 | 2023-03-25#求职#0090 | 开发人员 | |
公司#12345 | 2023-01-22#求职#3390 | 开发人员 |
按状态获取工作(例如状态:“接受申请”、“审查申请”、“完成”)
需要GSI