2. 时序数据库选型:InfluxDB、TimescaleDB、TDengine、Prometheus对比,选型考量因素(性能、生态、成本)

选时序数据库,说白了就是选“存数据的方式”和“查数据的速度”。

市面上选项很多,但真正经得起生产环境考验的,我个人觉得就这四个:InfluxDB、TimescaleDB、TDengine、Prometheus。每个我都踩过坑,今天把底裤都翻出来给你看。

2.1 四款数据库的“人设”

先给它们贴个标签,方便你快速建立印象:

  • InfluxDB:时序数据库里的“老大哥”。出道最早,生态最全。我2017年第一次做物联网项目用的就是它。特点是“开箱即用”,但到了海量数据场景,内存消耗会让你肉疼。
  • TimescaleDB:披着时序外衣的“关系型数据库”。本质是PostgreSQL插件。如果你团队里DBA只会写SQL,选它准没错。我有个客户,硬是把InfluxDB迁移到TimescaleDB,就因为“SQL写起来顺手”。
  • TDengine:国产新秀,主打“超级表”和“降采样”。性能确实猛,但生态还在长。我记得2020年第一次用TAOS SQL时,差点被它“一个设备一张子表”的设计搞懵。后来习惯了,真香。
  • Prometheus:严格来说不是数据库,是“监控系统”。但它的TSDB模块(PromQL)太强了,做基础设施监控几乎是标配。不过,它不适合存设备原始数据——数据保留策略太“暴力”。

2.2 性能对比:谁跑得快?

性能这东西,不能光看官方Benchmark。我拿真实项目数据说话:

维度 InfluxDB TimescaleDB TDengine Prometheus
写入吞吐 单机约50万点/秒 依赖PG,约30万点/秒 单机100万+点/秒 约80万点/秒(本地)
查询延迟 毫秒级(聚合查询) 秒级(复杂JOIN) 毫秒级(降采样) 毫秒级(PromQL)
压缩比 约10:1 约5:1(依赖PG) 约15:1 约7:1
高可用 企业版/集群 PG流复制 原生集群 Thanos/Cortex

我的经验:

曾经有个风电项目,每秒10万点数据。InfluxDB单机直接OOM,换成TDengine后,CPU占用不到30%。但如果你要做“过去7天每5分钟的平均值”,TimescaleDB的连续聚合视图反而比TDengine的降采样更灵活。

2.3 生态对比:谁的朋友多?

选数据库,其实是在选“朋友圈”。

  • InfluxDB:生态最成熟。Telegraf采集、Chronograf可视化、Kapacitor告警,一套组合拳。但注意,Flux查询语言学习曲线陡峭。我团队新人上手Flux,平均要两周才能写复杂查询。
  • TimescaleDB:PostgreSQL生态就是它的生态。你可以直接用pgAdmin、Tableau、Grafana。甚至可以用PostGIS做时空查询。嗯,这里要注意:别被“SQL万能”迷惑,时序场景下,窗口函数性能不如专用TSDB。
  • TDengine:生态在追赶。支持Grafana、Telegraf、EMQX。但第三方工具适配度一般。比如,我曾经想用Kafka Connect写数据到TDengine,结果发现社区版不支持JDBC写入,只能走REST API。
  • Prometheus:云原生生态之王。和Kubernetes、Spring Boot、Node Exporter无缝集成。但它的数据模型是“标签+时间戳”,不适合存“设备ID+属性+时间”这种结构化数据。

避坑指南:

我曾经在一个智慧园区项目里,用Prometheus存了10万个传感器的原始数据。结果Prometheus的本地存储直接爆炸,因为它的设计初衷是“存指标,不存事件”。后来我改用InfluxDB做原始数据存储,Prometheus只做告警计算,才稳住。

2.4 成本对比:谁更省钱?

成本不只是“软件授权费”。我算过一笔账:

成本项 InfluxDB TimescaleDB TDengine Prometheus
软件授权 开源免费,企业版收费 开源免费 开源免费,企业版收费 开源免费
硬件成本 内存大户,需大内存 依赖PG,磁盘I/O高 CPU友好,内存省 本地存储有限
运维成本 中等(集群复杂) 低(PG运维成熟) 低(开箱即用) 高(高可用需额外组件)
学习成本 高(Flux语言) 低(SQL) 中(TAOS SQL) 中(PromQL)

注意:

别只看“开源免费”四个字。InfluxDB企业版一个节点一年要几万美金。TDengine企业版虽然便宜,但集群版需要买授权。如果你只是小项目,用开源版完全够。但如果是金融级场景,建议直接上企业版——数据丢了,赔不起。

2.5 选型决策树

说了这么多,到底怎么选?我一般按这个逻辑走:

  1. 先看团队技能:如果团队只会SQL,无脑选TimescaleDB。别为了“性能”去学Flux,项目周期会拖死你。
  2. 再看数据规模:日均10亿点以下,InfluxDB够用。超过这个量,考虑TDengine或TimescaleDB+分区。
  3. 然后看查询模式:如果90%的查询是“最近1小时原始数据”,Prometheus最合适。如果要做“过去一年按天聚合”,TDengine的降采样是杀手锏。
  4. 最后看预算:没钱就开源版+堆硬件。有钱就上企业版,省心。

我的建议:

如果你刚开始做物联网平台,我建议先用InfluxDB 2.x。生态最全,遇到问题百度一下就有答案。等数据量上来了,再考虑迁移到TDengine或TimescaleDB。别一开始就上“最强性能”,性能再强,没人会用也是白搭。

2.6 总结

选型没有银弹。InfluxDB适合快速原型,TimescaleDB适合SQL团队,TDengine适合海量设备,Prometheus适合监控场景。

你想想看,你的项目最看重什么?是“开发速度”还是“查询性能”?是“运维简单”还是“生态丰富”?想清楚这个,选型就完成了一半。

另一半,靠踩坑。嗯,我踩过的坑,都写在上面了。