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

问题描述 投票:0回答:2

考虑项目管理软件的以下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
2个回答
1
投票

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

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

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

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


2
投票

这是一个复杂的主题,我不可能在这个答案中解释这一切,但我可​​以向您指出一些优秀的资源,这些资源应该为您提供答案,因为它们详细讨论了这个主题。

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

© www.soinside.com 2019 - 2024. All rights reserved.