在什么情况下你会在 DynamoDB 上使用 Simple Hash Keys?
In what situation do you use Simple Hash Keys on DynamoDB?
Simple Hash Keys 写文章好像太简单了,而写 Composite Hash/Range Keys 的很多,因为 Composite Hash/Range Keys 对于很多复杂的情况很有用。但是我相信在一般的应用中,很多table应该是用Simple Hash Keys来设计的。你在什么情况下使用Simple Hash Keys?
例如,当你设计如下层次模型时,你如何为每个table设计主键? (除 Tenant 之外的所有 table 字段都有 tenant_id。)
- 租户
- 用户
- 团队
- 项目
- 任务
- 团队成员
想法.1
只有"Team Member"是Composite Hash/Range Key设计的。其他由Simple Hash Key设计。
想法。 2
- Tenant 由 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 及其历史的知识,现在我清楚地认识到了我的担忧。
在 Amazon 发布 GSI 之前,我们必须设计 table 类似 "Idea 2" 以便针对 "tenant_id" 进行查询。但现在我们可以使用 GSI,因此我们可以使用 "Simple Hash Key and GSI" 的组合来设计 table(例如团队、项目或任务)。那正确吗??
我已经回复了与您在 AWS 论坛 here 上相同的 post。希望对您有所帮助。尽管 Stack Overflow 和 AWS 论坛都受到 DynamoDB 专家的积极监控,但请随时关注我。感谢您对 DynamoDB 的关注!
您使用单个散列键 table 来描述一个项目。例如,一个用户有很多信息,如姓名、年龄等。您可以创建一个用户 table,其中 user_id 作为哈希键,所有其他信息作为属性。
您使用哈希范围架构来描述关系。例如,一个团队可以有多个用户。因此,您可以创建一个团队成员关系 table,其中团队 ID 作为散列键,用户 ID 作为范围键。
换句话说,画一个关系图,顶点是(用户,团队,项目),边缘是他们的关系(1对1,1对多,多对多等)。然后对顶点使用 Hashkey 模式,对边使用 Hash-Range 模式。
谢谢!
二本
Simple Hash Keys 写文章好像太简单了,而写 Composite Hash/Range Keys 的很多,因为 Composite Hash/Range Keys 对于很多复杂的情况很有用。但是我相信在一般的应用中,很多table应该是用Simple Hash Keys来设计的。你在什么情况下使用Simple Hash Keys?
例如,当你设计如下层次模型时,你如何为每个table设计主键? (除 Tenant 之外的所有 table 字段都有 tenant_id。)
- 租户
- 用户
- 团队
- 项目
- 任务
- 团队成员
想法.1
只有"Team Member"是Composite Hash/Range Key设计的。其他由Simple Hash Key设计。
想法。 2
- Tenant 由 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 及其历史的知识,现在我清楚地认识到了我的担忧。
在 Amazon 发布 GSI 之前,我们必须设计 table 类似 "Idea 2" 以便针对 "tenant_id" 进行查询。但现在我们可以使用 GSI,因此我们可以使用 "Simple Hash Key and GSI" 的组合来设计 table(例如团队、项目或任务)。那正确吗??
我已经回复了与您在 AWS 论坛 here 上相同的 post。希望对您有所帮助。尽管 Stack Overflow 和 AWS 论坛都受到 DynamoDB 专家的积极监控,但请随时关注我。感谢您对 DynamoDB 的关注!
您使用单个散列键 table 来描述一个项目。例如,一个用户有很多信息,如姓名、年龄等。您可以创建一个用户 table,其中 user_id 作为哈希键,所有其他信息作为属性。
您使用哈希范围架构来描述关系。例如,一个团队可以有多个用户。因此,您可以创建一个团队成员关系 table,其中团队 ID 作为散列键,用户 ID 作为范围键。
换句话说,画一个关系图,顶点是(用户,团队,项目),边缘是他们的关系(1对1,1对多,多对多等)。然后对顶点使用 Hashkey 模式,对边使用 Hash-Range 模式。
谢谢!
二本