我是DynamoDB的新手,目前我们正考虑使用DynamoDB将现有项目迁移到无服务器应用程序,我们希望从RDMS数据库调整以下设置:
表:
我们希望使用DynamoDB进行查询,以获取具有一个或多个标记的特定项目(通过ProjectID)的所有文件(通过Tag)。在RDMS中,这个查询很简单,例如:
SELECT * FROM Files JOIN Tags ON Tags.FileID = Files.FileID WHERE Files.ProjectID = ?PROJECT AND Tags.Tag = ?TAG_1 OR ?TAG_2 ...
目前,我们有以下DynamoDB设置(但仍可以更改):
还请考虑项目条目数量巨大(介于1000 - 30000之间)以及每个项目的文件数(介于50和100.000之间),查询应该非常快。
如何使用DynamoDB查询实现这一目标,最好不使用过滤器表达式,因为它们是在数据选择后应用的?如果表 Files 可以将StringSet标签作为列,那将是完美的,但我想这不能用于有效的DynamoDB查询(因此不使用DynamoDB-scan),因为DynamoDB-indices只能是String,Binary和Number类型而不是StringSet类型?这可能是Global Secondary Index(GSI)的适用用例吗?
答案 0 :(得分:2)
有点晚了,只是从另一个问题中看到了这个问题。
我猜你已经解决了这样的问题?
DynamoDB表
在FileTags上,您需要FileID使主键唯一,但您可以将ProjectID添加为本地二级索引的排序键,以便您可以搜索Tag + ProjectID。
它是某种数据非规范化,但这就是NoSQL所需要的:-(例如,如果您的文件将切换到另一个项目,您需要更新ProjectID不仅在文件上,而且在所有标签上。
答案 1 :(得分:2)
这个问题已经存在了将近三年,但仍然存在于Google的调查结果中。因此,如果有人落在这里,DynamoDB文档的以下页面可能会有所帮助。只是自己发现它,还没有尝试过,但是看起来很有希望。似乎比这里的其他回复新,并且显示了一种解决此问题的好方法。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html