时序数据库介绍

时序数据库(Time Series Database,简称TSDB)是专门用于存储、查询和分析时间序列数据的数据库。这类数据的特点是数据点带有时间戳,并且随时间连续产生。

一、核心特点

  • 写多读少:数据写入量极大(每秒百万级),但更新操作极少(通常为追加)。

  • 数据量大:依赖高效的数据压缩算法(如差值、位压缩)来节省存储成本。

  • 时效性强:最近的数据被高频查询,较旧的数据访问频率低,支持数据生命周期管理(自动过期删除)。

  • 按时间排序:数据天然按时间有序,查询通常涉及时间范围、聚合(如求平均值、最大值)和降采样。

二、常见应用场景

  • IT运维监控:服务器CPU、内存、网络流量等指标监控。

  • 物联网(IoT):智能设备、传感器、工厂生产线数据采集。

  • 金融交易:股票价格、交易量、汇率波动等实时数据分析。

  • 用户行为分析:网站PV/UV、App日活、广告点击流分析。

  • 工业制造业:设备状态监测、故障预测与健康管理。

三、主流时序数据库对比

数据库 简介 适用场景
InfluxDB 最流行的TSDB之一,类SQL查询语言InfluxQL,生态完善。 中小规模监控、物联网、实时分析。
Prometheus CNCF毕业项目,自带Pull模型采集,结合Grafana可视化极佳。 云原生、Kubernetes监控(必备)。
TimescaleDB 基于PostgreSQL的扩展,完全支持SQL和事务。 需要复杂关联查询的时序场景。
TDengine 国产开源,高性能,集成缓存、流式计算,降低总拥有成本。 物联网、车联网、工业大数据(对性能要求极高)。
DolphinDB 国产高性能分布式,内置强大的向量化编程语言。 量化金融、高频交易、复杂分析计算。
QuestDB 使用SIMD指令集优化,性能极佳,支持PostgreSQL线协议。 金融数据、高吞吐低延迟分析。
IoTDB Apache顶级项目,专为物联网设计,支持从边缘到云端。 工业物联网、智慧城市、能源管理。

四、关键技术点

  • 数据模型 :通常由 时间戳 + 标签(维度) + 指标值(度量) 构成。例如,cpu_usage{host=server1, region=us-west} 72.5 1650000000

  • 存储引擎 :使用LSM树结构,顺序写入磁盘,避免随机写性能瓶颈。

  • 压缩算法:同一时间戳下多指标组合压缩、差值编码、游程编码等,压缩率可达90%以上。

  • 降采样:对历史数据进行聚合(如将秒级数据降为分钟级),节省存储并加速查询。

  • 连续查询:自动定期执行预计算,实现增量聚合视图。


工作原理

一、写入流程:如何扛住海量数据?

时序数据写入的最大挑战是高频、海量、顺序追加。传统数据库(如MySQL)的B+树随机写入会成为瓶颈,而时序数据库采用以下策略:

  1. 先写内存(WAL + MemTable)

    • 数据到达时,先顺序写入磁盘日志(WAL,预写日志),保证宕机不丢数据。

    • 同时将数据写入内存中的有序结构(如跳表、红黑树),称为MemTable。内存写入极快,能轻松应对百万级QPS。

  2. 批量合并与刷盘

    • 当内存数据积累到一定阈值,会批量写入磁盘,形成不可变的文件(如LSM树的SSTable)。

    • 这个过程利用了磁盘的顺序写性能(远快于随机写),并且多个小批次会合并成一个大文件,减少IO次数。

  3. 异步落盘与Compaction(合并)

    • 后台持续进行文件合并(Compaction),将多个小文件合并成大文件,同时清理已删除或过期的数据,保持查询效率。

二、存储引擎:数据在磁盘上怎么组织?

这是时序数据库最核心的奥秘,主要基于LSM树及其变种,但针对时序特征做了深度优化:

关键技术 原理 效果
时间分片 按时间范围(如一天/一小时)将数据切分成独立文件块。 查询某时间范围时,只扫描对应分片,大幅减少IO。
标签索引(倒排索引) 对标签(如host=server1)建立类似搜索引擎的倒排索引。 能毫秒级定位符合标签条件的所有时间序列。
列式存储 同一列(如所有CPU值)连续存储,不同列分开存放。 查询只读所需列;同列数据类型相同,压缩率极高。
专用压缩算法 - 差值编码 :存相邻值的差值(如时间戳差1秒)。 - 游程编码 :连续相同的值只存一次。 - 位压缩(Gorilla):对浮点数做异或压缩。 压缩率通常达90%~95%,10GB原始数据最终可能只占1GB。

三、查询流程:如何快速响应?

查询性能不仅靠存储,还靠提前算好(用空间换时间):

  1. 索引过滤

    根据查询中的标签条件,利用倒排索引快速找到所有相关的时间序列ID列表。

  2. 时间范围裁剪

    根据查询的时间范围,只扫描对应的磁盘文件分片,跳过不相关的数据块。

  3. 向量化计算

    查询聚合(如avg(cpu))时,读取压缩后的列数据,直接在内存中批量计算(如SIMD指令加速),避免逐行处理。

  4. 降采样与预聚合

    对历史高频数据,系统后台会自动生成分钟级/小时级的汇总数据。查询大时间范围时,直接读汇总结果,秒级返回。

  5. 下推优化

    将过滤、聚合计算尽量推送到存储节点完成,只返回最终结果给客户端,减少网络传输。


四、生命周期管理:数据自动"消失"

时序数据往往有时效性------7天前的秒级数据很少被查。

  • 数据库支持数据保留策略(Retention Policy),比如"只保留最近30天的原始数据"。

  • 后台会按时间分片,定期自动删除过期的文件块,释放存储空间。


五、一句话总结工作原理

先快速写内存并记日志,后台批量转成压缩的列式文件;查询时靠倒排索引快速定位,靠预聚合和列式计算快速响应;过期数据自动回收,保持存储轻量。