时间序列
时间序列数据是一系列数据点,可通过分析一段时间内的变化来获得见解。
时间序列数据通常由以下部分组成:
记录数据点的时间。
元数据(有时称为源)是唯一标识一个系列并且很少更改的标签。元数据存储在 metaField 中。创建时间序列文档后,您无法将元字段添加到其中。有关 metaField 行为和选择的更多信息,请参阅 metaFields。
测量(有时称为指标或值)是按时间增量追踪的数据点。一般来说,这些是随时间变化的键值对。
下表给出时间序列数据的示例:
例子 | 测量 | Metadata |
---|---|---|
stockdata | 股票价格 | 证券报价机、交易所 |
天气数据 | 温度 | 传感器标识符、位置 |
网站访客 | 查看计数 | URL |
MongoDB 提供了时间序列集合实现高效率的时间序列数据存储。
时间序列集合
版本 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 字段上生成复合索引。为了提高查询性能,对时间序列集合的查询使用新的复合索引。复合索引也采用优化的存储格式。
警告
不要尝试创建名称为 system.profile
的时间序列集合或视图。如果您尝试这样做,MongoDB 6.3 及更高版本会返回 IllegalOperation
错误。早期 MongoDB 版本会因此崩溃。
从MongoDB 8.0开始,不推荐使用timeField
作为时间序列集合中的分分片键。
此外,从 MongoDB 8.0 开始,如果您创建一个包含 timeField
的分片键的时间序列集合,则日志消息将添加到主分片上的日志文件中。此外,每 12 小时会在配置服务器副本集的主节点上添加一条日志消息。日志信息显示,在时间序列集合中使用 timeField
作为分区键已被弃用,您必须使用 metaField
对集合重新分区。
metaFields
时间序列文档可以包含一个元字段,其中包含每个文档的元数据。MongoDB 使用元字段对文档集分组,以优化内部存储并提高查询效率。有关元字段的更多信息,请参阅元字段注意事项。
索引
MongoDB 会自动在时间序列集合的 metaField 和 timeField 上创建复合索引。
后续步骤
如要开始使用时间序列集合,请参阅以下页面上的教程: