在什么情况下你在DynamoDB上使用Simple Hash Keys?

时间:2015-02-25 07:22:26

标签: database amazon-web-services amazon-dynamodb key-value-store

简单的哈希密钥似乎过于简单而无法编写文章,而许多人写的是复合哈希/范围密钥,因为复合哈希/范围密钥对许多复杂情况都很有用。但我相信在常见的应用程序中,许多表应该使用Simple Hash Keys设计。在什么情况下你使用Simple Hash Keys?

例如,当您设计如下所示的分层模型时,如何为每个表设计主键? (租户以外的所有表都将tenant_id作为字段。)

  • 租户
  • 用户
  • 项目
  • 任务
  • 团队成员

Idea.1

仅限#34;团队成员"由Composite Hash / Range Key设计。其他的是由Simple Hash Key设计的。

观。 2

  • 租户由Simple Hash Key设计。
  • 用户,团队和项目的主键是复合的(tenant_id,sub_id)。
  • 任务的主键是复合的({tenant_id} _ {project_range_key},sub_id)。
  • 团队成员的主键是复合({tenant_id} _ {team_range_key},{tenant_id} _ {user_range_key})。

其中sub_id可以是序号,created_at或其他。

更新

在我发布这个问题之后,我了解了有关DynamoDB及其历史的更多信息,我现在非常清楚地认识到我的担忧。

在亚马逊发布GSI之前,我们必须设计像#34; Idea 2"为了查询" tenant_id"。但现在我们可以使用GSI,因此我们可以使用"简单哈希密钥和GSI"的组合来设计表(例如团队,项目或任务)。是对的吗??

2 个答案:

答案 0 :(得分:1)

您使用单个哈希键表来描述项目。例如,用户有许多信息,如姓名,年龄等。您可以创建一个用户表,其中user_id为hashkey,所有其他信息为属性。

您使用哈希范围架构来描述关系。例如,一个团队可以拥有多个用户。因此,您可以创建Team-Member-Relationship表,其中team-id为hashkey,user-id为range key。

换句话说,绘制一个关系图,顶点是(用户,团队,项目),边缘是他们的关系(1对1,1对多,多对多等)。然后对顶点使用Hashkey模式,为边缘使用Hash-Range模式。

谢谢!

厄尔本

答案 1 :(得分:0)

我已回复您在AWS论坛here上发布的同一篇文章。希望它对你有所帮助。尽管Stackoflow和AWS论坛都受到DynamoDB专家的积极监控,请随时与我联系。感谢您对DynamoDB的关注!