0

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

架构

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

2 回答 2

3

You say that you have a boolean sort key, however a DynamodDB sort key of type Boolean is not supported. Instead you could use a number (0/1) or string ("false"/"true") to represent a boolean. You could also consider making the index sparse if it is not the sort key.

To query all items with true (false) for a sort key, you will need a GSI since an LSI is limited in scope to a single hash key. So you should probably create a GSI on the "boolean" (actually string or number) field. Note that GSIs can only be queried with eventual consistency, so consider your use case before selecting a GSI.

于 2020-07-18T14:03:04.853 回答
0

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

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

对于查询get all items with flag as true

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

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

于 2020-07-31T06:31:41.553 回答