【问题标题】:Query a DynamoDB table to get all the items having a flag value as true查询 DynamoDB 表以获取标志值为 true 的所有项目
【发布时间】:2020-11-07 17:19:58
【问题描述】:

我有一个 DDB 表,其中哈希键为 id(字符串),排序键为标志(布尔值)。我想获取表中标志值为 true 的所有项目。我没有设置任何 GSI 或 LSI,但如果需要,我可以创建它们。

架构

{
  "id": {
    "S": "<Some ID>"
  },
  "flag": {
    "B": "<true/false>"
  }
}

【问题讨论】:

    标签: amazon-dynamodb dynamodb-queries amazon-dynamodb-index


    【解决方案1】:

    您说您有一个布尔排序键,但是不支持布尔类型的 DynamodDB 排序键。相反,您可以使用数字 (0/1) 或字符串 ("false"/"true") 来表示布尔值。如果它不是排序键,您也可以考虑使索引稀疏。

    要查询所有具有 true (false) 的项目以获取排序键,您将需要 GSI,因为 LSI 的范围仅限于单个哈希键。因此,您可能应该在“布尔”(实际上是字符串或数字)字段上创建一个 GSI。请注意,只能以最终一致性查询 GSI,因此请在选择 GSI 之前考虑您的用例。

    【讨论】:

      【解决方案2】:

      DynamoDB 是一个分布式数据存储,即它不将数据存储在单个服务器中,而是使用提供的分区键 (PK) 进行分区。 这意味着您的数据分布在多个服务器上,并带来了一次只能查询单个分区的限制。

      由于您有一个hash key 作为 PK,这意味着您的 flag 分布在多个分区中,并且使用 PK 进行正常查询,SK 永远不会为您提供完整的数据。
      要在全局级别查询,即您需要创建 GSI 的所有分区。

      查询get all items with flag as true

      • 在标记标记 = true 时为项目的架构添加新属性
      • 创建一个 GSI,其中 PK 作为哈希,SK 作为这个新属性和获取属性所需的数据

      当您更新项目并添加新属性时,它将在 GSI 中创建一个条目。同样,因此您的 GSI 将仅包含 flag = true

      的条目

      【讨论】:

        猜你喜欢
        • 2020-06-24
        • 2018-03-14
        • 2019-09-05
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多