首页 > 解决方案 > MongoDB 5.0 时间序列集合、元字段和“其他”字段

问题描述

timeseries 集合是使用 1 个必需参数创建的,timeField以标识入站文档中的哪个字段包含将用于系列分桶的 BSON 日期时间值。这metaField是可选的,MongoDB 文档如此描述它:

The name of the field which contains metadata in each time series document.
The metadata in the specified field should be data that is used to label a
unique series of documents.
The metadata should rarely, if ever, change.

这很好,但是通过声明 a 来启用哪些特殊行为/功能metaFieldmetaField当然支持查询,但在我的实验中,将数据放在“包装器”中与仅具有额外的离散字段之间似乎没有区别,例如:

tscoll.insert({timestamp: dtval, meta: {area: "X", flavor: "Z"}, val: 444});
tscoll.find({"meta.flavor":"Z"});
or
tscoll.insert({timestamp: dtval, area: "X", flavor: "Z", val: 444});
tscoll.find({"flavor":"Z"});

这是一个以约定为导向的设计指南,可以清楚地区分时间戳、收集的值(可以是多个)以及 1 个或多个附加数据吗?

标签: mongodbtime-series

解决方案


正如前面评论中提到的:

“元字段(如果存在)应该对时间序列数据进行分区,以便具有相同元数据的测量随着时间的推移而相关。一段时间内具有公共元字段的测量将在内部分组在一起,以消除该字段在存储中的重复层。” —来源

John Page 在他的介绍视频中解释并可视化了这种存储优化,并将其与未针对时间序列优化的数据库进行比较。tldr 是:

Mongodb 5时间序列元字段存储优化


推荐阅读