基于 TSBS 标准数据集,TDengine Database 团队对时序数据库(Time Series Database,TSDB) 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 参数,不同场景下参数的设置如下表所示。
场景一 | 场景二 | 场景三 | 场景四 | 场景五 | |
---|---|---|---|---|---|
设备数目 | 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 网络连接。配置简表如下:
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的服务器系统信息如下:
- 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
- Gcc:gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04)
- 基础环境,版本信息为:Go1.16.9 , python3.8 , pip20.0.2 (无需手动安装,测试脚本将自动安装)
- 编译依赖:gcc , cmake, build-essential, git, libssl-dev (无需手动安装,测试脚本将自动安装)
但请做两个配置:
- client和 server配置ssh 访问免密,以便脚本可不暴露密码,可参考文档:免密配置。
- 保证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 目录。