Docs 菜单
Docs 主页
/
MongoDB Manual
/

关于查询时间序列数据

在此页面上

  • 查询 metaField
  • 查询 timeField
  • 块处理

MongoDB 使用匹配的 元字段对文档进行分组,以优化时间序列数据的存储和查询延迟。您选择 metaField 对优化应用程序中的查询的影响最大。

查询时间序列集合的方式与查询标准 MongoDB 集合的方式相同。有关查询和聚合管道示例,请参阅查询时间序列集合。有关查询最佳实践的列表,请参阅查询最佳实践

针对时间序列数据的查询通常侧重于集合中的单个时间序列。例如,考虑使用以下模式跟踪股票数据的时间序列集合:

{
_id: 573a1397f29313caabce8347,
"ticker": "MDB",
"timestamp": ISODate("2024-07-24T13:45:00.000Z"),
"price": 248.21,
"volume": 6930
}

该集合有以下设置:

timeseries: {
timeField: "timestamp",
metaField: "ticker",
granularity: "seconds"
}

MongoDB 对具有匹配的 ticker 值的文档进行分组。服务器不必检查所有文档中所有字段的匹配项,而只需检查 metaField,在本例中为 ticker,即可将搜索范围缩小到唯一的时间序列。这符合预期的应用场景,即搜索单个股票上的活动。搜索有关 MongoDB 股票 (MDB) 信息的用户无需考虑 Amazon (AMZN) 的结果。

查询时间序列数据的第二个主要维度是时间。由于 MongoDB 对具有相同 metaField 值和接近 timeField 值的文档进行分组,这会进一步将查询范围缩小到存储桶范围。最近的事务都保存在内存中,因此可以轻松实时传输数据。

从版本 8.0 开始,MongoDB 可以使用块处理来执行某些时间序列查询。这一性能改进利用数据“块”而不是单个值来处理查询。当使用时间序列集合时,块处理可提高查询执行速度和吞吐量。

区块处理可显着提高性能并减少长时间运行的聚合管道的开销,这些管道从以下阶段开始:

  • $match

  • $sort,如果用于 timeField

  • $group

MongoDB 自动为符合条件的时间序列查询启用区块处理。无法手动指定查询是否使用块处理。

要查看时间序列查询是否使用块处理,请参阅解释计划输出中的 stages

后退

分片集合