TDengine 简介
TDengine 简介
什么是 TDengine
TDengine 是由涛思数据(TAOS Data)开发的开源时序数据库,专为物联网(IoT)、工业互联网、IT 运维监控等时序数据场景设计,具备极高的写入性能和压缩比。
传感器 / 设备 / 服务器指标
↓
[时序数据流]
↓
TDengine
├── 超高速写入
├── 高效压缩存储
├── 快速聚合查询
└── 实时流计算
↓
可视化 / 告警 / 分析
核心概念
数据模型:超级表(STable)
TDengine 最重要的创新概念:
SuperTable(超级表)= 数据结构模板
├── 时间列(timestamp) ← 必须有,主键
├── 数据列(metrics) ← 传感器采集值
└── 标签列(tags) ← 设备静态属性
每个设备 → 对应一张子表(SubTable)
示例:智能电表场景
-- 创建超级表
CREATE STABLE meters (
ts TIMESTAMP, -- 时间戳(主键)
current FLOAT, -- 电流(数据列)
voltage INT, -- 电压(数据列)
phase FLOAT -- 相位(数据列)
) TAGS (
location VARCHAR(64), -- 位置(标签)
groupId INT -- 分组(标签)
);
-- 每个电表自动对应一张子表
CREATE TABLE meter_001 USING meters
TAGS ("北京朝阳", 1);
CREATE TABLE meter_002 USING meters
TAGS ("上海浦东", 2);
STable: meters
┌──────────────────────────────────────────────┐
│ SubTable: meter_001 Tags: 北京朝阳, Group=1 │
│ ts current voltage phase │
│ 2024-01-01 00:00 12.3 220 0.31 │
│ 2024-01-01 00:01 12.5 221 0.32 │
├──────────────────────────────────────────────┤
│ SubTable: meter_002 Tags: 上海浦东, Group=2 │
│ ts current voltage phase │
│ 2024-01-01 00:00 11.8 219 0.30 │
│ 2024-01-01 00:01 12.1 220 0.31 │
└──────────────────────────────────────────────┘
架构设计
整体架构
┌──────────────────────────────────────────────────┐
│ 客户端层 │
│ SQL / REST API / Python / Java / Go / C SDK │
└─────────────────────┬────────────────────────────┘
│
┌─────────────────────▼────────────────────────────┐
│ TDengine 集群 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ dnode 1 │ │ dnode 2 │ │ dnode 3 │ │
│ │ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │ │
│ │ │vnode │ │ │ │vnode │ │ │ │vnode │ │ │
│ │ │vnode │ │ │ │vnode │ │ │ │vnode │ │ │
│ │ └──────┘ │ │ └──────┘ │ │ └──────┘ │ │
│ │ mnode │ │ │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ qnode(查询节点) │ │
│ └─────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
核心技术原理
1. 存储引擎设计
一设备一表 + 列式存储:
时间维度分片(按时间段切割文件):
vnode/
├── 2024-01/ ← 月级分区
│ ├── data.tsdb ← 列式数据文件
│ ├── head.tsdb ← 数据头信息
│ └── last.tsdb ← 最新数据缓存
├── 2024-02/
└── ...
列式存储布局:
[ts列][ts列][ts列]...[current列][current列]...[voltage列]...
↓
相同类型数据连续存放 → 压缩率极高
写入流程:
数据写入
→ WAL(预写日志,保证持久性)
→ MemTable(内存缓冲)
→ 达到阈值 → 落盘(TSMFile)
→ 后台 Compaction 合并优化
2. 数据压缩
针对时序数据特点采用专用压缩算法:
$$ \text{压缩比} = \frac{\text{原始数据大小}}{\text{压缩后大小}} \approx 10:1 \sim 20:1 $$
原始时间戳序列(差值递增):
1000, 1001, 1002, 1003, 1004 ...
↓ Delta 编码
1000, +1, +1, +1, +1 ...
↓ 极致压缩
存储空间减少 90%+
3. 时序特化查询优化
普通数据库查询 last 值:
全表扫描 → O(n)
TDengine last 查询:
直接读 last.tsdb 缓存 → O(1)
时序专用函数:
-- 降采样(每10分钟平均值)
SELECT AVG(current), MAX(voltage)
FROM meters
WHERE ts BETWEEN '2024-01-01' AND '2024-01-02'
INTERVAL(10m) -- 时间窗口函数
FILL(LINEAR); -- 空值线性插值
-- 最新值查询
SELECT LAST(current) FROM meters GROUP BY location;
-- 时间偏移对比(今天 vs 昨天)
SELECT TIMESHIFT(AVG(current), -1d) FROM meters INTERVAL(1h);
4. 流计算(Stream Processing)
TDengine 3.0 内置流计算引擎:
-- 创建流式任务:实时计算每分钟平均电流
CREATE STREAM current_stream
INTO avg_current_1min
AS SELECT
_wstart,
AVG(current) as avg_current,
location
FROM meters
PARTITION BY location
INTERVAL(1m)
WATERMARK(5s); -- 允许5秒乱序
实时数据写入
↓
触发流计算(增量计算)
↓
结果自动写入目标表
↓
无需 Flink/Spark 外部组件
典型部署架构
IoT 场景完整链路
现场设备层
[传感器][PLC][仪表]
↓ MQTT / Modbus
边缘层
[边缘节点 TDengine Edge] ← 本地存储+预处理
↓ 同步/上报
云端/数据中心
[TDengine 集群]
↓
[Grafana 可视化] [告警系统] [数据分析平台]
与生态组件集成
数据采集:
Telegraf / collectd / OPC-UA → TDengine
可视化:
TDengine → Grafana(官方插件)
流处理:
TDengine → Flink / Spark(作为 Source/Sink)
数据同步:
TDengine ↔ Kafka(双向)
性能指标
TDengine vs 同类产品
适用场景
✅ 非常适合 ❌ 不适合
─────────────────────────────────────────
IoT 设备数据采集 复杂关系型数据
工业传感器监控 OLTP 事务处理
IT 基础设施监控 图数据处理
能源/电力数据管理 文档存储
车联网轨迹数据 全文检索
金融行情数据
气象/环境监测
快速上手
# Docker 启动
docker run -d -p 6030:6030 -p 6041:6041 \
tdengine/tdengine:latest
# 连接客户端
taos
# 创建数据库(保留30天数据)
CREATE DATABASE iot_db KEEP 30;
USE iot_db;
# 建表并写入
CREATE STABLE sensors (ts TIMESTAMP, temp FLOAT, hum FLOAT)
TAGS (device_id VARCHAR(32), location VARCHAR(64));
INSERT INTO sensor_001 USING sensors
TAGS ('DEV001', '车间A')
VALUES (NOW, 36.5, 65.2);
# 查询(最近1小时每分钟平均温度)
SELECT AVG(temp) FROM sensors
WHERE ts > NOW - 1h
INTERVAL(1m);
总结
TDengine 核心价值
专为时序设计
│
超级表模型 ──── 高效写入(百万点/秒)
│
列式存储 ──────── 极致压缩(1/10)
│
时序函数 ──────── 快速查询
│
内置流计算 ────── 简化架构
│
降低成本 + 简化运维
TDengine 通过专注时序场景的极致优化,在 IoT 和监控领域提供了比通用数据库高出数量级的性价比,是时序数据存储领域的重要选择之一。