基于 TSBS 标准数据集,TDengine Database 团队对时序数据库(Time Series Database,TSDB) 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 设备)的查询性能对比结果。
查询分类 | 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% |
下面我们对每个查询结果做一定的分析说明:
由于 Simple Rollups 的整体查询响应时间非常短,制约查询响应时间主体因素并不是查询涉及的数据规模,即这种类型查询的瓶颈并不是数据规模。但是 TDengine 仍然在所有类型的查询响应时间上优于 InfluxDB,具体的数值比较请参见表 1 中的详细数据表格。
在 Aggregates 类型的查询中,我们看到 TDengine 查询性能相比于 InfluxDB 有比较大的优势,TDengine 在 cpu-max-all-8 查询性能是 InfluxDB 的 7 倍。
在 Double-rollups 类型查询中, TDengine 展现出巨大的性能优势,其查询响应时间来度量,在 double-groupby-5 查询上是 InfluxDB 的 26 倍 和 double-groupby-all 是其 34 倍。
如图 4、图 5 所示 threshold 类型的查询,TDengine 的查询响应时间均显著低于 InfluxDB。在 high-cpu-all 类型的查询上,TDengine 的性能是 InfluxDB 的 15 倍。
对于 Complex-queries 类型的查询,TDengine 两个查询均大幅领先 InfluxDB。在 lastpoint 查询中,查询性能是 InfluxDB 的 21倍。在 groupby-orderby-limit 场景中查询性能是 InfluxDB 的 15 倍。
2 资源开销对比
由于部分查询持续时间特别短,并不能完整地看到查询过程中服务器的 IO/CPU/网络情况。我们针对场景二以 Double rollups 类别中的 double-groupby-5 查询为例,执行 1,000 次查询,记录整个过程中 TDengine 和 InfluxDB 在查询执行的整个过程中服务器 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 。
服务器内存状况
如图 8 所示,在整个查询过程中,TDengine 内存维持了一个相对平稳的状态,InfluxDB 内存占用呈现相对稳定的状态。
服务器网络带宽
图 9 展示了查询过程中服务器端上行和下行的网络带宽情况,负载状况基本上和 CPU 状况相似。TDengine 网络带宽开销最高,因为在最短的时间内就完成了全部查询,需要将查询结果返回给客户端。InfluxDB 网络带宽开销最低。
3 100 devices × 10 metrics 查询性能对比
对于场景一(100 devices x 10 metrics),TSBS 的 15 个查询对比结果如下:
查询分类 | 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 其他性能对比测试具体结果与分析