不久前,我们发布了 InfluxDB 3.0 在数据写入性能上的测试结果。这次,我们进一步对比其查询性能。为了保证测试的公平性,本次测试依然采用 Time Series Benchmark Suite(TSBS)。InfluxDB 3.0 宣称支持 InfluxQL,按理来说,TSBS 针对 InfluxDB 1.8 的查询集应该可以直接在 3.0 版本上运行,但在实际测试中,我们发现其 InfluxQL 兼容性并不完善。
根据 InfluxData 官方文档(https://docs.influxdata.com/influxdb3/core/reference/influxql/feature-support/),InfluxDB 3.0 目前仍不完全支持 InfluxQL 语法,即便考虑到这些已知限制,我们仍然遇到了一些在 InfluxDB 1.8 上可正常执行的 TSBS 查询,在 InfluxDB 3.0 上却无法运行的情况。更值得关注的是,即使是能够执行的查询,InfluxDB 3.0 的查询性能也明显逊色于 InfluxDB 1.8。
DevOps 场景测试
我们首先对 DevOps 场景下的小规模数据集(100 台设备)进行基准测试,每个查询执行 4000 次,并使用 8 个 worker 进行并行查询,测量其平均响应时间。
Query | InfluxDB OSS 3.0 | InfluxDB OSS 1.8 | TDengine OSS 3.3.5.8 | InfluxDB 3.0 vs. 1.8 | TDengine vs. InfluxDB 3.0 | TDengine vs. InfluxDB 1.8 |
single-groupby-1-1-1 | 34.46 | 2.17 | 1.85 | 6.30% | 1862.70% | 117.30% |
single-groupby-1-1-12 | 306.97 | 10.92 | 3.52 | 3.56% | 8720.74% | 310.23% |
single-groupby-1-8-1 | 35.97 | 4.15 | 2.89 | 11.54% | 1244.64% | 143.60% |
single-groupby-5-1-1 | 38.96 | 5.33 | 2.25 | 13.68% | 1731.56% | 236.89% |
single-groupby-5-1-12 | 330.4 | 41.01 | 4.99 | 12.41% | 6621.24% | 821.84% |
single-groupby-5-8-1 | 40.76 | 14 | 3.92 | 34.35% | 1039.80% | 357.14% |
cpu-max-all-1 | 220.23 | 7.79 | 2.78 | 3.54% | 7921.94% | 280.22% |
cpu-max-all-8 | 228.85 | 16.91 | 6.17 | 7.39% | 3709.08% | 274.07% |
double-groupby-1 | 496.51 | 77 | 20.74 | 15.51% | 2393.97% | 371.26% |
double-groupby-5 | 522.81 | 322.1 | 37.32 | 61.61% | 1400.88% | 863.08% |
double-groupby-all | 556.91 | 614.01 | 55.63 | 110.25% | 1001.10% | 1103.74% |
high-cpu-1 | 663.75 | 15.67 | 3.41 | 2.36% | 19464.81% | 459.53% |
high-cpu-all | 947.92 | 1210.82 | 109.34 | 127.73% | 866.95% | 1107.39% |
groupby-orderby-limit | 721.51 | 163.72 | 10.86 | 22.69% | 6643.74% | 1507.55% |
lastpoint | 1905.56 | 39.65 | 10.71 | 2.08% | 17792.34% | 370.21% |
测试结果显示,InfluxDB 3.0 仅在 double-groupby-all
和 high-cpu-all
这两个查询上表现优于 InfluxDB 1.8,而其余查询的性能均大幅落后。其中,lastpoint
查询的执行速度甚至比 InfluxDB 1.8 慢了最多 48 倍。
鉴于 InfluxDB 3.0 可能针对高基数场景进行了优化,我们将测试规模扩大至 4000 台设备,以观察其在更大数据量下的表现。然而,测试过程中出现了严重问题:在数据库本身未崩溃,日志中也未记录任何相关错误的情况下,InfluxDB 3.0 拒绝了 HTTP 请求。
最终,我们不得不将 worker 数量减少到 3 个甚至 2 个,才能完成查询。受影响的查询包括 double-groupby-1
、double-groupby-5
、double-groupby-all
、high-cpu-all
、groupby-orderby-limit
和 lastpoint
,这表明 InfluxDB 3.0 在高并发查询环境下的稳定性存在明显问题。
IoT 场景测试
在 IoT 场景测试中,我们使用了更加复杂的数据集,以模拟 TDengine 典型用户所处理的海量时序数据。然而,在 12 个测试查询中,有 6 个查询在 InfluxDB 3.0 上完全无法运行,而 InfluxDB 1.8 则可以正常执行。
Query | InfluxDB OSS 3.0 | InfluxDB OSS 1.8 | TDengine OSS 3.3.5.8 | InfluxDB 3.0 vs. 1.8 | TDengine vs. InfluxDB 3.0 | TDengine vs. InfluxDB 1.8 |
last-loc | 370.27 | 12.02 | 2.3 | 3.25% | 16098.70% | 522.61% |
low-fuel | 277.41 | 18.91 | 11.41 | 6.82% | 2431.29% | 165.73% |
high-load | 352.29 | 12.28 | 2.36 | 3.49% | 14927.54% | 520.34% |
stationary-trucks | — | 51.43 | 7.37 | — | — | 697.83% |
long-driving-sessions | — | 11.94 | 9.22 | — | — | 129.50% |
long-daily-sessions | — | 43.87 | 18.82 | — | — | 233.10% |
avg-vs-projected-fuel-consumption | 997.92 | 262.05 | 101.38 | 26.26% | 984.34% | 258.48% |
avg-daily-driving-duration | — | 259.2 | 82.8 | — | — | 313.04% |
avg-daily-driving-session | — | 465.37 | 57.3 | — | — | 812.16% |
avg-load | 3653.23 | 3435.5 | 12.28 | 94.04% | 29749.43% | 27976.38% |
daily-activity | — | 135.41 | 63.11 | — | — | 214.56% |
breakdown-frequency | 1245.37 | 1630.43 | 122.43 | 130.92% | 1017.21% | 1331.72% |
注意:标记为“—”的条目表示查询失败或未返回结果。
从查询性能来看,InfluxDB 3.0 仅在 breakdown-frequency
查询上优于 InfluxDB 1.8,而其他查询的执行速度均明显落后。其中,在 last-loc
查询上,InfluxDB 3.0 的运行速度比 InfluxDB 1.8 慢了多达 30 倍。
此外,有六个查询执行失败,分别是 stationary-trucks
、long-driving-sessions
、long-daily-sessions
、avg-daily-driving-duration
、avg-daily-driving-session
和 daily-activity
。其中,后三个查询因 InfluxDB 3.0 的 InfluxQL 兼容性问题无法执行。例如,avg-daily-driving-duration
查询返回了以下错误信息:
类似的错误同样出现在 avg-daily-driving-session
和 daily-activity
查询中。为了验证这一问题,我们尝试修改 InfluxQL 查询,经过一定调整后,最终在 InfluxDB 3.0 上成功运行,这进一步表明其 InfluxQL API 并未完全兼容 InfluxDB 1.8。
此外,stationary-trucks
、long-driving-sessions
和 long-daily-sessions
查询虽然能够快速返回,但结果集为空。目前,我们仍未找到适用于 InfluxDB 3.0 的可行查询修改方案。
此外,当查询数据集扩展至 4000 台设备时,我们同样不得不减少 worker 数量,情况与 DevOps 场景类似。受影响的查询包括 last-loc
、high-load
、avg-vs-projected-fuel-consumption
、avg-daily-driving-session
、avg-load
和 breakdown-frequency
。
欢迎查看源码自行测试
为了实现测试流程的自动化,让用户能够使用 TSBS 对比不同数据库的性能,我们开发了一套支持本地运行的测试脚本。在 Ubuntu 22 系统上,用户可将 TSBS 分支 enh/add-influxdb3.0
克隆至 /usr/local/src
目录,然后进入 scripts/tsdbComp
目录,并以 root 用户执行 tsbs_test.sh --help
命令。
sudo -s
git clone https://github.com/taosdata/tsbs
cd tsbs
git checkout enh/add-influxdb3.0
cd scripts/tsdbComp
./tsbs_test.sh --help
该脚本支持多种测试场景和配置选项。鉴于测试涉及高性能计算,建议在至少配备 4 核 CPU 和 8GB 内存的机器上运行。
结语
本次 TSBS 测试表明,InfluxDB 3.0 在查询性能上仍然明显落后于 InfluxDB 1.8,同时 InfluxQL 兼容性问题较为严重。此外,由于查询时间范围被限制在 72 小时以内,许多典型的时序数据应用(包括 TSBS 测试场景)将变得难以实现,甚至无法执行。
鉴于 InfluxDB 3.0 仍处于公测阶段,我们相信其性能和兼容性在未来版本中可能会有所改进,但就当前情况来看,还是建议开源用户谨慎考虑是否升级。