我有一个 DDB 表,其中哈希键为 id(字符串),排序键为标志(布尔值)。我想获取表中标志值为 true 的所有项目。我没有设置任何 GSI 或 LSI,但如果需要,我可以创建它们。
架构
{
"id": {
"S": "<Some ID>"
},
"flag": {
"B": "<true/false>"
}
}
我有一个 DDB 表,其中哈希键为 id(字符串),排序键为标志(布尔值)。我想获取表中标志值为 true 的所有项目。我没有设置任何 GSI 或 LSI,但如果需要,我可以创建它们。
架构
{
"id": {
"S": "<Some ID>"
},
"flag": {
"B": "<true/false>"
}
}
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.
DynamoDB 是一个分布式数据存储,即它不将数据存储在单个服务器中,而是使用提供的分区键 (PK) 进行分区。这意味着您的数据分布在多个服务器上,并带来了一次只能查询单个分区的限制。
由于您有一个hash key
as PK,这意味着您flag
分布在多个分区中并且使用 PK 进行正常查询,因此 SK 永远不会为您提供完整的数据。
要在全局级别上查询,即所有分区,您需要创建一个 GSI。
对于查询get all items with flag as true
:
当您更新项目并添加新属性时,它将在 GSI 中创建一个条目。以及因此您的 GSI 将只有条目flag = true