gpt4 book ai didi

amazon-web-services - 用户组的 DynamoDB 表结构

转载 作者:行者123 更新时间:2023-12-03 23:54:00 24 4
gpt4 key购买 nike

我正在尝试创建一个 dynamoDB 表结构,它将为应用程序的用户和组建模。

状况:

  • 每个用户/组都是应用程序的一部分
  • 每个组可以有多个用户
  • 每个用户可以在多个组中
  • 用户可以分组或不分组
  • 组可以为空

  • 我想我有一个非常相关的思维,我很好奇你是否可以在 Dynamo 中建模这样的东西。

    我想到了这样的事情:

    Table: appId(PK) groupName(SK) username(SK) details1 details2



    但我看到你在发电机中只能有一个PK和一个SK

    然后我想到了这样的事情:

    Table: appId(PK) groupName#username(SK) details1 details2



    但这似乎不是一个好主意(例如,组可以没有用户,用户可以没有组,我不知道如何从组中获取所有用户)

    你会如何在 Dynamo 中建模这样的东西?

    最佳答案

    这在很大程度上取决于您需要对数据支持哪些查询,这是您在 NoSQL 模型中必须比在关系模型中更仔细地考虑的事情。

    就我个人而言,我可能会首先为组和用户创建两个表,每个表都以 appId (PK) 和 groupId/userId (SK) 为键,还有其他属性以获取详细信息。然后在用户表中,我将有一个字段 userGroups 作为包含用户所在组的 id 列表的 StringSet。这使您能够查询:

  • 给定应用程序中的所有用户
  • 给定应用程序中的所有组
  • 给定应用程序中给定用户的所有组(因此给定用户是否在特定组中)

  • 如果执行最终查询(给定应用程序中给定组的所有用户)很少发生(或每个应用程序的用户数量很少),您可以对由 appId 键控的用户表执行扫描操作并过滤用户组字段。如果该查询的性能更重要,但每个组的用户数不是太大,则可以在组表中创建一个镜像 groupUsers StringSet 字段作为镜像,并在应用程序级别保持两个字段同步,或者通过使用 DynamoDb Streams 从一个复制到另一个。

    或者,您可以将映射分离到一个单独的表中,这与您在关系数据库中所做的非常相似。您可以通过 appId(PK) userId(SK) 来键入此表,然后在 appId(PK) groupId(SK) 上创建全局二级索引以允许在另一个方向进行查询。 AWS 将根据数据的任何更改使索引保持最新。

    关于amazon-web-services - 用户组的 DynamoDB 表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52476955/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com