分类 :16.对比 | 篇章 :01 vs InfluxDB
InfluxDB 是最早的开源时序数据库之一,TDengine 是国产时序数据库的代表。本文从架构、功能、性能、生态等维度做深入对比。
速查对比
| 维度 | TDengine | InfluxDB |
|---|---|---|
| 开源协议 | AGPL v3.0 | MIT (1.x), 双协议 (2.x/3.x) |
| 架构 | 分布式原生 | 单机/Cluster(企业) |
| 数据模型 | STable + Tag | Measurement + Tag |
| 查询语言 | SQL | InfluxQL (1.x) / Flux (2.x) / SQL (3.x) |
| 存储引擎 | TSDB(自研列存) | TSM / IOx (3.x) |
| 协议 | 多协议网关 | Line Protocol |
| 写入性能 | 高 | 高 |
| 查询性能 | 高(大范围聚合优秀) | 中等 |
| 副本 | 内置 RAFT | 仅企业版 |
详细对比
1. 架构对比
TDengine:
┌──────────────────────────┐
│ MNode (RAFT) │ ← 元数据
├──────────────────────────┤
│ VNode VNode VNode ... │ ← 数据分片
└──────────────────────────┘
- 分布式原生设计
- 内置 RAFT 副本
- MNode/VNode/QNode 分离
- 自动负载均衡
InfluxDB 1.x:
- 单节点(Cluster 仅企业版)
- 简单
InfluxDB 2.x:
- 单节点 + IOx 后端转向
- 一些云服务用 Kubernetes
InfluxDB 3.x:
- 基于 IOx(Rust 重写)
- 计算/存储分离
- 对象存储 + Parquet
- 多模式部署
2. 数据模型
TDengine:
Database
└─ STable(超级表 + Schema 强约束)
├─ Tags(索引)
└─ Columns(列存)
└─ SubTable(子表,物理存储)
CREATE STABLE meters (
ts TIMESTAMP, current FLOAT
) TAGS (location NCHAR(20));
InfluxDB:
Bucket / Retention Policy
└─ Measurement
├─ Tags(索引,字符串)
└─ Fields(数值/字符串)
meters,location=Beijing current=25.3
- 弱 Schema(自动新增字段)
- 无显式表定义
对比:
- TDengine:强 Schema + 高压缩
- InfluxDB:灵活 + 灵活
TDengine 优势:
- Tag 类型丰富(数值/时间/几何)
- 子表概念高效
- 列存压缩比高
InfluxDB 优势:
- 自动 schema 演进
- 入门简单
3. 查询语言
sql
-- TDengine: 标准 SQL
SELECT
_wstart, location, AVG(current) AS avg_c
FROM meters
WHERE ts > NOW - 1h
PARTITION BY location
INTERVAL(5m)
FILL(LINEAR);
sql
-- InfluxDB 1.x: InfluxQL
SELECT MEAN(current)
FROM meters
WHERE time > now() - 1h
GROUP BY time(5m), location
fill(linear);
// InfluxDB 2.x: Flux(函数式)
from(bucket: "iot")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "meters")
|> aggregateWindow(every: 5m, fn: mean)
|> group(columns: ["location"])
sql
-- InfluxDB 3.x: SQL(DataFusion)
SELECT
DATE_BIN(INTERVAL '5 minutes', time) AS t,
location, AVG(current) AS avg_c
FROM meters
WHERE time > NOW() - INTERVAL '1 hour'
GROUP BY t, location;
对比:
- TDengine:传统 SQL 学习成本低
- InfluxQL:类 SQL 但有限制
- Flux:函数式强大但陡峭
- InfluxDB 3.x SQL:标准 SQL(与 TDengine 接近)
4. 写入性能
官方/第三方测试(参考,非绝对):
写入吞吐(单节点):
TDengine: ~10M points/sec
InfluxDB 1.x: ~5M points/sec
InfluxDB 2.x: ~5M points/sec
InfluxDB 3.x: ~8M points/sec
压缩比:
TDengine: 10x ~ 20x
InfluxDB 1.x: 5x ~ 10x
InfluxDB 3.x: 接近 TDengine (Parquet)
TDengine 优势:
- 列存 + 多种压缩算法
- 内存表 + WAL + Block 流水
- STMT2 零拷贝写入
- 分布式横向扩展
5. 查询性能
大范围聚合(1 年数据):
TDengine(带 TSMA): 100ms ~ 1s
TDengine(无 TSMA): 秒级
InfluxDB(无 CQ): 数十秒
InfluxDB 3.x: 秒级(DataFusion + Parquet)
小范围明细查询:
各家相近,毫秒级
TDengine 优势:
- TSMA/RSMA 预计算
- 缓存(CACHEMODEL last_value)
- SMA 索引
- QNode 独立计算
InfluxDB 优势:
- Flux 函数库丰富
- 3.x DataFusion 查询优化器强大
6. 高可用与扩展
TDengine(开源版):
✓ 内置 RAFT 副本(REPLICA 3)
✓ 自动故障切换
✓ MNode/VNode 分离
✓ 横向扩展(CREATE DNODE)
InfluxDB 1.x(开源版):
✗ 仅单节点
✗ 集群需企业版
InfluxDB 2.x(开源版):
✗ 仅单节点
InfluxDB Cloud:
✓ 云服务
✓ 高可用
结论:
- 开源版 HA:TDengine 完胜
- 商业版/云:双方都有
7. 生态与集成
TDengine:
✓ taosAdapter 多协议
✓ InfluxDB Line / OpenTSDB / Prometheus / collectd / StatsD
✓ Grafana 官方插件
✓ Telegraf 兼容(InfluxDB output)
✓ Kafka Connect JDBC
✓ Flink/Spark JDBC
✓ Java/Python/Go/Rust/C/C#/Node 客户端
InfluxDB:
✓ Telegraf(自家)
✓ Grafana 插件(成熟)
✓ 各语言客户端
✓ Kapacitor(告警,1.x)
✓ Chronograf(UI,1.x)
生态成熟度:
- InfluxDB 在国外 IoT 监控生态先发优势
- TDengine 国内生态完善 + 工业 OT 集成
8. 选型建议
选 TDengine 的场景:
✓ 大规模时序数据(百万级测点)
✓ 需要分布式 + 高可用(开源版)
✓ 工业 OT 场景(OPC UA, Modbus)
✓ SQL 熟悉度高的团队
✓ 大范围聚合查询频繁
✓ 高压缩比要求
✓ 国内合规/支持
选 InfluxDB 的场景:
✓ DevOps 监控(Telegraf 生态)
✓ 已有 InfluxDB 体系迁移成本高
✓ Flux 用户
✓ Grafana 生态深度集成
✓ 中小规模(单机)
✓ 海外社区资源
两者皆可:
- 中小规模 IoT
- 通用时序场景
- 兼容协议(TDengine 支持 InfluxDB Line)
代码示例
同样的需求两种实现
需求:查每个机房 1 小时平均 CPU
-- TDengine
SELECT _wstart, dc, AVG(cpu)
FROM hosts
WHERE ts > NOW - 1d
PARTITION BY dc
INTERVAL(1h);
-- InfluxDB 1.x
SELECT MEAN(cpu)
FROM hosts
WHERE time > now() - 1d
GROUP BY time(1h), dc;
// InfluxDB 2.x Flux
from(bucket:"monitoring")
|> range(start: -1d)
|> filter(fn:(r) => r._measurement == "hosts" and r._field == "cpu")
|> aggregateWindow(every:1h, fn:mean)
|> group(columns:["dc"])
-- InfluxDB 3.x SQL
SELECT
DATE_BIN(INTERVAL '1 hour', time) AS t,
dc, AVG(cpu)
FROM hosts
WHERE time > NOW() - INTERVAL '1 day'
GROUP BY t, dc;
数据从 InfluxDB 迁移到 TDengine
bash
# 方案 1: 用 taosX
# 配置 InfluxDB Connector
# 自动迁移
# 方案 2: Telegraf 双写过渡
[[outputs.influxdb]] # 旧
[[outputs.http]] # 新 TDengine(InfluxDB Line)
# 方案 3: 直接用 InfluxDB Line 协议写 TDengine
# TDengine taosAdapter 兼容
性能考量
压缩比对比
| 数据类型 | TDengine | InfluxDB |
|---|---|---|
| 数值平稳 | 20x | 10x |
| 数值波动 | 10x | 5x |
| 字符串 | 5x | 3x |
查询性能对比(参考)
| 查询 | TDengine | InfluxDB |
|---|---|---|
| 单设备最新 | < 10ms | < 10ms |
| 1h 聚合 | < 100ms | < 500ms |
| 1d 聚合 | < 500ms | 1~5s |
| 30d 聚合(带 SMA) | < 1s | 数十秒 |
FAQ
Q1: 能从 InfluxDB 平滑迁移吗?
可以。TDengine 兼容 InfluxDB Line 协议,写入端只需改 URL。查询端需重写为 TDengine SQL。
Q2: Grafana 兼容性?
两者都有官方 Grafana 插件。InfluxDB 集成更早更深。TDengine 插件功能足够。
Q3: 学习曲线?
- 有 SQL 基础:TDengine 一周上手
- 有时序背景:InfluxDB 1.x 一周
- Flux:需要单独学习函数式
Q4: 商业支持?
- TDengine:北京涛思(中文支持)
- InfluxData:美国(英文支持)
- 选择视地域和合规要求
Q5: 云服务?
- TDengine Cloud:阿里云、AWS(部分区域)
- InfluxDB Cloud:成熟,多云
参考
系统构架篇
- 01-《TDengine 整体架构全景》
- 02-《集群拓扑深度解析》
- 03-《MNode 内部机制深度解析》
- 04-《RPC 通信层深度解析》
- 05-《VNode 生命周期》
- 06-《RAFT 共识协议》
- 07-《端到端的消息流》
数据模型
- 01-《数据库创建与参数详解》
- 02-《超级表/子表/普通表》
- 03-《支持数据类型深度解析》
- 04-《TDengine Tag 设计哲学与 Schema 变更机制》
- 05-《TDengine 虚拟表实现原理》
存储引擎
- 01-《TDengine 存储引擎概览》
- 02-《TDengine MemTable 深度解析》
- 03-《TDengine WAL 预写日志机制》
- 04-《TDengine 数据文件格式》
- 05-《TDengine Commit 与 Flush 机制 》
- 06-《TDengine Compaction 合并策略 》
- 07-《TDengine 数据保留与 TTL》
- 08-《TDengine 压缩编码机制》
- 09-《TDengine Cache 与 Last 查询加速》
- 10-《TDengine 逻辑计划生成》
查询引擎
- 01-《TDengine 查询引擎概览》
- 02-《TDengine SQL 解析与词法分析》
- 03-《TDengine 语义分析与 AST 重写》
- 04-《TDengine 逻辑计划生成》
- 05-《TDengine 物理计划生成》
- 06-《TDengine 扫描算子》
- 07-《TDengine 聚合算子》
- 08-《TDengine 连接算子》
- 09-《TDengine 排序、填充与投影》
- 10-《TDengine 分布式查询执行》
- 11-《TDengine EXPLAIN 与查询优化》
数据写入
- 01-《TDengine SQL INSERT》
- 02-《TDengine 无模式写入》
- 03-《TDengine STMT 写入》
- 04-《TDengine 写入内部流程》
- 05-《TDengine 数据更新删除》
数据订阅
- 01-《TDengine 数据订阅》
- 02-《TDengine 订阅 vs Kafka》
- 03-《TDengine TMQ 消费流程》
- 04-《TDengine 内部机制》
- 05-《TDengine TMQ 最佳实践》
预聚合
索引
SQL 语句
- 01-《TDengine DDL》
- 02-《TDengine DML SELECT》
- 03-《TDengine DML 函数完整参考》
- 04-《TDengine JOIN 完整语法》
- 05-《TDengine 窗口完整语法》
- 06-《TDengine 操作符与表达式》
- 07-《TDengine 系统表》
- 08-《TDengine SQL 与标准 SQL 差异》
客户端与连接器
- 01-《TDengine 的连接方式》
- 02-《TDengine C/C++ 连接器》
- 03-《TDengine java 连接器》
- 04-《TDengine Python 连接器》
- 05-《TDengine Go 与 Rust 连接器》
- 06-《TDengine Node.js 与 C# 连接器》
运维
- 01-《TDengine 部署指南》
- 02-《TDengine 配置详解》
- 03-《TDengine 监控系统》
- 04-《TDengine 备份与恢复》
- 05-《TDengine 版本升级》
- 06-《TDengine 加密使用指南》
安全
生态
- 01-《TDengine taosAdapter》
- 02-《TDengine taosX 与 Explorer》
- 03-《TDengine Grafana 集成》
- 04-《TDengine 第三方工具》
应用案例
- 01-《TDengine IoT 设备监控》
- 02-《TDengine 工业大数据与智能制造》
- 03-《TDengine 车联网与新能源汽车》
- 04-《TDengine 能源与电力监控》
- 05-《TDengine IT 运维与可观测性》
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。
