【问题标题】:Can you query by a range in a GSI in DynamoDB您可以按 DynamoDB 中 GSI 中的范围进行查询吗
【发布时间】:2016-03-09 00:48:50
【问题描述】:

假设我在 DynamoDB 中有一个 users 和 images 表。

users table
userId (hash) name email 

images table
imagesId (hash) userId filename

如果我想获取单个 userId 的所有图像,我应该如何设置范围或 GSI?图像表是否应该是具有 imageId(哈希)和 userId(范围)的复合键并按范围搜索(如果可能)?还是应该 userId(是 GSI)和查询只是 userId?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb nosql


    【解决方案1】:

    看起来您可以在 Images 表上使用表的反向键架构 add a GSI

    • hash key - userId
    • range key - imagesId
    • filename - 附加属性

    然后,您可以使用 userId 查询此 GSI,以获取其所有关联的 imagesId

    【讨论】:

    • 为了记录,您还可以将图像存储在同一个users 表中作为地图列表。您将为自己节省一个查询和一个全局索引,因为您只需一个 GetItem 请求就可以检索图像(它也便宜很多)。
    • @MatiasCicero 好电话。我假设他已经将这些作为现有表,这可能无效。 @cdub,另一种选择是利用@MatiasCicero 所说的并使用UpdateExpressions 修改嵌套地图。保存在 GSI、多个表等上。如何存储和检索数据取决于您!
    【解决方案2】:

    您不能仅使用 DynamoDB 中的范围键进行查询。

    除非您希望images 表中的查询结果按userId 排序,否则将其用作范围键是没有意义的。如果要使用查询从图像表中检索具有特定userId 的所有图像,则需要在userId 上使用GSI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多