一文告诉你如何一键复现“TSBS 时序数据库性能基准测试报告”测试结果
基于 TDengine 3.0 TSBS 基准测试报告,此前我们已经输出了系列文——为什么选择 TSBS 作为测试平台、写入性能对比、查询性能对比,分别就 TSBS 及测试环境、写入性能及开销、查询性能及开销进行了相关解读。在本篇文章中,我们将为想要验证本报告测试结果的小伙伴,分享进行报告测试复现的详细步骤。
数据建模
在 TSBS 框架中, TimescaleDB 和 InfluxDB 会自动创建相应的数据模型并生成对应格式的数据。本文不再赘述其具体的数据建模方式,只介绍 TDengine 的数据建模策略。
TDengine 一个重要的创新是其独特的数据模型——为每个设备创建独立的数据表(子表),并通过超级表(Super Table)在逻辑上和语义上对同一采集类型的设备进行统一管理。针对 DevOps 场景的数据内容,我们为每个设备 (这里是 CPU)创建了一个表,用以存储该表的时序数据。我们在 TDengine 中使用 hostname 作为子表的名称(因为 hostname 可以作为每个设备的标识 ID),并使用如下的语句创建名为 CPU 的超级表,包含 10 个测量值和 10 个标签。
然后 ,我们使用如下语句创建名为 host_0 的子表:
上述语句创建了一个子表。由此可知,对于 100 个设备(CPU)的场景 一,我们将会建立 100 个子表。对于 4000 个设备的场景二,系统中将会建立 4000 个子表用以存储各自对应的数据 。
软件版本和配置
本报告仅仅比较 TDengine ( Time Series Database )、InfluxDB 与 TimeScaleDB, 下面对使用的版本和配置做出说明。
TDengine
我们直接采用 TDengine Ver3.0,从 GitHub 克隆 TDengine 代码编译版本作为性能对比的版本。
在服务器上编译安装运行。
在 TDengine 的配置文件中设置了四个涉及查询的配置参数。
参数设置解读:
numOfVnodeFetchThreads 设置了 Vnode 的 Fetch 线程数量为 4 个,
queryRspPolicy 用来打开 query response 快速返回机制
compressMsgSize 的作用是自动压缩 TDengine 在传输层上大于 128,000 bytes 的消息
如果 CPU 支持,SIMD-builtins 可以启用内置的 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 的值,以此来获得更好的写入性能。
TimescaleDB
为确保结果具有可比性,我们选用 TimescaleDB 版本 version 2.6.0。为获得较好的性能,TimescaleDB 需要针对不同的场景设置不同的 Chunk 参数,不同场景下参数的设置如下表所示。
上述参数的设置,充分参考了《TimescaleDB vs. InfluxDB》(如下链接) 中推荐的配置参数设置,以确保能够最大化写入性能指标。
TimescaleDB vs. InfluxDB: Purpose Built Differently for Time-Series Data. https://www.timescale.com/blog/timescaledb-vs-influxdb-for-time-series-data-timescale-influx-sql-nosql-36489299877/
InfluxDB
我们选择了 InfluxDB version 1.8.10。这里没有使用 InfluxDB 最新的 2.x 版本是因为 TSBS 没有对其进行适配,所以选用了 InfluxDB 能够运行 TSBS 框架的最新版本。同样,我们采用《TimescaleDB vs. InfluxDB》中推荐的方式配置 InfluxDB,将缓冲区配置为 80G,以便 1000W 设备写入时能够顺利进行,同时开启 Time Series Index(TSI)。配置系统在系统插入数据完成 30s 后开始数据压缩。
测试步骤
硬件准备
为达到与 TimescaleDB vs. InfluxDB 对比报告中的环境高度接近,我们使用亚马逊 AWS 的 EC2 提供的 r4.8xlarge 类型实例作为基础运行平台,包括 1 台服务器、1 台客户端共两个节点构成的环境。客户端与服务器硬件配置完全相同,客户端与服务器使用 10 Gbps 网络连接。配置简表如下:
服务器环境准备
为运行测试脚本,服务器 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 访问免密,以便脚本可不暴露密码,可参考文档:免密配置(https://blog.csdn.net/qq_38154295/article/details/121582534)。
保证 client 和 server 之间所有端口开放。
获取测试脚本
为便于重复测试,隐藏繁琐的下载、安装、配置、启动、汇总结果等细节,整个 TSBS 的测试过程被封装成一个测试脚本。重复本测试报告,需要先下载该测试脚本,脚本暂支持 ubuntu20 以上的系统。以下操作要求具有 root 权限。
在客户端机器,进入测试目录拉取代码,默认进入 /usr/local/src/ 目录:
2. 修改配置文件 test.ini 中服务端和客户端的 IP 地址(这里配置 AWS 的私网地址即可)和 hostname,如果服务器未配置免密,还需要配置服务器端的 root 密码:
一键执行对比测试
执行以下命令:
测试脚本将自动安装 TDengine、InfluxDB、TimeScaleDB 等软件,并自动运行各种对比测试项。在目前的硬件配置下,整个测试跑完需要大约一天半的时间。测试结束后,将自动生成 CSV 格式的对比测试报告,并存放在客户端的 /data2 目录。
写在最后
阅读完毕,你一定更加深入地了解了 TDengine 的数据建模、三大数据库测试版本和配置,以及如何运用测试脚本进行一键复现。如果有小伙伴想要验证 TDengine 的报告结果,欢迎按照上述步骤进行操作,检验测试结果,有任何问题都欢迎大家和我们及时沟通。现在添加小 T vx:tdengine1,可以邀请你加入 TDengine 用户交流群,和更多志同道合的开发者一起聊技术、聊实战。
评论