时间序列数据是一系列数据点,可通过分析一段时间内的变化来获得见解。
时间序列数据通常由以下部分组成:
时间:表示数据点的记录时间。
元数据:用于标识数据系列且很少更改的标签或标记。元数据存储在
metaField中。在创建时间序列文档后,您无法再添加metaField字段。元数据也称为source。有关更多信息,请参阅 metaFields。指标:在时间增量中跟踪的单个数据点,通常显示为随时间变化的键值对。指标也称为值。
度量:在特定时间点包含所有指标数据的文档。一次测量包括时间、元数据以及在该时刻记录的所有指标。
下表给出时间序列数据的示例:
例子 | 衡量标准 | 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 中托管的部署创建时间序列集合。
重要
向后不兼容功能
必须在降级之前删除时间序列集合:
MongoDB 6.0 或更高版本到 MongoDB 5.0.7 或更早版本。
MongoDB 5.3 到 MongoDB 5.0.5 或更早版本。
收益分析
与普通集合相比,在时间序列集合中存储时间序列数据可提高查询效率,减少时间序列数据和 二级索引的磁盘使用量。MongoDB 6.3 及更高版本会自动为新的时间序列集合创建时间和元数据字段的复合索引。
时间序列集合使用底层列式存储格式并按时间顺序存储数据。此格式具有以下优点:
降低处理时间序列数据的复杂性
提高查询效率
减少磁盘使用量
减少读取操作的 I/O 量
提高 WiredTiger 缓存使用率
使用案例示例
时间序列集合最适合分析一段时间内的数据。下表说明了时间序列数据的使用案例:
行业 | 示例 |
|---|---|
物联网 (IoT) |
|
金融服务 |
|
零售和电子商务 |
|
开发运营 |
|
时间序列集合不适用于以下类型的数据:
无序数据
不依赖时间的数据
行为
时间序列集合的行为通常与其他MongoDB集合类似。
警告
更新命令中的匹配表达式只能指定 metaField。您无法更新时间序列文档中的其他字段。有关更多详细信息,请参阅时间序列更新限制。
MongoDB 将时间序列集合视为由内部集合支持的可写入非物化视图。插入数据时,内部集合会自动将时间序列数据组织成优化的存储格式。
从 MongoDB 6.3 开始:如果创建新的时间序列集合,MongoDB 还会在 metaField 和 timeField 字段上生成复合索引。为了提高查询性能,对时间序列集合的查询使用新的复合索引。复合索引也采用优化的存储格式。
警告
从MongoDB 8.0 开始,时间序列集合中包含 timeField 的分片键已被弃用。
此外,从 MongoDB 8.0 开始,如果您创建一个包含 timeField 的分片键的时间序列集合,则日志消息将添加到主分片上的日志文件中。此外,每 12 小时会在配置服务器副本集的主节点上添加一条日志消息。日志信息显示,在时间序列集合中使用 timeField 作为分区键已被弃用,您必须使用 metaField 对集合重新分区。
metaFields
时间序列文档可以包含 metaField。MongoDB 使用 metaField 对文档进行分组,以优化存储并提高查询效率。有关 metaField 的更多信息,请参阅 metaField 注意事项。
索引
MongoDB 会自动在时间序列集合的 metaField 和 timeField 上创建复合索引。
区域分片
区域分片不支持时间序列集合。负载均衡器始终将分片时间序列集合中的数据均匀地分布在集群中的所有分片上。
后续步骤
如要开始使用时间序列集合,请参阅以下页面上的教程: