【问题标题】:DynamoDB - How to "break" hierarchy without using relationships?DynamoDB - 如何在不使用关系的情况下“打破”层次结构?
【发布时间】:2019-08-31 02:36:21
【问题描述】:

考虑项目管理软件的以下 JSON DynamoDB 表示。

Application = {
  "Users" : [
    "user1" : {"name" : "john"},
    "user2" : {"name" : "jack"}
  ]
  "Projects" : [
    "project1" : {
      "users" : [
        "user1",
        "user2"
      ]
    }
  ]
}

一个项目可以有很多用户,一个用户可以有很多项目。

在 Projects>project1>users 中,是否推荐使用用户密钥/ID?我看到的方式是我在模拟传统关系,并没有真正以正确的方式使用 DynamoDB。

我已经阅读了关于多对多关系here 的指南,但老实说,我无法理解他们的视觉模式或解释。

【问题讨论】:

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


    【解决方案1】:

    这是一个复杂的话题,我不可能在这个答案中全部解释清楚,但我可以为您指出一些优秀的资源,这些资源可以在详细讨论这个话题时为您提供答案。

    视频: AWS re:Invent 2018: Amazon DynamoDB Deep Dive - 我建议观看整个内容以完全理解这个概念,但您可以跳到 45:42 跳到关于分层数据成型的部分。

    【讨论】:

      【解决方案2】:

      如果您使用数据库来表示关系,例如用户和项目之间的关系,尤其是当您有多对多关系时,您可以考虑使用像 AWS Neptune 这样的图形数据库。诚然,图形数据库从一开始看起来有点可怕和理论化。

      您是对的,在 DynamoDB 中,您将使用项目表中的用户 ID,然后在用户表中进行查找以获取给定项目的用户。 这似乎没有正确利用 DynamoDB 的原因是 DynamoDB 本质上只是一个键值存储。当然,这些值可能非常复杂,但是您不能对键之间的任何关系进行本地建模。

      DynamoDB 现在支持事务,因此您可以在需要时在一个原子事务中查询多个表。

      如果你发现你有很多这样的关系,你应该考虑使用关系或图形数据库。

      【讨论】:

      • 嗯,我使用 DynamoDB 的唯一原因是因为它与 AWS 中的关系数据库相比是多么便宜,您需要像 EC2 机器一样为它付费。而且并不是真正的多个表,我的想法是将它们放在同一个 DynamoDB 表中,彼此相邻。
      • 是的,我明白了。也许您可以查看Aurora Serverless,您只需为存储和交易付费,但不可否认,定价会有点难以计算。
      猜你喜欢
      • 1970-01-01
      • 2019-12-06
      • 2018-08-13
      • 2013-06-06
      • 1970-01-01
      • 2017-07-24
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多