我正在尝试从 dynamo 数据库表中检索固定数量(暂时将其设为 5)的项目。
这是我正在使用的代码。
response = table.query(
KeyConditionExpression=Key('pk').eq('goo'),
Limit=5,
FilterExpression=Attr('goo').eq('bar'))
我只能从中得到 4 件元素。但是如果我删除 FilterExpression,项目计数将为 5。那么即使我使用 FilterExpression,还有其他方法可以获取固定数量的项目吗?
最佳答案
从表中读取项目后应用过滤表达式,以减少通过线路发送的记录数量。 Limit 在查询操作期间应用,即在过滤表达式之前。
如果 Query
读取了 5 个项目,而其中只有 4 个与 FilterExpression
匹配,您将仅返回 4 个项目。
务实的做法是从查询
中删除限制并在客户端应用限制。缺点是您可能需要支付更多读取容量单位的费用。
如果您想避免这种情况,您可能必须重新考虑您的数据模型 - 通用解决方案在这里很困难。
在您的特定情况下,您可以使用分区键pk
和排序键goo
创建全局二级索引(它不对于 GSI 来说必须是唯一的)。然后,您可以针对限制为 5 的 GSI 发起查询,它将给出您想要的结果。 但是:您需要为 GSI 存储 + 吞吐量付费。
编辑:This question is pretty much a duplicate except for the Python code
关于python - 使用过滤器表达式从 dynamo db 查询返回固定数量的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75015994/