DynamoDB 需要 GSI 上 ExclusiveStartKey 的所有字段,为什么?

Mic*_*ego 7 pagination amazon-dynamodb

我正在尝试使用 DynamoDB 实现基于游标的分页(在 DynamoDB 中进行分页绝对不容易......),使用ExclusiveStartKey.

我的表索引由“id”组成,而“owner”(分区键)和“created_at”(范围键)上有一个 GSI。

query通过指定 GSI 索引并使用“owner”属性,我可以使用请求轻松检索前 10 条记录。

但是,在下一个请求中,ExclusiveStartKey只有当我指定两个索引中的三个元素(因此“id”、“owner”和“created_at”)时,才有效。

虽然我理解“id”和“owner”,因为它们都是分区键并且需要“定位”记录,但我不明白为什么 DynamoDb 要求我指定“created_at”。这很烦人,因为这意味着消费者不仅必须提交“id”作为游标,还必须提交“created_at”。

由于DynamoDb可以使用“id”(保证唯一)找到记录,为什么我需要指定这个created_at?

谢谢

Ale*_*kis 2

GSI 主键不一定是唯一的。基表键对于回答以下问题是必要的:“对于给定的所有者和创建日期,我在此页面中读到的 ID 最多为多少?”。换句话说,您可以拥有多个具有相同所有者和创建日期的项目。