如果设置了限制,如何获取DynamoDB中的页面总数?

时间:2019-07-04 04:26:33

标签: javascript node.js amazon-dynamodb dynamodb-queries

我有一个存储在 DynamoDB 中的文档列表。数据库中存储了超过 10,000 个文档。我已在请求时将限制设置为 100 DynamoDB 做得很好,向我返回了前 100 个文档和LastEvaluatedKey以获取下一个 100 个文档。

这里的问题是我还希望 DynamoDB 向我返回用于分页的页面总数。在这种情况下,由于我有 10,000 个文档,因此应返回 100 (分页数)

目前,我所做的是,我一直在通过循环查询进行手动计数,直到没有返回LastEvaluatedKey。累加完成了多少循环才能获得总页面。但是我相信有更好的方法。

3 个答案:

答案 0 :(得分:1)

Scan”(以读取整个表)或“ Query”(以读取具有相同分区键的所有项目)操作都不会返回对总共有多少结果的估计。在某些情况下(例如,当提供FilterExpression时),DynamoDB没有有效的方法来执行此估计。在其他情况下,DynamoDB可能会提供一种方式来提供此信息,但事实并非如此。

如果我对您的理解正确,那么您想Scan整个表格,没有过滤器。就像我说的那样,Scan本身并没有为您提供表中的项目数。但是您可以使用DescribeTable找到该数字,该数字除其他外返回“ ItemCount”属性,该属性是对表中项目总数的估计,该数量可能未完全增加到现在为止,但也许足以满足您的需求(如果您需要某种进度报告的估计,就不必100%准确)。

如果您确实需要对分区或整个表中的项目进行准确且最新的计数,则可以始终尝试将此类计数器维护为单独的数据。正确执行此操作并非易事,并且会影响性​​能,但是在某些用例(例如,罕见的写入和大量的读取)中可能会有用。

答案 1 :(得分:1)

正如其他答案已正确解释的那样,没有有效的方法来获取DynamoDB查询或扫描操作的总结果计数。因此,没有有效的方法来获取总页数。

但是,我想指出的是,现代UI已经从经典的分页转向无限滚动设计模式。滚动列表时,按需加载结果的“下一页”。这可以通过DynamoDB实现。您仍然可以显示不连续的页面,但不能先验地显示多少结果或多少页面。这是DynamoDB当前的缺点。

答案 2 :(得分:0)

您可以使用DynamoDB流维护自己的计数-基本上,您可以创建Lambda函数来监视正在创建/删除的项目,然后写回DynamoDB中存储当前项目计数的计数器项目。