时序数据有什么不一样
设备上报的温湿度、应用的接口耗时、服务器的 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 的部署简单、写入吞吐高,还自带数据同步与集群能力。对国内团队来说文档与社区更友好,选型时值得优先评估。
保留策略与数据生命周期
时序数据只增不减,不设保留策略存储会无限膨胀。保留策略规定数据保留多久,过期数据自动删除。InfluxDB 的 Retention Policy 与 TDengine 的保留时间都支持按库设置,例如原始数据保留七天、降采样数据保留一年。
CREATE RETENTION POLICY rp_7d ON mydb
DURATION 7d REPLICATION 1 DEFAULT;
设计数据生命周期时把需求分层:实时告警要秒级原始数据,趋势分析要分钟级数据,长期报表要小时级数据。不同层级保留不同时长,成本与价值平衡。
连续查询与降采样
降采样是把细粒度数据按时间窗口聚合成粗粒度数据,例如把秒级数据聚合成五分钟均值。连续查询定时执行降采样,把结果写入另一张表或另一个保留策略,历史查询走降采样数据,速度大幅提升。
CREATE CONTINUOUS QUERY cq_5m ON mydb
BEGIN
SELECT mean(value) INTO temp_5m
FROM sensor GROUP BY time(5m), device
END
降采样后原始数据可以按保留策略删除,这样既保留长期趋势,又不让存储无限膨胀。这是时序系统最常见的存储优化手段。
选型对比与生产建议
InfluxDB 生态成熟、资料多,适合监控告警类场景;TDengine 吞吐高、部署简单、聚合下推强,适合海量设备物联网场景;Prometheus 其实也是时序系统,但专为监控指标设计,配合 Grafana 使用。选型先看数据规模、写入频率与查询模式,再对比部署运维成本。
- 监控指标Prometheus 加 Grafana 最顺。
- 物联网海量设备TDengine 写入与聚合更强。
- 通用时序分析InfluxDB 生态更全。
生产上先做容量评估:估算每秒写入点数、保留时长、单点大小,算出存储需求;接入端做好批量写入与本地缓存,网络抖动时不丢数据。
落地清单
- 固定维度放标签,变化数值放指标,控制标签基数。
- 批量写入,别一条条请求。
- 按数据价值分层设计保留策略。
- 用连续查询做降采样,历史查询走聚合数据。
- 按数据规模与查询模式选型,别盲目跟风。
- 接入端做批量与缓存,网络抖动不丢点。