查询DynamoDB表以获取标志值为true的所有项



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

架构

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

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

要查询排序关键字为true(false(的所有项,您将需要一个GSI,因为LSI的范围仅限于一个散列关键字。因此,您可能应该在";布尔值";(实际上是字符串或数字(字段。请注意,GSI只能在具有最终一致性的情况下查询,因此在选择GSI之前请考虑您的用例。

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

由于您有一个hash key作为PK,这意味着您的flag分布在多个分区中,而一个带有PK的普通查询,SK永远不会给您完整的数据。
要在全局级别(即所有分区(进行查询,您需要创建一个GSI。

对于查询get all items with flag as true:

  • 当flag标记为true时,为项的架构添加一个新属性
  • 创建一个GSI,其中PK作为哈希,SK作为这个新属性,以及您需要获取的属性数据

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

最新更新