【问题标题】:DynamoDB Query with multiple tags具有多个标签的 DynamoDB 查询
【发布时间】:2017-07-29 02:11:36
【问题描述】:

我对 DynamoDB 比较陌生,目前我们正在考虑使用 DynamoDB 将现有项目迁移到无服务器应用程序,我们希望在其中调整来自 RDMS 数据库的以下设置:

表格:

  • 项目(ProjectID
  • 文件(FileIDProjectID、文件名)
  • 标签(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


    【解决方案1】:

    有点晚了,刚看到这个问题是从另一个人那里引用的。

    我猜你已经解决了这样的问题?

    DynamoDB 表

    • 项目(ProjectID [HashKey],...)
    • 文件(ProjectID [HashKey]、FileID [RangeKey]、...)
    • 标签(标签 [HashKey]、FileID [RangeKey]、ProjectID [LSI 排序键])

    在 FileTags 上,您需要 FileID 来使主键唯一,但您可以将 ProjectID 添加为本地二级索引的排序键,这样您就可以在 Tag + ProjectID 上进行搜索。

    这是某种数据非规范化,但这就是使用 NoSQL 所需要的 :-( 。例如,如果您的文件将切换到另一个项目,您不仅需要更新文件上的 ProjectID,还需要更新所有标签。

    【讨论】:

      【解决方案2】:

      这个问题已经快三年了,但它仍在 Google 搜索结果中。因此,如果其他人来到这里,也许 DynamoDB 文档中的以下页面可以提供帮助。只是自己找到了它,还没有尝试过,但它看起来很有希望。似乎比这里的其他回复更新,并显示了解决问题的好方法。

      https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        相关资源
        最近更新 更多