【问题标题】:Just another dynamodb single table design question (YADSTD)只是另一个 dynamodb 单表设计问题 (YADSTD)
【发布时间】:2020-08-20 10:16:59
【问题描述】:

此图像表示一个模型设计,用于从电影、演员和导演之间的关系中获取数据。

根据我对MOV#xyz1234分区键的理解,他们使用movieId作为主键的一部分来存储电影、演员和导演。因此,对于实体电影“PK = MOV#movieId and SK = MOV#movieId”,如果您想获取电影详细信息,可以通过以下方式查询:

PK START_WITH MOV# AND SK = MOV#movieId

然后为了存储一个演员,他们将使用“PK = MOV#movieId and SK = ACT#actorID”以这种方式从一部电影中获取所有演员,查询可能是:

PK = MOV#movieId and SK START_WITH ACT#

或者如果我们想要一个演员的详细信息,我们可以查询为:

PK START_WITH MOV# AND SK = ACT#actorId

但是当我找到 ACT#aac1004 分区键和 DIR#bce0557 时,我感到很困惑。 我的问题是:当他们创建电影时,他们为每个实体同时存储了多个项目?他们如何存储演员和导演。如果一部电影有很多演员,那么如何到达这里:

【问题讨论】:

    标签: amazon-web-services nosql amazon-dynamodb


    【解决方案1】:

    MOV# 作为 PK 和 ACT# 的行建立了演员在特定电影中的关系,并且可能包含有关该演员与电影的特定关系的属性(即角色名称、电影标题等)。

    ACT#为PK的行将包含与电影无关的演员信息(例如出生日期、简历等)

    在您的问题中需要注意的一点是,您无法查询以“开头为”的 PK,这就是为什么在 SK 列上添加 GSI(全局二级索引)的原因,因此您可以在不知道是什么的情况下直接查询PK列是。 GSI 的 PK 是 SK 列,因此您可以直接查询。

    因此,为了更正您问题中的一些内容,如果您想获取电影详细信息,您可以使用以下方式查询正常的 PK:

    PK = MOV#movieId AND SK = MOV#movieId

    如果您需要演员详细信息,我们可以查询:

    GSI PK = ACT#actorId

    这将返回带有演员信息的演员行 (PK = ACT#actorID) 以及演员是 SK 的所有 PK = MOV# 的行。

    我不确定这是否能回答这个问题,但希望能阐明单表设计如何更好地工作。

    【讨论】:

    • 嘿,JD,谢谢你的答案。好吧,有点:1-是的,我一开始测试访问模式就遇到了 START_WITH 问题 :) 无论如何,谢谢。 2- 当我们需要 MOV#123 - ACT#123 和 ACT#123 - ACT#123 时,我现在很清楚,但我想知道如何执行此操作。例如,如果我想存储一部电影而不是 3 个演员。首先,您需要创建演员配置文件,然后在创建电影时选择演员,然后存储 3 个具有相同 MOV#123 PK 的项目?还是?
    • 另一个问题,如果我想要所有演员的资料怎么办。我在考虑 pk = ACT#123 和 sk = "PROFILE" 所以如果我的 GSI 使用 sk 作为 GSI pk 我可以说 pk = 'PROFILE' 但应该是更好的方法。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多