首页 > 解决方案 > DynamoDB:获取与可能键之一匹配的所有项目

问题描述

假设我有下表——</p>

itemA | itemB | relationScore | type
----------------------------------------
"s"   |   "a" |      1.0      |  "foo"
"s"   |   "b" |      1.0      |  "bar"
...
 

在这里,itemA+itemB是每行唯一的,我分别将它们设为哈希键和范围键。

然而,我的查询需要我获取所有项目,例如——</p>

  1. itemA等于 (A,B,C,D ....) 之一(即选项列表)
  2. type等于“富”

如何构建索引以便能够在不使用扫描/需要多个查询的情况下执行此操作?

注意:我不想只查询type并稍后在内存中过滤它,因为type它的基数非常低,最终会返回一个巨大的列表。

标签: amazon-dynamodbdata-modeling

解决方案


也许...

如果您使用
哈希键创建了 GSI:类型
范围键:itemA

然后您可以使用 GSI 和 (type = "foo", itemA between "A" and "D") 进行查询

但显然这要求 itemA 的值是一个连续的范围。您的示例似乎就是这种情况,但实际数据可能并非如此。

编辑
由于 itemA 值实际上并不连续,并且 DDB 不支持IN您遇到多个查询。

这不是世界末日,因为您可以并行执行查询。在这种情况下,我可能会使用带有
哈希键的 GSI:itemA
范围键:类型

从而确保每个查询都是特定于分区的。(即使您的数据或 I/O 要求足够低以至于 DDB 不会实际创建单独的分区)


推荐阅读