DynamoDB-如何在不使用关系的情况下“破坏”层次结构?

时间:2019-04-09 18:18:45

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

为项目管理软件考虑以下JSON DynamoDB表示形式。

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

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

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

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

2 个答案:

答案 0 :(得分:2)

这是一个复杂的主题,我无法在此答案中全部解释,但我可以为您指出一些出色的资源,这些资源将在详细讨论该主题时为您提供答案。

视频: AWS re:Invent 2018: Amazon DynamoDB Deep Dive-我建议观看整个过程以完全理解该概念,但是您可以跳至45:42以使您了解有关分层数据成型的部分。 / p>

答案 1 :(得分:1)

如果您使用数据库来表示用户和项目之间的关系,尤其是当您具有多对多关系时,则可以考虑使用像AWS Neptune这样的Graph数据库。不可否认,Graph数据库一开始似乎有点令人恐惧和理论化。

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

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

如果发现您有许多类似的关系,则应该考虑使用关系数据库或图数据库。