删除分页查询循环中的 DynamoDB 项目

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

查询 DynamoDB 表时,您可能会返回一个

LastEvaluatedKey
参数,表示结果已分页,并且
LastEvaluatedKey
是此页面中处理的最后一项的主键。要获取下一页,应向
ExclusiveStartKey
提供上一页中
LastEvaluatedKey
的值。

但是,如果查询所有项目并在该循环内删除某些项目,我很好奇 DynamoDB 如何处理像

ExclusiveStartKey
引用刚刚删除的项目这样的场景。获取下一页会失败吗?或者 DynamoDB 是否会为了并发查询和删除而维护已删除的键?

示例:

项目:

A, B, C, D, E, F, G, H

Query({ExclusiveStartKey: undefined}) => A, B, C, D and LastEvaluatedKey: D
Query({ExclusiveStartKey: D}) => E, F, G, H and LastEvaluatedKey: undefined

但是,如果我(或并发场景中的另一个客户端)删除这两个语句之间的项目

D
会发生什么?下一页是否会作为
E, F, G, H
返回,还是不会返回任何项目,因为由于
D
不再存在而无法找到中断的位置?

我不想简单地进行快速测试来确定它是如何工作的,因为可能存在一些因素,例如密钥在删除后一段时间内有效,或者并发/复制/事务问题,所以我'我正在寻找更明确的答案。我在涉及此案例的文档中找不到任何内容。

amazon-dynamodb dynamodb-queries
2个回答
3
投票

如果我理解正确,您关心的是在删除与分页令牌(您保留的最后一个EvaluatedKeys)关联的项目后,DynamoDB 分页是否仍然有效。如果这是问题所在,那么即使项目被删除后,分页仍然有效。您仍然可以使用“过时的”lastEvaluatedKeys 进行下一次分页调用,并且 DynamoDB 能够找到下一批项目。


0
投票

@jhh - 你得到这个问题的答案了吗?

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