我的应用程序从DynamoDB支持的第三方REST API中提取数据。结果是分页的,因此我通过将最后一个评估的密钥传递给每个后续请求来向前翻页。
我的问题是最后评估的密钥是否具有保质期?它会过期吗?
我们说我查询REST API然后决定停止。如果我保存最后一次评估的密钥,可以准确地选择我之后 30天的确切位置?那最后评估的密钥是否仍然有效并根据我之前离开的位置返回正确的下一页?
答案 0 :(得分:3)
您不应该将最后一个评估的密钥视为结果集中的“占位符”或“书签”,以便从中恢复暂停的迭代。
你应该把它想象成一个“从”开始的地方标记。一个例子可能有帮助。假设您有一个包含哈希键userId
和范围键timestamp
的表。范围键timestamp
将为您的结果集提供排序。说你的桌子看起来像这样:
user ID | Timestamp
1 | 123
1 | 124
1 | 125
1 | 126
按此顺序,当您在表中查询userId
1
的所有记录时,您将按照上面列出的顺序获取记录,或按时间戳按升序排列。如果你想按降序返回它们,你可以使用Dyanmo DB的scanIndexForward
标志来指示它们“从最新到最旧”或按时间戳降序排列。
现在,假设表中有超过4个项目,并且需要多个查询才能返回userId
为1的所有记录。好吧,你不希望不得不继续获取页面和页面,这样你就可以告诉Dynamo DB从哪里开始给它最后一个评估的密钥。假设上一个查询的最后一个结果是userId = 1
和timestamp = 124
的记录。您在查询中告知Dynamo这是您获得的最后一条记录,它将使用包含userId = 1
和timestamp = 125
的记录开始您的下一个结果集。
因此,最后评估的密钥不会“过期”,这是您与Dynamo进行通信的一种方式,您希望它根据您已经处理过的记录,向用户显示等返回的记录。