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