Amazon web services 更新某些项目时扫描DynamoDb

Amazon web services 更新某些项目时扫描DynamoDb,amazon-web-services,amazon-dynamodb,dynamodb-queries,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,当我在DynamoDb上运行扫描操作时,我可以使用作为响应的一部分返回的LastEvaluatedKey,以获得下一个可用项目的扫描。我可以重复这个过程,直到它不再返回LastEvaluatedKey,表明没有更多的项目要扫描 我的问题是,如果在扫描操作的中间,从扫描过程中检索到的一些项目被更新(放置),我应该期待这些项目再次出现吗?< P>不——如果您已经检索到一个项目,则即使在修改后,也不会在相同的扫描< /代码>操作中再次检索它。此外,如果您的修改添加了一个新的项目,则正在进行的扫描可能会

当我在DynamoDb上运行扫描操作时,我可以使用作为响应的一部分返回的
LastEvaluatedKey
,以获得下一个可用项目的扫描。我可以重复这个过程,直到它不再返回
LastEvaluatedKey
,表明没有更多的项目要扫描


我的问题是,如果在扫描操作的中间,从扫描过程中检索到的一些项目被更新(放置),我应该期待这些项目再次出现吗?

< P>不——如果您已经检索到一个项目,则即使在修改后,也不会在相同的<代码>扫描< /代码>操作中再次检索它。此外,如果您的修改添加了一个新的项目,则正在进行的扫描可能会返回该新项目,也可能不会返回该项目-您不知道

要了解这种情况的原因,您需要了解
Scan
的实际工作原理:

尽管DynamoDB不保证分区键之间的排序顺序,但在其内部实现中,分区键有一定的顺序(基于键的哈希函数-这就是为什么在一些DynamoDB文档中这些键也称为哈希键的原因)。
Scan
按此散列顺序迭代分区键,并且不会返回。如果扫描传递了散列值中的某个位置,它将不会再次传递该位置,尤其是具有相同分区键的相同项将不会再次被检索,并且将检索或不检索新项,具体取决于新项的分区键是在扫描的当前位置之前还是之后

如果你真的需要在发生这些新的修改时,你应该考虑使用DeaDoDB的“流”特性代替-----或者除了-<代码>扫描< /代码>。DynamoDB的流特性允许您在数据库发生修改时读取对数据库的所有修改。一些应用程序结合了

扫描
来读取现有项目,以及流来读取扫描开始后修改的项目