【问题标题】:How does DynamoDB LastEvaluatedKey work internally?DynamoDB LastEvaluatedKey 如何在内部工作?
【发布时间】:2020-05-19 12:18:04
【问题描述】:
DynamoDB 文档(例如 here)解释了如何使用 LastEvaluatedKey 对结果进行分页。我知道它有效,但我想了解如何。据我所知,DynamoDB 在分区键上构建了一个无序哈希索引。这不应该意味着如果你给它一个键,它不知道哪些键在它之前或之后——因为它没有排序?那么它如何知道哪些键跟随LastEvaluatedKey?这个索引是如何工作的?是否只是附加了新项目/密钥?删除的项目/密钥会怎样?
【问题讨论】:
标签:
amazon-web-services
amazon-dynamodb
【解决方案1】:
您也已链接的 Query() 仅对复合(分区 + 排序)键有用,因此结果集是有序的。
Scan() 可以仅与分区键一起使用。所以从某种意义上说,结果在给定的分区内是“无序的”。就此而言,我不保证逻辑第一个分区键将是第一个扫描的分区。
然而,亚马逊并不神奇。数据仍然有一些物理(和/或逻辑)顺序,他们可能不会发布内部信息,而且您今天看到的顺序可能不是您明天看到的顺序。但是 Scan() 根据定义,从开头开始到结尾。如果没有中间的顺序,就不可能有开始或结束。