考虑项目管理软件的以下JSON DynamoDB表示。
Application = {
"Users" : [
"user1" : {"name" : "john"},
"user2" : {"name" : "jack"}
]
"Projects" : [
"project1" : {
"users" : [
"user1",
"user2"
]
}
]
}
项目可以包含许多用户,用户可以拥有许多项目。
在Projects> project1> users中,是否使用了建议的用户密钥/ ID?我看到的方式是我正在模拟传统关系,而不是正确地使用DynamoDB。
我已经阅读了有关多对多关系here的指南,但老实说,我无法理解他们的视觉架构或解释。
如果您使用数据库来表示关系,例如用户和项目之间的关系,尤其是当您有多对多的关系时,您可以考虑使用像AWS Neptune这样的Graph数据库。不可否认,图形数据库开始时看起来有点可怕和理论上。
您是正确的,在DynamoDB中,您将在项目表中使用用户ID,然后在Users表中进行查找以获取给定项目的用户。这似乎没有正确使用DynamoDB的原因是DynamoDB本质上只是一个关键的价值存储。当然,这些值可能非常复杂,但您无法在本机上模拟键之间的任何关系。
DynamoDB现在支持事务,因此您可以根据需要在一个原子事务中查询多个表。
如果您发现自己有很多这样的关系,那么您应该考虑使用关系数据库或图形数据库。
这是一个复杂的主题,我不可能在这个答案中解释这一切,但我可以向您指出一些优秀的资源,这些资源应该为您提供答案,因为它们详细讨论了这个主题。
视频:AWS re:Invent 2018: Amazon DynamoDB Deep Dive - 我建议观察整个事情以完全理解这个概念,但是你可以跳到45:42跳到关于分层数据成型的部分。