文档菜单
文档首页
/
MongoDB 手册

时间序列

在本页

  • 时间序列集合
  • 好处
  • 示例用例
  • 行为
  • 元字段
  • 索引
  • 入门

时间序列数据是一系列数据点,通过分析随时间的变化来获得洞察。

时间序列数据通常由以下组件组成

  • 时间 数据点被记录的时间。

  • 元数据(有时称为源),它是一个标识数据序列的标签或标记,很少更改。元数据存储在元字段中。在创建它们之后,您不能向时间序列文档添加元字段。有关元字段行为和选择的更多信息,请参阅元字段.

  • 测量值(有时称为度量或值),它们是在时间增量中跟踪的数据点。通常这些是随时间变化的键值对。

此表显示了时间序列数据的示例

示例
测量值
元数据
股票数据
股票价格
股票代码,交易所
天气数据
温度
传感器标识符,位置
网站访问者
查看次数
URL

为了高效地存储时间序列数据,MongoDB提供了时间序列集合。

版本5.0.

时间序列集合高效地存储时间序列数据。在时间序列集合中,写入是组织好的,以便来自同一来源的数据与来自类似时间点的其他数据点一起存储。

重要

向后不兼容的功能

在降级之前,您必须删除时间序列集合

  • MongoDB 6.0 或更高版本到 MongoDB 5.0.7 或更早版本。

  • MongoDB 5.3 到 MongoDB 5.0.5 或更早版本。

与普通集合相比,将时间序列数据存储在时间序列集合中可以提高查询效率,并减少时间序列数据和二级索引的磁盘使用量。MongoDB 6.3 和更高版本自动为新的时间序列集合在时间和元数据字段上创建一个 复合索引

时间序列集合使用底层的列式存储格式,并按时间顺序存储数据。此格式提供了以下优势

  • 降低处理时间序列数据时的复杂性

  • 提高查询效率

  • 减少磁盘使用

  • 减少读取操作的I/O

  • 增加WiredTiger缓存使用

时间序列集合适用于分析随时间变化的数据。以下表格展示了时间序列数据的用例

行业
示例
物联网(IoT)
  • 传感器数据(例如,智能家居设备或车队物流)

  • 机器学习和人工智能抓取

金融服务
  • 高频交易

  • 金融量化分析

  • 银行数据(例如,随时间进行的银行交易核算)

  • 股市数据

零售和电子商务
  • 交易、销售和价格分析

  • 库存管理

DevOps
  • 应用程序日志

  • 基础设施和网络监控

时间序列集合不适用于以下类型的数据

  • 无序数据

  • 非时间依赖性数据

时间序列集合通常与其他MongoDB集合类似。您像往常一样插入和查询数据。

警告

更新命令中的匹配表达式只能指定metaField。您不能更新时间序列文档中的其他字段。有关更多详细信息,请参阅时间序列更新限制。

MongoDB将时间序列集合视为由内部集合支持的、可写入的非物化视图。当您插入数据时,内部集合自动将时间序列数据组织成优化的存储格式。

从 MongoDB 6.3 开始:如果您创建一个新的时间序列集合,MongoDB 还会在元字段和时间字段上生成一个复合索引。为了提高查询性能,时间序列集合上的查询使用新的复合索引。复合索引还使用优化的存储格式。

警告

不要尝试使用以下名称创建时间序列集合或视图:system.profile。如果您尝试这样做,MongoDB 6.3 及更高版本将返回一个 IllegalOperation 错误。早期版本的 MongoDB 将崩溃。

从 MongoDB 8.0 开始,将 timeField 用作时间序列集合中的分片键已被弃用。

此外,从 MongoDB 8.0 开始,如果您创建一个包含 timeField 的分片键的时间序列集合,将在 日志消息 中添加到日志文件,该文件位于 主分片 上。此外,每12小时在 配置服务器副本集 的主节点上添加一个日志消息。日志消息表明,使用 timeField 作为时间序列集合中的分片键已被弃用,您必须使用 metaField 重新分片您的集合。

时间序列文档可以包含一个 metaField,其中包含关于每个文档的元数据。MongoDB 使用 metaField 对文档组进行分组,以提高内部存储优化和查询效率。有关 metaField 的更多信息,请参阅metaField 考虑事项

MongoDB 自动在时间序列集合的 metaField 和 timeField 上创建一个复合索引

要开始使用时间序列集合,请参阅创建和查询时间序列集合。

返回

参考