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

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

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

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

在场景一(只包含 4 天的数据)与场景二的 15 个不同类型的查询中,TDengine 的查询平均响应时间全面优于 TimescaleDB,而且在复杂查询上优势更为明显,同时具有最小的计算资源开销。相对于 TimeScaleDB,场景一,TDengine 查询性能是其 1.1 ~ 28.6 倍,平均 7.6 倍,场景二,TDengine查询性能是其 1.2 ~ 24.6 倍,平均 7.7 倍。 

在查询性能评估部分,我们使用场景一(只包含 4 天数据,这个修改与[7]中要求一致)和场景二作为基准数据集。在查询性能评估之前,对于 TimescaleDB, 我们采用[7]中推荐配置,设置为 8 个 Chunk ,以确保其充分发挥查询性能。在整个查询对比中,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 TimescaleDB TimescaleDB/TDengine
Simple Rollups single-groupby-1-1-1 0.94 3.27 347.87%
single-groupby-1-1-12 1.92 5.07 264.06%
single-groupby-1-8-1 2.09 4.56 218.18%
single-groupby-5-1-1 1.08 3.34 309.26%
single-groupby-5-1-12 3.00 7.02 234.00%
single-groupby-5-8-1 2.60 9.6 369.23%
Aggregates cpu-max-all-1 1.30 5.54 426.15%
cpu-max-all-8 3.36 23.72 705.95%
Double-Rollups double-groupby-1 266.69 5467.91 2050.29%
double-groupby-5 446.23 10984.63 2461.65%
double-groupby-all 686.42 16660.7 2427.19%
Thresholds high-cpu-1 2.23 4.05 181.61%
high-cpu-all 3,508.00 4328.64 123.39%
Complex Queries groupby-orderby-limit 1,527.02 12784.92 837.25%
lastpoint 133.13 755.37 567.39%

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

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

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

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

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

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

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

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

对于 Complex-queries 类型的查询,TDengine 两个查询均大幅领先 TimescaleDB。在 lastpoint 查询中,查询性能是 TimescaleDB 的 5 倍。在 groupby-orderby-limit 场景中查询性能是 TimescaleDB的 8 倍。在时间窗口聚合的查询过程中,TimescaleDB 针对规模较大的数据集其查询性能不佳(double rollups 类型查询),对于 groupby-orderby-limit 的查询,其性能上表现同样不是太好。

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

2 资源开销对比

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

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

如图 7 可以看到,两个系统在整个查询过程中 CPU 的使用均较为平稳。TDengine 在查询过程中整体 CPU 占用约 80%, 使用的 CPU 资源最高,TimescaleDB 在查询过程中瞬时 CPU 占用约 38%。由于 TDengine 完成全部查询的时间仅 TimescaleDB 1/20,虽然 CPU 稳定值是 TimescaleDB 的 2 倍多,整体的 CPU 计算时间消耗只有其 1/10 。

服务器内存状况

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

如图 8 所示,在整个查询过程中,TDengine 内存维持了一个相对平稳的状态。TimescaleDB 在整个查询过程中内存呈现增加的状态,查询完成后即恢复到初始状态。

服务器网络带宽

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

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

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

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

表 2. Timescale 相对于 TDengine 查询响应时间比率 (单位:ms)
查询分类  TDengine TimescaleDB TimescaleDB/TDengine
Simple Rollups single-groupby-1-1-1 0.91 2.93 321.98%
single-groupby-1-1-12 1.83 4.87 266.12%
single-groupby-1-8-1 2.09 4.30 205.74%
single-groupby-5-1-1 1.03 3.19 309.71%
single-groupby-5-1-12 2.94 6.38 217.01%
single-groupby-5-8-1 2.63 5.91 224.71%
Aggregates cpu-max-all-1 1.27 5.55 437.01%
cpu-max-all-8 3.46 22.83 659.83%
Double-Rollups double-groupby-1 7.79 116.66 1497.56%
double-groupby-5 12.10 346.48 2863.47%
double-groupby-all 17.31 489.04 2825.19%
Thresholds high-cpu-1 2.05 3.92 191.22%
high-cpu-all 96.75 104.68 108.20%
Complex Queries groupby-orderby-limit 47.48 367.40 773.80%
lastpoint 3.95 17.64 446.58%

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

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