时序数据库查询性能对比:InfluxDB vs. TDengine

时序数据库查询性能对比:InfluxDB vs. TDengine

基于 TSBS 标准数据集,TDengine Database 团队对时序数据库Time Series DatabaseTSDB) InfluxDB 和 TDengine 针对 TSBS 指定的 DevOps 中 cpu-only 五个场景进行了对比测试。

点击这里,查看相关背景介绍及软件配置。

在 TSBS 全部的 cpu-only 五个场景中,查询方面,相对于 InfluxDB,场景一,TDengine查询性能是其 1.9 ~ 37.0 倍,平均 11.3 倍,场景二,TDengine 查询性能是其 1.8 ~ 34.2 倍,平均是 11.3 倍。

对于查询性能的评估,我们使用场景一(只包含 4 天数据,这个修改与[7]中要求一致)和场景二作为基准数据集。对于 InfluxDB,我们开启 InfluxDB  的 TSI (time series index)。在整个查询对比中,TDengine 数据库的虚拟节点数量(vnodes)保持为默认的 6 个,其他的数据库参数配置为默认值。

1 4,000 devices × 10 metrics查询性能对比

由于部分类型(分类标准参见[7] )单次查询响应时间非常短,为了更加准确地测量每个查询场景的较为稳定的响应时间,我们将单个查询运行次数提升到 5,000 次,然后使用  TSBS 自动统计并输出结果,最后结果是 5,000 次查询的算数平均值,使用并发客户端 Workers 数量为 8。首先我们提供场景二 (4,000 设备)的查询性能对比结果。

表 1. 4,000 devices × 10 metrics(场景二)查询性能对比表(单位: ms)
查询分类  TDengine InfluxDB InfluxDB/TDengine
Simple Rollups single-groupby-1-1-1 0.94 1.71 181.91%
single-groupby-1-1-12 1.92 9.40 489.58%
single-groupby-1-8-1 2.09 4.10 196.17%
single-groupby-5-1-1 1.08 4.40 407.41%
single-groupby-5-1-12 3.00 36.43 1214.33%
single-groupby-5-8-1 2.60 13.58 522.31%
Aggregates cpu-max-all-1 1.30 5.86 450.77%
cpu-max-all-8 3.36 20.64 614.29%
Double-Rollups double-groupby-1 266.69 2,785.23 1044.37%
double-groupby-5 446.23 11,702.49 2622.52%
double-groupby-all 686.42 23,509.02 3424.87%
Thresholds high-cpu-1 2.23 17.15 769.06%
high-cpu-all 3,508.00 52,884.94 1507.55%
Complex Queries groupby-orderby-limit 1,527.02 23,169.15 1517.28%
lastpoint 133.13 2,808.00 2109.22%

下面我们对每个查询结果做一定的分析说明:

时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 1.  4000  devices ×  10 metrics  Simple Rollups 查询响应时间 (数值越小越好)

由于 Simple Rollups 的整体查询响应时间非常短,制约查询响应时间主体因素并不是查询涉及的数据规模,即这种类型查询的瓶颈并不是数据规模。但是 TDengine 仍然在所有类型的查询响应时间上优于 InfluxDB,具体的数值比较请参见表 1 中的详细数据表格。

时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 2 .  4000  devices ×  10 metrics Aggregates 查询响应时间 (数值越小越好)

在  Aggregates 类型的查询中,我们看到 TDengine 查询性能相比于 InfluxDB 有比较大的优势,TDengine 在 cpu-max-all-8 查询性能是 InfluxDB 的 7 倍。

时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 3.  4000  devices ×  10 metrics Double rollups 查询响应时间 (数值越小越好)

在 Double-rollups 类型查询中, TDengine 展现出巨大的性能优势,其查询响应时间来度量,在 double-groupby-5 查询上是 InfluxDB 的 26 倍 和 double-groupby-all 是其 34 倍。

时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 4.  4000  devices ×  10 metrics Thresholds 查询 high-cpu-1 响应时间 (数值越小越好)
时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 5.  4000  devices ×  10 metrics Thresholds 查询 high-cpu-all 响应时间 (数值越小越好)

