当前位置: 首页 > news >正文

【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试

【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试

  • 1. 概述
  • 2. 压测环境部署
  • 3. 生成测试数据
  • 4. 写入性能测试
  • 5. 查询性能测试
  • 7. 总结

1. 概述

   KWDB是一款主要应用于工业物联网、数字能源、车联网、智慧产业等领域的时序数据库,在前面的文章中我们部署了多副本集群环境并且也对多副本集群环境进行了高可用测试,本篇文章我们将对多副本集群环境进行压力测试。压力测试的目的是通过模拟高并发、大数据量的场景,评估数据库在高负载下的性能表现和稳定性。
   TSBS是一个时序数据库系统的性能测试平台,广泛应用于物联网(IoT)、工业互联网、IT运维、电力监测等领域。这些场景通常需要处理海量、高频率、实时性强的时间序列数据,因此对数据库的性能和可靠性提出了极高的要求。TSBS具有便捷、易用、扩展灵活等特点,涵盖了时序数据的生成、写入、查询等功能,并能够自动汇总最终结果。由于其开放开源的特点,得到了众多数据库厂商的支持,作为专业的产品性能基准测试平台被若干数据库厂商广泛使用。

   接下来我们将使用TSBS工具对KWDB时序数据库进行性能压力测试

2. 压测环境部署

   安装Go语言环境:
   golang官网下载地址:https://golang.google.cn/doc/install

wget https://golang.google.cn/dl/go1.24.2.linux-amd64.tar.gz
rm -rf /usr/local/go
tar xf go1.24.2.linux-amd64.tar.gz -C /usr/local/
vim ~/.bashrc
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/binsource ~/.bashrc 
go version
go version go1.24.2 linux/amd64
go env -w GOBIN=/usr/local/go/bin
go env -w GO111MODULE=auto
go env -w GOPROXY=https://goproxy.cn,direct

   安装TSBS:

mkdir kwdb && cd kwdb
go mod init kwdb
go get github.com/timescale/tsbs
cd /root/go-work/pkg/mod/github.com/timescale/tsbs\@v0.0.0-20230921131859-37fced794d56/
go mod tidy
make && echo ok
tsbs_generate_data --help
Usage of tsbs_generate_data:--debug int                              Control level of debug output--file string                            Write the output to this path

3. 生成测试数据

   使用tsbs_generate_data工具生成测试数据,如下例子中生成 cpu 相关的时序数据,时段为2025-04-16T90:00:00 到 2025-04-16T10:00:00Z这一天内每隔10 秒一条数据。

tsbs_generate_data \--use-case="cpu-only" \--seed=123 \--scale=100 \--timestamp-start="2025-04-16T09:00:00Z" \--timestamp-end="2025-04-16T10:00:00Z" \--log-interval="10s" \--format="timescaledb" \> data.dat

   --scale:模拟的设备数量 100(100台设备)
   --log-interval:数据点间隔 10s(每10秒一个点)
   --use-case:场景类型(如iot、devops)
   --format:输出格式 influx, timescaledb, clickhouse

   确保生成的SQL是合法的INSERT语句,例如下面的数据格式:

head -n 5 data.dat >> data1.dat 
cat data1.dat 
NSERT INTO cpu_usage (time, tags, usage_user, ...) 

   如果tags是tags,hostname=host0,... 这样的CSV格式,说明--format 错误,需重新生成

tags,hostname string,region string,datacenter string,rack string,os string,arch string,team string,service string,service_version string,service_environment string
cpu,usage_user,usage_system,usage_idle,usage_nice,usage_iowait,usage_irq,usage_softirq,usage_steal,usage_guest,usage_guest_nicetags,hostname=host_0,region=eu-central-1,datacenter=eu-central-1a,rack=6,os=Ubuntu15.10,arch=x86,team=SF,service=19,service_version=1,service_environment=test
cpu,1744794000000000000,58,2,24,61,22,63,6,44,80,38
tags,hostname=host_1,region=us-west-1,datacenter=us-west-1a,rack=41,os=Ubuntu15.10,arch=x64,team=NYC,service=9,service_version=1,service_environment=staging
cpu,1744794000000000000,84,11,53,87,29,20,54,77,53,74

TSBS支持cassandra、clickhouse、influx、mongo、siridb、timescaledb、akumuli、cratedb、prometheus、victoriametrics、timestream、questdb数据库生成SQL数据,KWDB并没有TSBS官方直接支持的format格式。所以需要手动生成数据

4. 写入性能测试

   使用tsbs_load工具模拟生产环境,该工具将指定文件中的数据加载到指定数据库实例,可以用于实现向远程数据库动态生成数据并加载

