TSBS测试结果:InfluxDB 3.0 查询性能较 InfluxDB 1.8 大幅下降,兼容性仍存问题

不久前,我们发布了 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 进行并行查询,测量其平均响应时间。

TSBS测试结果:InfluxDB 3.0 查询性能较 InfluxDB 1.8 大幅下降,兼容性仍存问题 - TDengine Database 时序数据库
TSBS测试结果:InfluxDB 3.0 查询性能较 InfluxDB 1.8 大幅下降,兼容性仍存问题 - TDengine Database 时序数据库
TSBS测试结果:InfluxDB 3.0 查询性能较 InfluxDB 1.8 大幅下降,兼容性仍存问题 - TDengine Database 时序数据库
QueryInfluxDB
OSS 3.0
InfluxDB
OSS 1.8
TDengine
OSS 3.3.5.8
InfluxDB 3.0 vs. 1.8TDengine vs. InfluxDB 3.0TDengine vs. InfluxDB 1.8
single-groupby-1-1-134.462.171.856.30%1862.70%117.30%
single-groupby-1-1-12306.9710.923.523.56%8720.74%310.23%
single-groupby-1-8-135.974.152.8911.54%1244.64%143.60%
single-groupby-5-1-138.965.332.2513.68%1731.56%236.89%
single-groupby-5-1-12330.441.014.9912.41%6621.24%821.84%
single-groupby-5-8-140.76143.9234.35%1039.80%357.14%
cpu-max-all-1220.237.792.783.54%7921.94%280.22%
cpu-max-all-8228.8516.916.177.39%3709.08%274.07%
double-groupby-1496.517720.7415.51%2393.97%371.26%
double-groupby-5522.81322.137.3261.61%1400.88%863.08%
double-groupby-all556.91614.0155.63110.25%1001.10%1103.74%
high-cpu-1663.7515.673.412.36%19464.81%459.53%
high-cpu-all947.921210.82109.34127.73%866.95%1107.39%
groupby-orderby-limit721.51163.7210.8622.69%6643.74%1507.55%
lastpoint1905.5639.6510.712.08%17792.34%370.21%

测试结果显示,InfluxDB 3.0 仅在 double-groupby-allhigh-cpu-all 这两个查询上表现优于 InfluxDB 1.8,而其余查询的性能均大幅落后。其中,lastpoint 查询的执行速度甚至比 InfluxDB 1.8 慢了最多 48 倍。

鉴于 InfluxDB 3.0 可能针对高基数场景进行了优化,我们将测试规模扩大至 4000 台设备,以观察其在更大数据量下的表现。然而,测试过程中出现了严重问题:在数据库本身未崩溃,日志中也未记录任何相关错误的情况下,InfluxDB 3.0 拒绝了 HTTP 请求。

TSBS测试结果:InfluxDB 3.0 查询性能较 InfluxDB 1.8 大幅下降,兼容性仍存问题 - TDengine Database 时序数据库

最终,我们不得不将 worker 数量减少到 3 个甚至 2 个,才能完成查询。受影响的查询包括 double-groupby-1double-groupby-5double-groupby-allhigh-cpu-allgroupby-orderby-limitlastpoint,这表明 InfluxDB 3.0 在高并发查询环境下的稳定性存在明显问题。

IoT 场景测试

在 IoT 场景测试中,我们使用了更加复杂的数据集,以模拟 TDengine 典型用户所处理的海量时序数据。然而,在 12 个测试查询中,有 6 个查询在 InfluxDB 3.0 上完全无法运行,而 InfluxDB 1.8 则可以正常执行。

TSBS测试结果:InfluxDB 3.0 查询性能较 InfluxDB 1.8 大幅下降,兼容性仍存问题 - TDengine Database 时序数据库
TSBS测试结果:InfluxDB 3.0 查询性能较 InfluxDB 1.8 大幅下降,兼容性仍存问题 - TDengine Database 时序数据库
QueryInfluxDB
OSS 3.0
InfluxDB
OSS 1.8
TDengine
OSS 3.3.5.8
InfluxDB 3.0 vs. 1.8TDengine vs. InfluxDB 3.0TDengine vs. InfluxDB 1.8
last-loc370.2712.022.33.25%16098.70%522.61%
low-fuel277.4118.9111.416.82%2431.29%165.73%
high-load352.2912.282.363.49%14927.54%520.34%
stationary-trucks51.437.37697.83%
long-driving-sessions11.949.22129.50%
long-daily-sessions43.8718.82233.10%
avg-vs-projected-fuel-consumption997.92262.05101.3826.26%984.34%258.48%
avg-daily-driving-duration259.282.8313.04%
avg-daily-driving-session465.3757.3812.16%
avg-load3653.233435.512.2894.04%29749.43%27976.38%
daily-activity135.4163.11214.56%
breakdown-frequency1245.371630.43122.43130.92%1017.21%1331.72%

注意:标记为“—”的条目表示查询失败或未返回结果。

从查询性能来看,InfluxDB 3.0 仅在 breakdown-frequency 查询上优于 InfluxDB 1.8,而其他查询的执行速度均明显落后。其中,在 last-loc 查询上,InfluxDB 3.0 的运行速度比 InfluxDB 1.8 慢了多达 30 倍。

此外,有六个查询执行失败,分别是 stationary-truckslong-driving-sessionslong-daily-sessionsavg-daily-driving-durationavg-daily-driving-sessiondaily-activity。其中,后三个查询因 InfluxDB 3.0 的 InfluxQL 兼容性问题无法执行。例如,avg-daily-driving-duration 查询返回了以下错误信息:

TSBS测试结果:InfluxDB 3.0 查询性能较 InfluxDB 1.8 大幅下降,兼容性仍存问题 - TDengine Database 时序数据库

类似的错误同样出现在 avg-daily-driving-sessiondaily-activity 查询中。为了验证这一问题,我们尝试修改 InfluxQL 查询,经过一定调整后,最终在 InfluxDB 3.0 上成功运行,这进一步表明其 InfluxQL API 并未完全兼容 InfluxDB 1.8。

此外,stationary-truckslong-driving-sessionslong-daily-sessions 查询虽然能够快速返回,但结果集为空。目前,我们仍未找到适用于 InfluxDB 3.0 的可行查询修改方案。

此外,当查询数据集扩展至 4000 台设备时,我们同样不得不减少 worker 数量,情况与 DevOps 场景类似。受影响的查询包括 last-lochigh-loadavg-vs-projected-fuel-consumptionavg-daily-driving-sessionavg-loadbreakdown-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 仍处于公测阶段,我们相信其性能和兼容性在未来版本中可能会有所改进,但就当前情况来看,还是建议开源用户谨慎考虑是否升级。