时序数据有什么不一样

设备上报的温湿度、应用的接口耗时、服务器的 CPU 占用,这些数据都带时间戳,按时间顺序源源不断产生,就是时序数据。它的特点是写多读少、追加为主、按时间查询、数据有生命周期。用普通关系库存时序数据,行数会爆炸、聚合查询极慢,于是出现了专门的时序数据库。

本文核心知识点
  • 数据点时间戳加指标值加标签。
  • 保留策略自动清理过期数据。
  • 降采样把细粒度数据聚合成粗粒度。
  • 聚合下推把聚合计算推到存储层。
时序数据库配图:蓝色渐变背景左侧多个传感器设备方块发射数据点汇入中间横向时间轴轨道,轨道右侧接上扬折线图方块,扁平科技插画
设备持续上报数据点汇成趋势曲线,正是时序数据库的意象。

数据模型:数据点与标签

时序数据库的核心概念是数据点:一个数据点由一个时间戳、若干指标值和若干标签组成。标签用来描述数据来源,例如设备编号、机房、型号,查询时按标签过滤;指标值是被测量的数值,例如温度、流量。标签的基数要控制好,标签取值组合太多会让索引膨胀,写入性能下降。

// 一个数据点示例(InfluxDB 行协议)
sensor_temp,device=d1,room=r1 value=23.5 1690000000000

设计数据模型时把固定的维度放标签、变化的数值放指标,查询才能既快又灵活。不要把随机值当标签,也不要把多个指标揉进一个字段。

InfluxDB 入门:写入与查询

InfluxDB 用行协议写入、用 Flux 或 InfluxQL 查询。它的存储按时间分片,删除按时间范围高效,特别适合监控与物联网场景。写入走 HTTP 接口,批量写入效率远高于单条写入。

curl -XPOST 'http://localhost:8086/write?db=mydb' \
  --data-binary 'sensor_temp,device=d1 value=23.5 1690000000000'

查询常见场景是取一段时间内的均值、最大最小值,聚合函数配合时间分组一条语句就能出结果。要注意查询的时间范围越大、扫描的数据越多,通常要配合降采样把历史数据提前聚合好。

TDengine 入门:超级表与聚合下推

TDengine 是国产时序数据库,特点是先建超级表,再为每个设备建一张子表,超级表定义 schema,子表按标签区分。查询在超级表上做,引擎会把聚合计算下推到存储层,大量设备同时查询时性能优势明显。

CREATE STABLE sensor (ts TIMESTAMP, value FLOAT)
  TAGS (device BINARY(32), room BINARY(32));

SELECT AVG(value) FROM sensor
  WHERE room='r1' AND ts > NOW - 1h
  INTERVAL(5m);

TDengine 的部署简单、写入吞吐高,还自带数据同步与集群能力。对国内团队来说文档与社区更友好,选型时值得优先评估。