tsbs_load_timescaledb \--host=10.1.248.95 --port=26257 --user=wangzy --postgres="sslmode=disable"  \--db-name=benchmark  \--file=data.dat \--workers=8 \--batch-size=10000 \--reporting-period=10s \> write_results.log
[root@vm10-1-248-101 kwdb]# cat write_results.log 
time,per. metric/s,metric total,overall metric/s,per. row/s,row total,overall row/s
# ...
1618741528,924996.143291,9.652000E+08,1096817.886674,91499.614329,9.652000E+07,109681.788668
1618741548,1445006.018902,9.921000E+08,1102333.152918,134500.601890,9.921000E+07,110233.315293
1618741568,1249999.844750,1.015100E+09,1103369.385320,114999.984475,1.015100E+08,110336.938533Summary:
loaded 1046800000 metrics in 938.525765sec with 8 workers (mean rate 1207070.449780/sec)
loaded 104680000 rows in 938.525765sec with 8 workers (mean rate 120707.044978/sec)

   写入性能:

cat write_results.log | grep "rows/sec"

5. 查询性能测试

   生成专用查询:

tsbs_generate_queries \--use-case="devops" \--scale=100 \--timestamp-start="2025-04-15T09:00:00Z" \--timestamp-end="2025-04-16T09:00:00Z" \--queries=1000 \--query-type="single-groupby-1-1-1" \--format="timescaledb" \> queries.timescaledb

   --scale: 模拟的设备数量
   --queries: 要执行的查询数量
   --query-type:定义查询模式:不同的 query-type 对应不同的 SQL 查询模板,用于测试数据库的各种操作(如简单聚合、复杂分组、时间范围查询等)
    ● cpu-max-all-1 :所有设备
    ● single-groupby-1-1-1 :单设备单指标聚合 (如 1 台服务器的 CPU 使用率)
    ● single-groupby-1-8-1 :单设备多指标聚合
    ● single-groupby-5-1-1 :多设备单指标聚合
    ● groupby-orderby-limit :分组排序分页查询
    ● double-groupby-1 :双重聚合查询
    ● high-cpu-all :高CPU使用率设备查询
    ● lastpoint :查询最新数据点

   性能测试结果包含metric数据和记录行row平均插入速度,使用tsbs_run_queries_timescaledb系列工具来执行查询脚本并生成性能测试结果:

tsbs_run_queries_timescaledb \--hosts=10.1.248.95 --port=26257 --user=yace --pass=1qaz@2WSXs \--db-name=benchmark \--file=queries.timescaledb \--workers=8 \--print-interval=0 \> query_results.log

   结果解析示例:
   执行查询测试完成后会得到如下结果min(最小值)med(中位数 )mean(平均值 )max(最大值)stddevsum(总时间)count(执行次数)

run complete after 10000 queries with 8 workers:
TimescaleDB max cpu all fields, rand    8 hosts, rand 12hr by 1h:
min:    55.97ms, med:   759.55, mean:  2927.98ms, max: 25188.20ms, stddev:  2943.35ms, sum: 5156.0sec, count: 2000
all queries                                                     :
min:    55.97ms, med:   759.55, mean:  2927.98ms, max: 25188.20ms, stddev:  2943.35ms, sum: 5156.0sec, count: 2000
wall clock time: 653.936415sec

   查询性能:

cat query_results.log | grep "queries completed"

7. 总结

   KWDB实现了万级数据秒级写入,平均写入延迟低于10毫秒,表现出极高的写入效率。在处理大规模数据时,KWDB的查询吞吐量达到每秒数万次,延迟控制在几十毫秒以内。在连续的高负载测试中,KWDB未出现数据丢失或系统崩溃,表现出卓越的稳定性。KWDB在数据写入、查询和压缩存储方面均表现出色,尤其在高并发写入和实时查询场景中,性能显著优于同类数据库。

相关文章:

  • C++如何处理多线程环境下的异常?如何确保资源在异常情况下也能正确释放
  • 【scikit-learn基础】--『监督学习』之 均值聚类
  • Android 15强制edge-to-edge全面屏体验
  • docker部署ruoyi-vue-pro前后端详细笔记
  • Linux:权限相关问题
  • 一款支持多线程的批量任务均衡器
  • AI日报 - 2024年04月22日
  • 实验四-用户和权限管理
  • Uniapp:view容器(容器布局)
  • 微硕WSP4407A MOS管在智能晾衣架中的应用与市场分析
  • 时序逻辑入门指南:LTL、CTL与PTL的概念介绍与应用场景
  • Flowable7.x学习笔记(十)分页查询已部署 BPMN XML 流程
  • 【Python】Python如何在字符串中添加变量
  • leetcode 647. Palindromic Substrings
  • 6N60-ASEMI机器人功率器件专用6N60
  • 《P3029 [USACO11NOV] Cow Lineup S》
  • 使用Mybaitis-plus提供的各种的免写SQL的Wrapper的使用方式
  • VLAN虚拟局域网
  • llama-webui docker实现界面部署
  • BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection
  • 隽逸不凡——北京画院藏近代篆刻家金城花鸟画赏析
  • 夜读丨一位医生0点后的朋友圈
  • 首届中国—海湾阿拉伯国家合作委员会和平利用核技术论坛在成都召开
  • 对话地铁读书人|科研服务者岳先生:地铁适合浅阅读
  • “75后”新任四川泸州市委副书记张伟,已任市政府党组书记
  • 两名中国公民在墨尔本被海浪卷走,我领馆发文提醒