时序数据库怎么选?TDengine vs InfluxDB vs IoTDB
💡 为什么工业监控不能用 MySQL 存历史数据?国产时序数据库 TDengine 和 IoTDB 到底哪个好?
这三个是工业/物联网项目最常被拿来比较的时序数据库:TDengine(涛思,国产,工业高频写入最强)、InfluxDB(美国,生态最成熟,DevOps 经典组合)、Apache IoTDB(清华发起,Apache 2.0 最自由)。这篇用 10 个维度说清楚,工业场景到底该上哪个。
工业现场高频写入、要内置 MQTT/OPC UA 直接采、做国产替代——选 TDengine(性能和工业协议最强,注意开源版是 AGPL);DevOps 监控、要最成熟生态、Telegraf+Grafana 经典组合、要最宽松 MIT 协议——选 InfluxDB;Java 技术栈、要 Apache 2.0 完全自由商用、边缘到云端一体——选 Apache IoTDB。可视化都用 Grafana,不纠结。
01 为什么不用 MySQL,非要时序数据库
很多工程师第一个问题是:我 MySQL 用得好好的,为什么要额外学一个时序数据库?因为工业监控的数据形状和业务数据完全不同:
- 写入是海量的:一条产线几百个测点,每个每秒一条,一天就是几千万行。MySQL 靠索引和事务维护,这个写入量很快就把磁盘和锁拖垮。
- 查询是按时间的:工业看板几乎都是"查最近 1 小时""查昨天某设备趋势",时序库按时间分区、自动压缩,查询比 MySQL 快一个数量级。
- 存储要省:时序库自带列式压缩和自动降采样,同样数据量能省约 10 倍磁盘。
- 留存策略:自动按时间归档、降采样、过期清理,不用自己写定时任务。
测点少、量小,SQLite/MySQL 够用;一旦上千测点、秒级写入、要存多年历史,时序库是必选项。
02 10 个维度逐项对比
| 对比维度 | TDengine | InfluxDB | Apache IoTDB |
|---|---|---|---|
| 厂商 / 出身 | 涛思数据(北京,国产) | InfluxData(美国) | Apache 基金会,清华大学发起(国产) |
| 开源协议 | AGPL v3(企业版另购) | MIT(最宽松) | Apache 2.0(最友好,可商用) |
| 开发语言 | C/C++(极致性能) | Go | Java |
| 写入性能 | 极高,专为工业高频优化 | 高 | 高 |
| 生态成熟度 | 国内工业圈最热 | 最高,Telegraf+Grafana 经典组合 | Apache 生态,国内成长中 |
| 工业协议接入 | 内置 MQTT/OPC UA/Modbus,开箱即采 | 靠 Telegraf 等外接采集器 | 原生 MQTT + JDBC,偏 SDK 接入 |
| 内置能力 | 缓存/订阅/流式计算一体 | 偏存储,生态靠外接 | 边缘到云端一体 |
| 国产 / 信创 | 是(国产) | 否(美国) | 是(国产,Apache 中立治理) |
| 上手难度 | 中,文档完善 | 最低,教程最多 | 中,需 Java 背景更顺 |
| 典型规模 | 海量工业测点、高并发写入 | 中小规模 DevOps 监控指标 | 边缘到云、中等规模工业数据 |
TDengine 开源版是 AGPL v3(有传染性,闭源商用要评估或买企业授权);InfluxDB 是 MIT(最宽松);IoTDB 是 Apache 2.0(商用最自由)。做对外销售的产品时,这条比性能还重要。
03 三种典型场景,直接对号入座
- 工业现场高频写入,测点成千上万
- 要内置 MQTT/OPC UA/Modbus,采集存储一体
- 做国产替代 / 信创项目
- 要内置缓存、流式计算、数据订阅
- 接受 AGPL 或愿意买企业版
- DevOps 服务器/应用监控指标存储
- 要用 Telegraf + InfluxDB + Grafana 经典组合
- Go 技术栈,要最成熟生态和教程
- 需要最宽松的 MIT 协议
- 国际项目、团队英文资料无障碍
- Java 技术栈,要原生 JDBC 接入
- 要 Apache 2.0 完全自由商用
- 边缘到云端一体部署
- 高校 / 研究项目 / Apache 生态用户
- 对协议中立性和国产自主有要求
04 丁丁的实战建议
我自己在冲床监控、能源管理、OEE 项目里主力用 TDengine——工业现场要的是"采上来就存、存了就能查、还省服务器",它内置 MQTT 和流式计算,不用再拼一堆组件。
但如果你做的是 IT 运维监控(服务器 CPU、数据库指标),InfluxDB + Telegraf + Grafana 是经过无数项目验证的组合,别硬上 TDengine。IoTDB 我更多在 Java 团队、对 Apache 协议有要求的项目里推荐。
真正要避免的坑:一上来就按"最大规模"选型。先算清楚你的测点数量、写入频率、要存多久,再决定。小项目别为了"国产"上重武器,大项目别为了省软件费让 MySQL 硬扛。
常见问题 FAQ(选型时最常被问)
Q:为什么工业监控不能用 MySQL 这类关系库存历史数据?
A:MySQL 是为事务和关系查询设计的,不擅长每秒成千上万条带时间戳的测点写入。高频写入会把索引和锁拖垮,历史数据越积越慢,而且没有自动按时间压缩、降采样和留存策略。时序数据库就是为"高写入、按时间查、自动压缩"设计的,工业监控点位动辄每秒一条,专用时序库比关系库快一个数量级,存储还省 10 倍。
Q:TDengine 和 InfluxDB 到底怎么选?
A:工业现场高频写入、要内置 MQTT/OPC UA 直接采、做国产替代,选 TDengine(性能和工业协议内置最强);做 DevOps 服务器/应用监控、要和 Telegraf+Grafana 无缝组合、团队是 Go 技术栈、需要最宽松的 MIT 协议,选 InfluxDB。一句话:工业物联网选 TDengine,IT 监控选 InfluxDB。
Q:TDengine 是国产的吗?开源协议有没有坑?
A:TDengine 是北京涛思数据的国产开源产品,工业圈用得很多。但它的开源版是 AGPL v3 协议——这个协议有传染性,如果你的产品要闭源商用并对外分发,需要仔细评估或买企业授权。想要无顾虑商用,InfluxDB 的 MIT 和 IoTDB 的 Apache 2.0 更宽松。
Q:IoTDB 和 TDengine 哪个更适合国产替代?
A:两者都是国产。TDengine 在工业物联网落地案例和中文社区上更成熟、性能和内置工业协议更强;IoTDB 由清华大学发起、Apache 基金会中立治理、Apache 2.0 协议商用最自由,适合 Java 技术栈、边缘到云端一体、高校或对协议宽松度敏感的项目。要成熟工业落地上 TDengine,要 Apache 中立和协议自由选 IoTDB。
Q:这三个都能配 Grafana 做可视化吗?
A:都能。Grafana 官方数据源插件支持 InfluxDB 和 IoTDB,TDengine 也有官方/Grafana 兼容的数据源插件。三个都能接 Grafana 做监控大屏,可视化层不用纠结,差别在存储层。
Q:数据量不大,有必要上专门的时序数据库吗?
A:如果就几十个点、秒级存一两年,SQLite 或 MySQL 加合理索引也能跑。但一旦测点上千、写入频率到秒级、要存多年历史并做趋势分析,就值得上时序库——写入性能、压缩和查询速度的差距会非常明显,越往后越省服务器钱。