如图 4、图 5 所示 threshold 类型的查询,TDengine 的查询响应时间均显著低于 InfluxDB。在 high-cpu-all 类型的查询上,TDengine 的性能是 InfluxDB 的 15 倍。

对于 Complex-queries 类型的查询,TDengine 两个查询均大幅领先 InfluxDB。在 lastpoint 查询中,查询性能是 InfluxDB 的 21倍。在 groupby-orderby-limit 场景中查询性能是 InfluxDB 的 15 倍。

时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 6 .  4000  devices ×  10 metrics Complex queries 查询响应时间 (数值越小越好)

2 资源开销对比

由于部分查询持续时间特别短,并不能完整地看到查询过程中服务器的 IO/CPU/网络情况。我们针对场景二以 Double rollups 类别中的 double-groupby-5 查询为例,执行 1,000 次查询,记录整个过程中 TDengine 和 InfluxDB 在查询执行的整个过程中服务器 CPU、内存、网络的开销进行对比。

时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 7.  查询过程中服务器  CPU  开销

如图 7 可以看到,TDengine 和 InfluxDB 在整个查询过程中 CPU 的使用均较为平稳。TDengine 在查询过程中整体 CPU 占用约 80%,使用的 CPU 资源较高,InfluxDB 的稳定的 CPU 占用较小,约 27 %(但是有较多的瞬时冲高)。整体 CPU 开销上来看,虽然 InfluxDB 瞬时 CPU 开销大部分是较低的,但是其完成查询持续时间最长,所以整体 CPU 资源消耗最多。由于 TDengine 完成全部查询的时间仅是 InfluxDB 的  1/20,虽然 CPU 稳定值是 InfluxDB 的 2 倍多,但整体的 CPU 计算时间消耗只有其 1/10 。

服务器内存状况

时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 8. 查询过程中服务器内存情况

如图 8 所示,在整个查询过程中,TDengine 内存维持了一个相对平稳的状态,InfluxDB 内存占用呈现相对稳定的状态。

服务器网络带宽

时序数据库查询性能对比:InfluxDB vs. TDengine - TDengine Database 时序数据库
图 9. 查询过程中网络占用情况

图 9 展示了查询过程中服务器端上行和下行的网络带宽情况,负载状况基本上和 CPU 状况相似。TDengine 网络带宽开销最高,因为在最短的时间内就完成了全部查询,需要将查询结果返回给客户端。InfluxDB 网络带宽开销最低。

3 100 devices × 10 metrics 查询性能对比

对于场景一(100 devices x 10 metrics),TSBS 的 15 个查询对比结果如下:

表 2. InfluxDB 相对于 TDengine 查询响应时间比率 (单位:ms)
查询分类  TDengine InfluxDB InfluxDB/TDengine
Simple Rollups single-groupby-1-1-1 0.91 2.01 220.88%
single-groupby-1-1-12 1.83 9.40 513.66%
single-groupby-1-8-1 2.09 3.98 190.43%
single-groupby-5-1-1 1.03 4.40 427.18%
single-groupby-5-1-12 2.94 36.77 1250.68%
single-groupby-5-8-1 2.63 13.71 521.29%
Aggregates cpu-max-all-1 1.27 5.92 466.14%
cpu-max-all-8 3.46 21.88 632.37%
Double-Rollups double-groupby-1 7.79 78.61 1009.11%
double-groupby-5 12.10 340.53 2814.30%
double-groupby-all 17.31 642.16 3709.76%
Thresholds high-cpu-1 2.05 13.51 659.02%
high-cpu-all 96.75 1,129.62 1167.57%
Complex Queries groupby-orderby-limit 1,527.02 23,169.15 1517.28%
lastpoint 133.13 2,808.00 2109.22%

如表 2 所示,在更小规模的数据集(100设备)上的查询对比可以看到,整体上 TDengine 同样展现出极好的性能,在全部的查询语句中全面优于 InfluxDB,部分查询性能超过 InfluxDB 37 倍。

>> InfluxDB vs. TDengine 其他性能对比测试具体结果与分析