DynamoDB:: 在 table 扫描正在进行时添加新项目时,lastevaluatekey 是否会更改?

DynamoDB:: Does lastevaluatekey change when a new item is added while table scan is in progress?

场景:

  1. DynamoDB table 正在使用基于时间的过滤器表达式进行扫描,使用分页,我们收到 lastevaluatedkey。
  2. table 中添加了一些项目。 (它们是根据哈希函数添加的,所以它们不是在 table 中连续添加的,这让我想到了第 3 点)
  3. 扫描正在从上次评估的密钥开始连续执行。添加了新项目,这是否会更改下一个已删除密钥?在 lastevaluatedkey 发生变化时,我们可以说一些旧数据丢失了吗?

(PS: 如果没有返回新添加的数据,并且不使用“一致读取”,我没关系)

LastEvaluatedKey 就像主键键空间中的书签,对最后处理的项目的散列键的引用。然后,当您将其作为 ExclusiveStartKey 传递时,扫描将在连续的哈希集中找到带有书签的项目位置,并开始处理下一个项目。它基本上只是说“开始新的扫描,并从这个哈希值之后的键开始”。

如果您在键之前修改 table 中的项目,它们将不会在扫描中,因为您在它们之后恢复了扫描。如果您修改键后保留的 table 中的项目,它们可能会在扫描中。

把它想象成你正在阅读字典中的所有单词。 LastEvaluatedKey 是您阅读的最后一个单词。也许 OED 会在您阅读的单词之前或之后添加单词,也许您会在阅读时获得 OED 的新更新副本。您的扫描仍会继续使用您上次阅读的单词之后的单词。即使您上次阅读的单词从 OED 中删除,也不会使您的扫描无效,您可以继续阅读字典中的下一个单词。