时序数据库性能对比 TimescaleDB vs. TDengine 背景介绍

时序数据库性能对比 TimescaleDB vs. TDengine 背景介绍

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

本测试报告中的数据在准备好物理环境后,可以由脚本一键执行生成。

点击这里,查看 TSBS 性能基准对比框架简介。

1 软件版本和配置

本报告仅仅比较 TDengine 与 TimescaleDB,下面对使用的版本和配置做出说明。

1.1 TDengine

我们直接采用 TDengine Ver3.0,从 GitHub 克隆 TDengine 代码编译版本作为性能对比的版本。

gitinfo: c90e2aa791ceb62542f6ecffe7bd715165f181e8

在服务器上编译安装运行。

cmake .. -DDISABLE_ASSERT=true -DSIMD_SUPPORT=true -DCMAKE_BUILD_TYPE=Release  -DBUILD_TOOLS=false
make -j  && make install

在 TDengine 的配置文件中设置了四个涉及查询的配置参数。

numOfVnodeFetchThreads           4
queryRspPolicy                   1
compressMsgSize             128000
SIMD-builtins                    1

第一个参数 numOfVnodeFetchThreads 设置 Vnode 的Fetch 线程数量为 4 个, 第二个参数 queryRspPolicy 打开  query response 快速返回机制, 第三个参数 compressMsgSize 让TDengine 在传输层上大于 128,000 bytes的消息自动进行压缩,第四个参数是如果 CPU 支持,启用内置的 FMA/AVX/AVX2 硬件加速。

如上所述,TDengine 建库默认创建 6 个 vnodes,即创建的表会按照表名随机分配到 6 个 虚拟节点(virtual node, VNode) 中。打开 LRU 缓存,设置为 last_row 缓存模式。对于场景一和场景二,stt_trigger 设置为 1,此时 TDengine 会准备一个 Sorted Time-series Table (STT) 文件,用于容纳单表写入量小于 minimum rows 的时候,数据直接保存在 STT 文件中,当 STT 文件中无法容纳新数据的时候,会将 STT 中的数据整理,再写入到数据文件中。对于其他的场景(场景三、四、五),stt_trigger 设置为 8,即允许最多生成 8 个 STT 文件。针对表较多的场景,需要适度增加 STT 的值,以此来获得更好的写入性能。

1.2 TimescaleDB

为确保结果具有可比性,我们选用 TimescaleDB 版本 version 2.6.0。为获得较好的性能,TimescaleDB 需要针对不同的场景设置不同的 Chunk 参数,不同场景下参数的设置如下表所示。

表 2. 不同场景下 TimescaleDB 的 chunk 配置
场景一 场景二 场景三 场景四 场景五
设备数目 100 4000 100,000 1,000,000 10,000,000
Chunk 数目 12 12 12 12 12
Chunk 持续时间 2.58 天 8 小时 15 分 15 秒 15 秒
Chunk 内记录数 2,232,000 11,520,000 9,000,000 1,500,000 15,000,000

上述参数的设置,充分参考了对比报告[7]中推荐的配置参数设置,以确保能够最大化写入性能指标。

2. 测试步骤

2.1 硬件准备

为与对比报告[7]的环境高度接近,我们使用亚马逊 AWS 的 EC2 提供的 r4.8xlarge 类型实例作为基础运行平台,包括 1 台服务器、1 台客户端共两个节点构成的环境。客户端与服务器硬件配置完全相同,客户端与服务器使用 10 Gbps 网络连接。配置简表如下:

表 3. 物理节点配置
CPU Memory Disk
服务器 Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz 32vCPU 244GiB 800G SSD,3000 IOPS. 吞吐量上限是 125 MiB/Sec
客户端 Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz 32vCPU 244GiB 800G SSD,3000 IOPS. 吞吐量上限是 125 MiB/Sec

2.2 服务器环境准备

为运行测试脚本,服务器OS需要是ubuntu20以上的系统。AWS EC2的服务器系统信息如下:

  1. OS: Linux tv5931 5.15.0-1028-aws #32~20.04.1-Ubuntu SMP Mon Jan 9 18:02:08 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  2. Gcc:gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04)
  3. 基础环境,版本信息为:Go1.16.9 , python3.8 , pip20.0.2 (无需手动安装,测试脚本将自动安装) 
  4. 编译依赖:gcc , cmake, build-essential, git, libssl-dev (无需手动安装,测试脚本将自动安装)

但请做两个配置:

  1. client和 server配置ssh 访问免密,以便脚本可不暴露密码,可参考文档:免密配置
  2. 保证client 和 server 之间所有端口开放。

2.3 获取测试脚本

为便于重复测试,隐藏繁琐的下载、安装、配置、启动、汇总结果等细节,整个 TSBS 的测试过程被封装成一个测试脚本。重复本测试报告,需要先下载该测试脚本,脚本暂支持 ubuntu20 以上的系统。以下操作要求具有 root 权限。

1. 在客户端机器,进入测试目录拉取代码,默认进入 /usr/local/src/ 目录,

cd /usr/local/src/ && apt install git && git clone https://github.com/taosdata/tsbs.git && cd tsbs/scripts/tsdbComp 

2. 修改配置文件 test.ini 中服务端和客户端的 IP 地址(这里配置 AWS 的私网地址即可)和 hostname,如果服务器未配置免密,还需要配置服务器端的 root 密码。

clientIP="192.168.0.203"   #client ip
clientHost="trd03"         #client hostname
serverIP="192.168.0.204"   #server ip
serverHost="trd04"         #server hostname
serverPass="taosdata123"   #server root password

2.4 一键执行对比测试

执行以下命令:

nohup bash tsdbComparison.sh > test.log &

测试脚本将自动安装 TDengine, InfluxDB, TimescaleDB 等软件,并自动运行各种对比测试项。在目前的硬件配置下,整个测试跑完需要大约一天半的时间。测试结束后,将自动生成 CSV 格式的对比测试报告,并存放在客户端的 /data2 目录。

3 性能对比测试具体结果与分析