使用列表中的值查询 DynamoDB 全局二级索引

问题描述 投票:0回答:1

我有一个包含许多属性的 DynamoDB 表,并在其中一个属性上定义了一个 global_secondary_index 。 该表包含数百万个项目,我需要执行一个查询,在 SQL 上将类似于: 从字段 1 为 IN (value1,..., valuen) 的表中选择 *field1 是索引字段。

注:

  • 我有 10k 价值需要在 IN 办理
  • 不想扫表,而是使用全局二级索引

到目前为止,我还没有找到任何简单的方法来做到这一点,无论是通过 DynamoDB AWS 控制台还是通过 AWS 编程 API。

我注意到 PartiQL 提供了这样的语法,我很好奇它是否在幕后进行表扫描或只是一项一项地获取项目。 (无论如何,PartiQL 目前不适合我)

作为解决方法,我编写了一个脚本来逐一返回项目。

我读过这样的文章,这对这里没有帮助:使用分区键和特定排序键列表查询 DynamoDB

最后,我也很想了解为什么这样的功能本身不存在(如果有的话,技术限制是什么)。

谢谢

amazon-dynamodb partiql
1个回答
0
投票

PartQL 执行以下操作的方式

Select * 
from "ddbTable"."mygsi"
where field1 is IN (value1, value2)

简单地说,在幕后它基本上最终以对 DDB 的两个查询结束。

我无法通过快速搜索找到任何记录的限制,但我怀疑 10K 值会超出该限制。

需要理解的是,DDB 中的查询只能触及 1 个分区。 “表扫描”被分解为每个分区的单独扫描; 默认按顺序进行,但可以并行进行

此外,GSI 基本上只是一个单独的 DDB 表,其规则与主表略有不同(允许重复的主键)。

简而言之,您需要编写一些代码来循环遍历 10K 值,为每个值运行 GSI 查询。

© www.soinside.com 2019 - 2024. All rights reserved.