我有一个包含诸如“目录”,“集合”等实体的应用程序。我想使用标记来建模实体之间的关系。因此,例如,我可能有一个销售目录和一个销售集合。我会知道两个实体都是相连的,因为它们都有相同的标签:“ sales”。
这是我需要做的查询:
1)获取特定类型的所有实体,即目录
2)通过ID获取实体
3)获取带有特定标签的所有实体
4)通过某个标签查询实体列表,并检索与该实体关联的其余标签。
我想知道如何在Dynamo DB中建模
我首先以为我可以这样做:
PK = entityType_id (e.g. catalog_1)
SK = Tag (e.g. sales)
问题是我无法获得某种类型的所有实体。 (1)
我想也许我可以做到:
PK = entityType (e.g. catalog)
SK = id_tag (e.g. 1_sales)
我可以完成:1,2在SK上使用BeginsWith和EndsWith,在GSI上使用3,类型标签是PK,但不能完成4。
将来,我还希望能够按标签类型进行查询。我看不到像亚马逊建议的那样在一个表中或不使用RDBMS的情况下如何实现所有这些功能。
我真的很感激我能得到的任何意见或指导。
谢谢!
答案 0 :(得分:0)
您可以将其用作架构
| pk | sk | GSI1 PK |
| uid1 | metadata | | tags:["sales","purchase", "borrow"] | entityType:["catalogs"]
| uid1 |entityType#catalogs | entityType#catalogs
| uid1 | tag#sales | tag#sales
| uid1 | tag#purchase | tag#purchase
| uid1 | tag#borrow | tag#borrow
| uid2 |entityType#collection | entityType#collection
| uid2 | tag#borrow | tag#borrow
| uid2 | metadata | | tags: ["borrow"] | entityType:["collection"]
其中PK是GSI1的SK(GSI1:全球二级指数)
这将解决诸如以下的用例
获取所有销售实体
Select* where PK=entityType#sales in table GSI1
通过ID获取实体
Select * wehere PK=id and SK=metadata
获取所有带有标签Sales的实体
Select* where PK=tag#sales in table GSI1
通过特定标签查询实体列表,并检索与该实体关联的其余标签。
Use 3rd query and get all list of uids and then do a get all tags, or duplicate tags data as well in every row.