用于高级访问模式集的 DynamoDB 单表设计

问题描述 投票:0回答:1

我一直在从事新项目并尝试 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'

经过这三种访问模式,我不确定我看到最好的方法是什么。如果有人对如何重新设计事物以允许上述所有访问模式有一些提示,我将不胜感激。

amazon-web-services design-patterns amazon-dynamodb nosql architectural-patterns
1个回答
0
投票

通过所需的认证获得工作(例如:叉车认证)

这看起来像是现有访问模式的 FilterCondition。

按发布日期获取工作

需要一个 GSI,静态变量作为 PK,数据作为 SK,或者如果您想按日期按公司列出工作,您可以执行以下操作,允许您按公司按日期排序工作:

PK(哈希键) SK(排序键) 标题 ...
公司#12345 公司#META 微软
公司#12345 2023-03-28#求职#7890 开发人员
公司#12345 2023-03-25#求职#0090 开发人员
公司#12345 2023-01-22#求职#3390 开发人员

按状态获取工作(例如状态:“接受申请”、“审查申请”、“完成”)

需要GSI

© www.soinside.com 2019 - 2024. All rights reserved.