【问题标题】:How to query DynamoDB with multiple Indexes?如何使用多个索引查询 DynamoDB?
【发布时间】:2020-12-20 22:52:16
【问题描述】:

我在 DynamoDB 中有一个表,我有一个主键和两个全局共享索引。例如表结构如下。

// Primary Keys
id -> PK
name -> SK

// Global Shared Index 1
status_one -> S1PK
status_one_time -> S1SK

// Global Shared Index 2
status_two -> S2PK
status_two_time -> S2SK

所以我需要知道如何在withKeyConditionExpression 中使用多个键。

我需要按以下场景过滤数据,

  1. S1PK = :v1 and SK = :v4 and S2PK = :v2 and S2SK <= :v3
  2. S2PK = :v1 and S2SK >= :v2 and S1SK <= :v2

那我该怎么做呢?如果我将上述查询放入withKeyConditionExpression,它将引发错误。那么有没有办法一次查询带有主键和二级索引的表呢?我在这里做错了什么?如果有人可以帮助我,我真的很感激。提前致谢。

【问题讨论】:

    标签: java amazon-dynamodb dynamodb-mapper


    【解决方案1】:

    你不能。 DynamoDB 不能那样工作。

    一个查询只能访问表或单个索引。

    您可以使用 Scan(),但要意识到它会读取表中的每条记录(并且您将为此付费)并简单地丢弃不匹配的记录。用完预置容量的好方法。

    此外,DDB 一次只能读取 1MB,因此您可能需要循环调用它。

    如果这是一种常见的访问模式,您需要重新考虑您的密钥。或者重新考虑 DDB 的使用(单独)。一种常见的模式是将数据复制到 Elastic Search 以获得更好的搜索功能。

    【讨论】:

    • 根据标签判断,OP 正在使用 dynamodb-mapper,它在 SDK 中执行 1MB 块的必要分页。它不太可能需要任何循环。
    • 非常感谢您的回答和您的时间。我真的很感激。
    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多