当查询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能够找到下一批项。