在分页查询循环中删除DynamoDB项



当查询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不存在了吗?

我不想简单地执行一个快速测试来确定它是如何工作的,因为可能有一些因素,比如键在被删除后一段时间内有效,或者并发/复制/事务问题在起作用,所以我正在寻找一个更确定的答案。我在文档中找不到关于这种情况的任何内容。

如果我理解正确,您关心的是在删除与分页令牌(您保留的lastEvaluatedKeys)相关的项后,DynamoDB分页是否仍然有效。如果是这个问题,那么即使在条目被删除后分页仍然可以工作。您仍然可以使用'stale' lastEvaluatedKeys来进行下一个分页调用,并且DynamoDB能够找到下一批项。

相关内容

  • 没有找到相关文章

最新更新