关于查询时间序列数据
在此页面上
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) 的搜索结果。
查询 timeField
查询时间序列数据的第二个主要维度是时间。由于MongoDB会对具有相同metaField
值和相近timeField
值的文档进行分组,因此这将查询范围进一步缩小到范围存储桶。最近的事务保存在内存中,因此可以轻松地实时流数据。
块处理
从版本 8.0 开始,MongoDB 可以使用块处理来执行某些时间序列查询。这一性能改进利用数据“块”而不是单个值来处理查询。当使用时间序列集合时,块处理可提高查询执行速度和吞吐量。
MongoDB自动为符合条件的时间序列查询启用区块处理。您无法手动指定查询是否使用区块处理。要查看时间序列查询是否使用区块处理,请参阅解释计划输出中的stages
。