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"
);

数据写入方式(采集后入库)

  1. Kafka 流式导入:Routine Load,最适合 IoT 测点持续采集,消费 Kafka 实时写入 Doris,秒级延迟
  2. 批量导入: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

 

posted @ 2026-09-18 10:52  技术虫  阅读(5)  评论(0)    收藏  举报