计算具有相同字段的分区中的文档

Counting documents in partition with identical field

假设我有一个具有以下架构的分区:

{ type: "car", failure: "gas-pedal" }
{ type: "truck", failure: "clutch" },
{ type: "motorbike", failure: "gas-pedal" }
...

假设我想高效地访问给定 failure 类型的出现次数(在本例中为 2)。

最简单的方法是什么?

编辑:type 将是主分区键,failure 是排序键。

DynamoDB 不支持聚合。 DynamoDB 没有 SQL 等同于

select count(*) from <mytable> where <attribute> = ...

作为 NoSQL 数据库,DynamoDB 要求您根据应用程序访问模式设计数据模型。在这种情况下,如果您的应用程序需要按类型对属性进行计数,您有几个选择:

  1. 执行 scan 操作以按故障类型获取所有属性并计算返回的记录数。对于常见的访问模式或大型数据集,通常应避免使用 scan 操作,因为它会检查数据库中的每个项目。这可能效率低下且成本高昂,但却是实现您想要的目标的最简单方法。

  2. 维护失败类型的计数,当失败为 inserted/updated 时您将更新这些失败类型。例如,您可以使用 PK=FAILURE 和 SK= 以及计数属性创建记录:

PK SK count
FAILURE gas-pedal 2
FAILURE clutch 1

每次插入失败类型的记录时,都会使用 atomic counter 更新 FAILURE 分区中该类型的计数。您可以在 insert/update 具有 failure 属性的项目(例如,在批处理或事务操作中)或使用 DynamoDB 流处理包含 failure 属性的记录的同时执行此操作。

这两种方法都与您在 SQL 数据库中执行此操作的方式不同,这是使用 DynamoDB 和 NoSQL 数据库时的常见主题。