首页 > 解决方案 > 计算分区中具有相同字段的文档

问题描述

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

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

假设我想有效地访问给定failure类型的出现次数(在这种情况下是2)。

什么是最简单的方法?

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

标签: amazon-dynamodb

解决方案


DynamoDB 不支持聚合。DynamoDB 没有 SQL 等价物

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

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

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

  2. 维护插入/更新故障时更新的故障类型的计数。例如,您可以使用 PK=FAILURE 和 SK= 创建一个带有计数属性的记录:

PK SK 数数
失败 油门踏板 2
失败 离合器 1

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

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


推荐阅读