1. 高频采集数据特征与压缩查询挑战

在工业物联网、电力监控、车联网、金融行情等场景中,数据往往以固定或近似固定的周期被持续采集,形成所谓"高频采集数据"。理解这类数据的特征,是设计压缩与查询优化方案的前提。本节先厘清高频采集数据的来源、采样率、时序性、数据量级与实时性要求,再分析压缩与查询之间的核心矛盾,并给出整体技术路线。

一、高频采集数据的来源与采样率

高频采集数据的来源非常广泛,典型对象包括:旋转机械的振动传感器、电力系统的电压电流互感器、汽车总线的车速与转速信号、金融市场的逐笔成交与盘口快照、环境监测中的温湿度与颗粒物传感器等。这些对象的共同点是:物理量随时间连续变化,采集端按固定周期采样并打上时间戳。

采样率决定了数据的"密度"。例如,振动监测常用 10 kHz~50 kHz 的采样率,电力谐波分析常用 10 kHz 以上,而温度、湿度等慢变量可能只需 1 Hz 甚至更低。采样率越高,单位时间产生的数据点越多,对存储与查询的压力也越大。以 8 通道、每通道 16 位、采样率 20 kHz 的振动采集为例,单台设备每秒产生约 8 × 2 B × 20000 = 320 KB 原始数据,一天约 27.6 GB,若部署 100 台设备,日增数据量接近 2.8 TB。这个量级足以说明:不做压缩,长期存储几乎不可行。

二、时序性与数据量级

高频采集数据本质上是时间序列:每个数据点由"时间戳 + 测点标识 + 数值"构成,且时间戳单调递增。时序性带来两个重要性质:一是相邻点之间往往存在强相关性,尤其是缓变信号,差分后数值很小,适合差分编码;二是查询通常按时间范围进行,例如"查询某测点最近 1 小时的最大值、平均值或原始波形",这使得时间分区、时间索引成为查询优化的关键手段。

数据量级方面,需要区分"原始数据量"与"压缩后数据量"。原始数据量由采样率、通道数、位宽和采集时长共同决定;压缩后数据量则取决于压缩算法与压缩比。工程上常用压缩比来衡量效果,例如无损压缩比 3:1~10:1,有损压缩比可达 20:1~100:1。压缩比越高,通常意味着信息损失或计算开销越大,需要在精度、存储和查询性能之间权衡。

三、实时性要求与压缩查询的核心矛盾

高频采集数据往往同时服务于两类需求:一类是实时监控与告警,要求数据在秒级甚至毫秒级内可被写入和查询;另一类是历史回溯与分析,要求长期数据可被高效检索和聚合。这两类需求对压缩与查询提出了不同甚至冲突的要求。

核心矛盾可以概括为三点:第一,压缩率与查询效率的矛盾。压缩越激进,数据越紧凑,但解压和随机访问的成本越高,查询延迟可能上升。第二,写入吞吐与查询延迟的矛盾。高频写入要求压缩算法足够快、足够轻量,而复杂查询又希望有丰富的索引和预聚合,二者在资源上相互竞争。第三,精度与存储成本的矛盾。有损压缩能显著降低存储,但可能丢失峰值、毛刺等关键特征,影响故障诊断与告警准确性。

需要特别注意的是:压缩与查询优化不是两个独立问题。压缩方式会直接影响索引结构、扫描方式和聚合效率;查询模式也会反过来决定哪些字段值得压缩、哪些字段需要保留原始精度。因此,技术路线必须把两者放在同一数据链路中统一设计。

四、整体技术路线

面向高频采集数据,整体技术路线可以概括为"采集—压缩—存储—索引—查询"五段链路,但每一段都有多种可选策略,需要根据业务目标组合。

在采集端,重点是时间戳对齐、批量写入和背压控制。时间戳对齐保证同一时刻多通道数据可关联;批量写入减少网络与磁盘开销;背压控制防止采集速度超过处理能力导致数据丢失。

在压缩端,常用策略包括:差分编码、游程编码、字典编码、位打包,以及针对时序数据的专用算法如 Gorilla、Delta-of-Delta、Simple8b 等。无损压缩适合原始波形归档,有损压缩适合趋势监控与长期存储。实际系统中常采用"热数据无损、冷数据有损"的分层策略。

在存储端,通常采用时序数据库或列式存储,按时间分区,按测点分片。列式存储有利于同列数据的相似性压缩,时间分区有利于范围查询裁剪。

在索引端,常见手段包括时间索引、测点标签索引、倒排索引和预聚合表。预聚合表把常用统计量(如每分钟均值、最大值、最小值)提前算好,查询时直接读取,避免扫描原始数据。

在查询端,重点是查询下推、向量化执行和缓存。查询下推把过滤条件下推到存储层,减少数据传输;向量化执行利用 CPU 的 SIMD 指令批量处理;缓存则把热点查询结果保留在内存中。

高频采集数据:压缩与查询整体技术路线 采集端 时间戳对齐 批量写入 背压控制 压缩端 差分 / 游程 / 字典 Gorilla / Delta-of-Delta 热无损 · 冷有损 存储端 时序数据库 / 列式存储 按时间分区 按测点分片 索引端 时间索引 / 标签索引 倒排索引 预聚合表 查询端 查询下推 · 向量化执行 · 结果缓存 范围查询 / 聚合查询 / 原始波形回放 核心矛盾 压缩率 ↔ 查询效率 | 写入吞吐 ↔ 查询延迟 | 精度 ↔ 存储成本 统一设计:压缩方式决定索引与扫描效率,查询模式决定压缩字段与精度保留

这条链路的关键在于"统一设计":压缩方式决定索引与扫描效率,查询模式决定压缩字段与精度保留。例如,若业务以"最近 1 小时原始波形回放"为主,则应优先保证热数据的无损压缩与快速随机访问;若以"过去一年日均值趋势"为主,则可采用有损压缩加预聚合表,把查询代价降到最低。

五、一个可参考的参数权衡示例

下面给出一个示例性的参数权衡表,用于说明不同业务目标下压缩与查询策略的取舍。表中数值为合理假设,仅用于教学演示,不代表任何实际系统的实测结果。

业务目标 压缩策略 索引策略 查询方式 典型压缩比
故障波形回放 无损差分 + 位打包 时间索引 + 测点索引 原始点范围扫描 3:1~6:1
实时告警 轻量无损 + 内存缓存 时间索引 + 标签倒排 最近窗口聚合 2:1~4:1
长期趋势分析 有损压缩 + 预聚合 预聚合表 + 时间分区 分钟/小时级聚合 20:1~50:1
多测点关联查询 列式压缩 + 字典编码 标签索引 + 时间索引 多列过滤 + 下推 5:1~10:1

从表中可以看出,压缩比并不是越高越好,而是要与查询方式匹配。故障波形回放需要保留原始精度,压缩比自然较低;长期趋势分析可以接受有损压缩,压缩比可以很高。工程实践中,通常按数据"温度"分层:热数据保留高精度、低压缩比,温数据采用中等压缩,冷数据采用高压缩比并配合预聚合。

判断压缩与查询方案是否合理,可以问三个问题:第一,最常用的查询能否在可接受延迟内完成?第二,压缩后是否仍能还原出业务关心的关键特征(如峰值、突变、周期)?第三,写入吞吐是否跟得上采集速率?三个问题都通过,方案才具备落地条件。