首页 > 解决方案 > 如何在 DynamoDB 中使用 where 条件获得计数

问题描述

让我们说,我们有一种情况,不是获取表中的总计数,而是获取具有特定状态的记录计数。我们知道 DynamoDb 是无模式的,并且仍然必须对每条记录逐一计数才能获得总计数。然而,我们如何使用 dynamoDb 查询来利用上述需求?

标签: amazon-dynamodbdynamodb-queries

解决方案


虽然通常“查询”或“扫描”请求会返回所有匹配项目,但您可以传递 Select=COUNT 参数并要求仅检索匹配项目的数量,而不是实际项目。但在你这样做之前,你应该知道一些事情:

  1. DynamoDB 仍将读取 - 您仍将支付- 所有数据,即使只是为了被计算在内。使用过滤器进行“扫描”几乎在所有情况下都是不可能的,因为它每次都会读取整个数据集。使用“查询”,您可以要求仅读取一个分区,或一个分区中的一系列连续排序键,这在某些情况下可能是足够合理的(但请在您的用例中考虑是否如此)。

  2. 即使您实际上并没有读取数据,只是计数,DynamoDB 仍然使用“分页”进行扫描和查询,即您的读取请求将仅从磁盘读取 1MB 数据,返回部分计数,并要求您提交另一个请求以恢复扫描。您的 DynamoDB 库可能有一种方法可以自动执行此恢复,例如,它可以运行数千个或任何所需数量的查询,直到最终完成扫描并计算总和。

  3. 在某些情况下,除了数据之外,维护一个计数器可能是有意义的。写入会更昂贵(例如,每次写入都会添加数据并递增计数器),但需要此计数器的读取会非常便宜 - 所以这完全取决于您的工作负载需要多少。


推荐阅读