使用分区键和特定排序键列表查询DynamoDB [英] Querying DynamoDB with a partition key and list of specific sort keys

查看:21
本文介绍了使用分区键和特定排序键列表查询DynamoDB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个DyanmoDB表,为了解决此问题,该表如下所示:

  • id(字符串分区键)
  • 源(字符串排序键)

我想在表中查询特定id下的原点子集。 据我所知,DynamoDB在查询中唯一允许的排序关键字运算符是‘BETWEEN’、‘BEGINGS_WITH’、‘=’、‘<;=’和‘>=’。

问题是我的查询需要一种‘CONTAINS’形式,因为‘Origins’列表不一定是有序的(对于BETWEEN运算符)。

如果这是SQL,则如下所示:

SELECT * from Table where id={id} AND origin IN {origin_list}
我的确切问题是:要以最有效的方式实现此功能,我需要做些什么?我应该改变我的桌子结构吗?也许可以加个GSI?接受建议。

我知道这可以通过扫描操作来实现,但我希望有一个高效的查询。BatchGetItem也是如此,除非绝对必要,否则我宁愿避免使用该功能。

谢谢

推荐答案

这是一个使用过滤表达式进行查询的案例。它有IN运算符

Comparison Operator

a IN(b,c,d)-如果a等于列表中的任意值,则为TRUE-FOR 例如,b、c或d中的任何一个。该列表最多可以包含100个值, 用逗号分隔。

但是,不能对键属性使用条件表达式。

Filter Expressions for Query

过滤表达式不能包含分区键或排序键 属性。您需要在关键条件中指定这些属性 表达式,而不是过滤表达式。

因此,您可以在查询后使用Origin而不是作为排序关键字(或使用另一个属性复制它)过滤它。当然,过滤首先读取所有具有该‘id’的条目,然后进行过滤,这会消耗读取容量,并且效率较低,但除此之外,没有其他方法可以查询。根据您的项目大小、查询频率和估计的返回项目数量,BatchGetItem可能是更好的选择。

这篇关于使用分区键和特定排序键列表查询DynamoDB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