amazon-dynamodb - 计算分区中具有相同字段的文档
问题描述
假设我有一个具有以下架构的分区:
{ 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 要求您根据应用程序访问模式设计数据模型。在这种情况下,如果您的应用程序需要按类型计算属性,您有几个选择:
执行
scan
操作以按故障类型获取所有属性并计算返回的记录数。对于常见的访问模式或大型数据集,通常应避免该scan
操作,因为它将检查数据库中的每个项目。这可能效率低下且成本高昂,但却是实现您想要的最简单的方法。维护插入/更新故障时更新的故障类型的计数。例如,您可以使用 PK=FAILURE 和 SK= 创建一个带有计数属性的记录:
PK | SK | 数数 |
---|---|---|
失败 | 油门踏板 | 2 |
失败 | 离合器 | 1 |
每次插入具有失败类型的记录时,都会使用原子计数器更新 FAILURE 分区中该类型的计数。您可以在插入/更新带有failure
属性的项目(例如在批处理或事务操作中)或使用 DynamoDB 流处理包含该failure
属性的记录的同时执行此操作。
这两种方法都不同于您在 SQL 数据库中执行此操作的方式,这是使用 DynamoDB 和 NoSQL 数据库时的常见主题。
推荐阅读
- python - 熊猫:丢弃值之前的行,包括另一列的值
- r - 在 quo() 中使用字符串并在 rlang 包中获取字符串本身内部的表达式
- javascript - 从对象解构属性会引发错误
- python - twinx 和 twiny 来自两个不同的轴
- jquery - jQuery Inputpicker 插件:字段没有响应,但箭头到达另一边
- dc.js - 检索 dc 图表轴生成器(来自 DOM)
- sql - 语法错误。在查询中(MS Access sql)
- python - 如何使用 abapy 提取不同的字段输出数据?
- python - os.system 功能不会清屏
- azure-service-fabric - Azure Service Fabric - 大型跟踪日志文件夹