【发布时间】:2017-07-29 02:11:36
【问题描述】:
我对 DynamoDB 比较陌生,目前我们正在考虑使用 DynamoDB 将现有项目迁移到无服务器应用程序,我们希望在其中调整来自 RDMS 数据库的以下设置:
表格:
- 项目(ProjectID)
- 文件(FileID、ProjectID、文件名)
- 标签(FileID、标签)
我们希望使用 DynamoDB 进行查询,以获取具有一个或多个 Tags 的特定 Project(按 ProjectID)的所有 Files(通过标签)。在 RDMS 中,此查询很简单,例如:
SELECT * FROM Files JOIN Tags ON Tags.FileID = Files.FileID WHERE Files.ProjectID = ?PROJECT AND Tags.Tag = ?TAG_1 OR ?TAG_2 ...
目前,我们有以下 DynamoDB 设置(但仍可以更改):
- 项目(ProjectID [HashKey],...)
- 文件(ProjectID [HashKey]、FileID [RangeKey]、...)
还请考虑项目条目的数量很大(在 1000 到 30000 之间)以及每个项目的文件数量(在 50 到 100.000 之间),并且查询应该非常快。
如何使用 DynamoDB 查询来实现这一点,最好不使用过滤器表达式,因为它们是在数据选择之后应用的?如果表 Files 可以有一个 StringSet Tags 作为列,那将是完美的,但我想这不能用于高效的 DynamoDB 查询(因此不使用 DynamoDB-scan),因为 DynamoDB-indices 只能是 String、Binary 和 Number 类型,而不是 StringSet 类型?这可能是Global Secondary Index (GSI) 的适用用例吗?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb