【问题标题】:How to store one to many relationship data in dynamodb如何在dynamodb中存储一对多关系数据
【发布时间】:2015-12-06 21:41:22
【问题描述】:

根据我的数据模型,我需要在 dynamodb 中存储多对多的关系数据项 例子 : 我有一个名为 studentId 的字段,每个 studentId 都会分配给他几个科目。

要求:

  1. 因此,对于给定的 studentId,我需要存储所有科目。我需要将所有科目分配给给定学生。

  2. 类似地,对于给定的 subjectId,我需要知道该主题分配给的 studentId。

我计划将其存储在 dynamoDb 中,如下所示:

  • 表 1:StudentToSubjects:
    • 哈希键:StudenId,
    • 范围键:subjectId

因此,如果我只使用 primaryKey 进行查询,它将为我提供具有该主键的所有行以及所有不同的哈希键。

辅助键为

  • 二级HashKey:subjectId
  • 辅助范围键:studentId

我想知道这是否有意义或正确的做法。或者有更好的方法来解决这个问题。

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    您的设计看起来不错,但您需要在最终确定之前仔细考虑,假设您已经实现了这个设计,并且在 10 年后您将查询特定主题的表时,您将获得过去 10 年的所有学生您可能不需要(当您使用辅助表 GSI 进行查询时)。

    我可能会跟随

    学生硕士:

    Hash Key: studentId
    subjectIds (Number-set or String-set)
    

    学科硕士:

    Hash Key: subjectId
    Range Key: Year
    studentIds (Number-set or String-set)
    

    这样做的好处是您将消耗更少的查询,对于特定主题或学生,您将只消耗 1 次阅读(如果大小小于 4kb)。

    这只是在最终确定架构之前对所有查询的初步思考。

    编辑:您无需重复 studentId,它将保持唯一。 它看起来像这样

    studentId -> s1
    subjectIds -> sub1,sub2,subN (This is set)
    
    studentId -> s2
    subjectIds -> sub3,sub4
    

    以下是数据类型链接,可以参考http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes

    【讨论】:

    • 什么是数字集或字符串集?您能否提供更多详细信息。所以在 StudentMaster 中:你将如何存储 subjectIds?作为价值?在这种情况下,我们可以有多个具有相同 studentId 作为哈希键的行吗?
    • 您是否建议在项目的 dynamodb 表的 value 部分中使用 set.collection?如果您的观点有误,请纠正我,但如果这是您的建议,我认为那里有一个缺点。集合的大小是未知的,它会随着时间的推移而增长,我们不能在 DDB 中拥有 > 400Kb 的项目记录大小。因此,不建议将集合存储为键值对中值的一部分。
    • 400 kb 足以满足您的要求,而且我看不到您会为单个学生添加 1000 个主题的场景。顺便说一句,在我的应用程序中。我有更大的列表大小,当时限制是 64kb,它工作正常 :)
    • 看这个链接stackoverflow.com/a/4100347/2811189我猜应该可以存储你的数据
    • 这只是我使用 studentId 和 subject Harshal 的一个例子。请假设我可以为给定的键设置很多值,因此我在问这个问题。此外,存储此类集合的价值也不是一个好主意,因为您需要将项目的大小选择为 200-400KB 左右,并且根据项目的大小,使用 DDB 存储的成本非常高。此外,您可能还没有使用您可能保留的所有尺寸,因为可能只有少数情况下您使用完整尺寸。
    猜你喜欢
    • 2021-10-06
    • 2014-08-18
    • 2012-09-06
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多