亮点总结:
TSBS 测试表明,对于少于 100 万台设备的数据集,InfluxDB OSS 3.0 的数据写入速度实际上比 InfluxDB OSS 1.8 更慢。
对于 100 万台及以上设备的数据集,InfluxDB OSS 3.0 的数据写入性能才开始超过 InfluxDB OSS 1.8。
InfluxDB OSS 3.0 的数据写入接口与 InfluxDB 1.8 并不兼容,用户无法顺利迁移。
早在 2023 年,在 InfluxDB 3.0 推向企业用户时,官方曾宣称其相比旧版本有显著的性能提升。为了验证这一说法,InfluxData 还发布了一份基准测试报告,对比了 InfluxDB 3.0 企业版与 InfluxDB OSS 1.8,结果显示 InfluxDB 3.0 在各方面表现出色。
我们对这个版本非常好奇,但作为非企业用户,只能和大多数人一样等待了一年半,直到今年 1 月 InfluxDB OSS 3.0 终于公开发布。虽然目前的版本仅是“public alpha”,但这并不妨碍我们对其性能抱有很高的期待,毕竟 InfluxData 已经第二次彻底重构产品架构。对于那些希望平稳升级的用户来说,这无疑是个不小的冲击,更何况官方还直接放弃了 Flux 语言。如果 InfluxDB 3.0 无法在性能上带来真正的突破,那这样的升级又有何意义?
实际测试:InfluxDB 3.0 真的更快吗?
为了验证 InfluxDB 3.0 是否真的如官方宣传般带来巨大性能提升,我们采用 Time Series Benchmark Suite (TSBS) 进行对比测试。TSBS 由 InfluxData 最初开发,目前由 Timescale 维护,是业界公认的时序数据库基准测试工具。理论上,InfluxDB 3.0 仍支持 InfluxQL 和传统的 Line Protocol,因此应该能够直接运行针对 1.8 版本的测试套件。然而,在实际测试过程中,我们遇到了多个兼容性问题,不得不寻找替代方案,这部分将在后续介绍测试方法的章节中详细说明。
我们之所以选择 TSBS 作为测试工具,不仅因为它比 QuestDB 之前发布的简单基准测试更全面,还因为它提供了一个公开透明的测试框架,让不同数据库的对比变得更加公平。然而,测试结果却让我们大跌眼镜。
TSBS 提供了两个测试场景:DevOps 监控(CPU 监测)和物联网(IoT,车辆跟踪)。在测试中,我们使用 TSBS 生成数据,并分别写入 InfluxDB 3 0.1.0(修订版 v2.5.0-14345)、InfluxDB OSS 1.8 和 TDengine OSS 3.3.5.8。以下图表展示了各系统在不同测试场景下的写入性能(指标数/秒)。
TSBS DevOps 用例:
TSBS IoT 用例:
测试结果分析:InfluxDB 3.0 写入提升远不及 45 倍
在最大规模的数据集中,InfluxDB 3.0 在 DevOps 场景下的写入性能提升了 5.4 倍,在物联网(IoT)场景下提升了 4.9 倍。这与 InfluxData 基准测试报告中声称的“写入吞吐量提升 45 倍”相去甚远。更令人意外的是,在设备数量不超过 10 万的场景下,InfluxDB 1.8 的写入性能竟然优于 InfluxDB 3.0。这表明,InfluxDB 3.0 所谓的性能提升,要么仅适用于企业版,要么在独立测试中并不成立。
从测试结果我们也可以看到,TDengine 的写入速度比 InfluxDB 3.0 快 4.4 至 11.3 倍,相较 InfluxDB 1.8 更是提升了 3.1 至 22.8 倍。这进一步证明,即便 InfluxDB 3.0 进行了彻底重构,其写入性能仍难以与 TDengine 相媲美。
TSBS 适配已完成,欢迎查看源码自行测试
本次测试在一台 40 核、256GB 内存的服务器上进行。该服务器的配置略低于 InfluxDB 官方基准测试环境,高于 QuestDB 的测试环境,但硬件差异对整体性能趋势的影响可忽略不计。
由于 TSBS 尚未针对 InfluxDB 3.0 进行更新,我们不得不对其进行一定的修改。为确保公平性,我们尽量减少了改动,但仍需解决以下问题:
-
数据库管理指令不兼容 TSBS 运行 InfluxDB 1.8 时使用的 SHOW、CREATE、DELETE 数据库命令在 InfluxDB 3.0 中已不可用。因此,我们改用 InfluxDB v3 API:
-
GET /api/v3/configure/database
查询数据库 -
POST /api/v3/configure/database
创建数据库 -
DELETE /api/v3/configure/database
删除数据库
-
-
多线程写入失败 在使用多个并发写入进程时,InfluxDB 3.0 频繁出现写入失败,并报错
Invalid write response (status 409): catalog update error: table already exists
。为解决此问题,我们修改了 TSBS,使其在遇到该错误时自动重试,而不是直接退出。此外,数据写入采用 InfluxDB 3.0 提供的/api/v3/write_lp
接口。
现在所有修改均已提交到我们维护的 TSBS 分支,任何人都可以查看源码并自行运行测试。
结语
尽管 InfluxDB 3.0 经过全面重构,并宣传性能显著提升,但从写入性能来看,至少对开源用户而言,这一承诺并未兑现。测试结果表明,其写入性能仅在超大规模数据集下略优于 InfluxDB 1.8,而对于大多数用户,尤其是设备数少于 100 万场景下,性能反而有所下降。即便目前仍处于 Public Alpha 阶段,但该版本已开发一年多的时间,它的表现真的值得开源社区期待吗?
此外,InfluxDB 3.0 采用了全新架构,导致用户无法顺利从 1.8 版本升级。对于开源用户而言,这次升级是否值得,也确实需要慎重考虑。尤其是当数据写入性能成为瓶颈时,从目前的测试结果来看,InfluxDB 3.0 并未能提供令人信服的解决方案。相比之下,TDengine 始终坚持对开源社区的承诺,不仅提供高性能、全功能的软件,还确保所有用户都能公平获取和使用。面对时序数据存储与处理的挑战,选择一款真正高效、稳定的数据库,才是更明智的决定。