【发布时间】:2018-06-30 20:01:07
【问题描述】:
我正在完成一个使用 DynamoDB 对多对多关系建模的练习。我需要允许帖子和标签之间的多对多关系。每个帖子可以有很多标签,每个标签可以有很多帖子。
我在id 上有一个主键,在type 上有一个主排序键,然后在id 和data 上有另一个全局索引,我在id 和type 上再次添加了另一个全局索引,但我认为这是多余的。
这是我目前所拥有的。
id(Partition key) type(Sort Key) target data
------------- ---------- ------ ------
1 post 1 cool post
tag tag tag n/a
1 tag tag orange
---------------------------------------------
---- inserting another tag will overwrite ---
---------------------------------------------
1 tag tag green
我从这个很棒的演讲 https://www.youtube.com/watch?v=jzeKPKpucS0 和这些不太棒的文档 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html 中得到建议
我遇到的问题是,如果我尝试使用id“1”和type“标签”添加另一个标签,它将覆盖现有标签,因为它具有相同的复合键。我在这里想念什么?似乎建议是将主键和排序键设为id 和type。我应该让我的类型更像“tag#orange”吗?在这种情况下,我可以在 target 上放置一个全局索引,并在类型上使用排序键。这样我就可以通过查询 target = "tag" 来获取所有带有特定标签的帖子,并且类型以 "tag" 开头。
只是寻找一些关于使用 Dynamo 处理这种邻接列表数据的建议,因为它看起来很有趣。谢谢!
【问题讨论】:
-
我有点困惑。 Tag 有一个整数 ID 还是只有 Posts 有?是否需要将标签另存为
{"id": 1, "type": "tag", "data": "this is a tag"}或{"id": "this is a tag", "type": "tag", "data": "this is a tag"}? -
标签也可以有一个整数 id,但为了清楚起见,我选择使用字符串。
标签: nosql amazon-dynamodb adjacency-list