TDengine OSS vs Doris 使用场景和功能对比
TDengine OSS 使用场景
IOT设备把时序数据(时间戳+测点值+设备标签)写入TDengine之后,主要做:时序查询、时间窗口聚合、实时告警、流式订阅、自动降采样等。核心模型是超级表Stable+子表(一个设备一张子表)
1.基础查询
-- 查询设备 d1001 在某个时间段的原始数据 SELECT ts, current, voltage FROM power.d1001 WHERE ts > '2026-09-01 00:00:00' AND ts < '2026-09-02 00:00:00'; -- 按标签批量查一类设备(超级表查询,所有电表) SELECT ts, current, voltage FROM power.meters WHERE location='nanjing';
2.时间窗口聚合
INTERVAL时间窗口,做分钟 / 小时聚合,算平均值、最大最小,用于趋势曲线,是 TDengine 的强项TDengine
-- 创建连续查询:每1分钟聚合一次电压平均值,写入 avg_vol 表 CREATE TABLE avg_vol AS SELECT AVG(voltage) avg_v FROM power.meters INTERVAL(1m);
3.实时订阅
TDengine 内置TOPIC,把新增时序数据实时推送给业务程序,不用轮询数据库,用来做实时告警、规则引擎、转发到其他系统
-- 创建topic,订阅电表数据 CREATE TOPIC topic_meters AS SELECT ts,current,voltage FROM power.meters;
4.数据生命周期管理(IoT 必做)
海量传感器数据不能永久保存,设置TTL 自动过期:
-- 数据库设置TTL,原始数据保留30天 CREATE DATABASE power TTL 30d;
Doris的使用场景:
doris是mpp实时olap分析引擎:适合时序数据做多维聚合,报表,大屏,多表关联分析;
1. 第一步:建表
iot测点字段:ts时间戳、device_id设备、point_code 测点编码、val测点值、tagxxx设备维度标签
模型选择:duplicate 明细模型(保留原始测点数据)
分区:RANGE 分区按时间 + 开启动态分区,自动创建 / 删除分区,做数据 TTL 生命周期;分桶用设备 ID 哈希
CREATE TABLE iot_metrics ( ts DATETIME, device_id VARCHAR(64), point_code VARCHAR(64), val DOUBLE, tag_area VARCHAR(32), tag_station VARCHAR(32) ) ENGINE=OLAP DUPLICATE KEY(ts,device_id,point_code) PARTITION BY RANGE(ts) () DISTRIBUTED BY HASH(device_id) BUCKETS 8 PROPERTIES ( "dynamic_partition.enable" = "true", "dynamic_partition.time_unit" = "DAY", "dynamic_partition.start" = "-30", --保留最近30天 "dynamic_partition.end" = "3", "dynamic_partition.prefix" = "p", "dynamic_partition.buckets" = "8", "compression"="zstd" );
数据写入方式(采集后入库)
- Kafka 流式导入:
Routine Load,最适合 IoT 测点持续采集,消费 Kafka 实时写入 Doris,秒级延迟 - 批量导入:Stream Load / Broker Load,离线补数
2. 入库之后
2.1 明细查询
-- 查询某个设备、某个测点,指定时间段原始数据 SELECT ts,val FROM iot_metrics WHERE device_id='dev001' AND point_code='temp' AND ts >= '2026-09-18 08:00:00' AND ts < '2026-09-18 09:00:00' ORDER BY ts; -- Doris特色 ASOF JOIN:时序近邻匹配,比如测点和设备台账按时间对齐,IoT数字孪生很有用
2.2时序聚合查询
按分钟、小时聚合测点最大、最小、平均值,计算波动率、越限次数
-- 每小时,设备温度测点统计 SELECT date_trunc('hour',ts) as hour_ts, device_id, avg(val) avg_temp,max(val) max_temp,min(val) min_temp, count(if(val>80,1,null)) alarm_cnt FROM iot_metrics WHERE point_code='temp' GROUP BY hour_ts,device_id ORDER BY hour_ts;
INTERVAL时间窗口,做分钟 / 小时聚合,算平均值、最大最小,用于趋势曲线,是 TDengine 的强项TDengine

浙公网安备 33010602011771号