时间序列数据是一系列数据点,可通过分析一段时间内的变化来获得见解。
时间序列数据通常由以下部分组成:
时间:表示记录数据点的时间。
元数据:标识数据系列且很少更改的标签或标签。元数据存储在 中。在创建时间序列文档后,您无法将
metaField
metaField
字段添加到该文档中。元数据也称为source
。指标:按时间增量跟踪的单个数据点,通常显示为随时间变化的键值对。指标也称为值。
测量值:包含特定时间点所有指标数据的文档。测量值包括时间、元数据以及当时记录的所有指标。
下表给出时间序列数据的示例:
例子 | 衡量标准 | Metadata |
---|---|---|
stockdata | 股票价格 | 证券报价机、交易所 |
天气数据 | 温度 | 传感器标识符、位置 |
网站访客 | 查看计数 | URL |
MongoDB 提供了时间序列集合实现高效率的时间序列数据存储。
以下示例显示了天气数据的测量文档:
{ "timestamp": ISODate("2025-08-19T12:00:00Z"), "metaField": { "sensorId": "A1234", "location": { "city": "New York", "state": "NY" } }, "temperature": 25.4, "humidity": 48.2, "pressure": 1012.5, "windSpeed": 5.2, "windDirection": "NW" }
在此示例中,测量值包含:
显示数据记录时间的时间戳。
标识传感器及其位置的元数据。
在给定时间收集的多个指标,包括温度、湿度、压力、风速和风向。
时间序列集合
版本 5.0 中的新增功能。
时间序列集合可提供储时间序列数据的效率。在时间序列集合中,写入操作的组织方式保证同源数据与来自相似时间点的其他数据点一起存储。
您可以在用户界面中为 MongoDB Atlas 中托管的部署创建时间序列集合。
收益分析
与普通集合相比,在时间序列集合中存储时间序列数据可提高查询效率,减少时间序列数据和 二级索引的磁盘使用量。
time-series collection使用底层列式存储格式,并使用自动创建的集群索引按时间顺序存储数据。列式存储格式具有以下优点:
降低处理时间序列数据的复杂性
提高查询效率
减少磁盘使用量
减少读取操作的 I/O 量
提高 WiredTiger 缓存使用率
行为
时间序列集合的行为与普通集合相同。您可以像平常一样插入和查询数据。
MongoDB 将时间序列集合视为由内部集合支持的可写入非物化视图。插入数据时,内部集合会自动将时间序列数据组织成优化的存储格式。
查询时间序列集合时,每次测量都会对一个文档进行操作。 对时间序列集合的查询利用优化的内部存储格式,更快地返回结果。
提示
为提高查询性能,您可以在测量字段或时间序列集合中的任何字段上手动添加二级索引。
重要
向后不兼容的功能
必须在降级之前删除时间序列集合:
MongoDB 6.0 或更高版本到 MongoDB 5.0.7 或更早版本。
MongoDB 5.3 到 MongoDB 5.0.5 或更早版本。
区域分片
区域分片不支持时间序列集合。负载均衡器始终将分片时间序列集合中的数据均匀地分布在集群中的所有分片上。
内部索引
创建时间序列集合时,MongoDB 会自动在时间字段上创建内部聚集索引。 此索引可提高查询效率并减少磁盘使用量。 要详细了解集群化索引的性能优势,请参阅集群化集合。
注意
如果在1970-01-01T00:00:00.000Z
之前或2038-01-19T03:14:07.000Z
之后将文档插入到具有timeField
值的集合中,MongoDB 会记录警告并阻止某些查询优化使用内部索引。 在timeField
上创建二级索引,以恢复查询性能并解决日志警告问题。
开始体验
如要开始使用时间序列集合,请参阅创建和查询时间序列集合。