【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试
- 1. 概述
- 2. 压测环境部署
- 3. 生成测试数据
- 4. 写入性能测试
- 5. 查询性能测试
- 7. 总结
1. 概述
KaiwuDB分布式多模数据库从物联网场景真实需求出发,针对性设计多模架构。物联网场景中时序数据处理能力始终是一大核心点,KaiwuDB 根据此需求在系统优化上重点关注海量时序数据的高性能读写、低成本存储、灵活生命周期管理及系统的水平拓展能力。
在前面的文章中我们部署了多副本集群环境并且也对多副本集群环境进行了高可用测试,本篇文章我们将对多副本集群环境进行压力测试。压力测试的目的是通过模拟高并发、大数据量的场景,评估数据库在高负载下的性能表现和稳定性。
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/bin
source ~/.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_nice
tags,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.938533
Summary:
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工具生成,选用时序场景代表性的single-groupby-1-1-1
查询类型进行评测。single-groupby-1-1-1
查询类型的含义是选取 1 个设备的 1 个测量值,在随机的 1 小时内以 1 分钟为间隔进行分段聚合计算。
生成专用查询:
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(最大值)
、 stddev
、 sum(总时间)
、 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在数据写入、查询和压缩存储方面均表现出色,尤其在高并发写入和实时查询场景中,性能显著优于同类数据库。
预计再将被压测的部署环境硬件规格再次提升的话,KaiwuDB 的性能还可能会继续增长。这就充分证明了KaiwuDB的性能与技术实力能为用户在高性能时序数据管理方面提供可靠选择。