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

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

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

1. 概述

KaiwuDB分布式多模数据库从物联网场景真实需求出发,针对性设计多模架构。物联网场景中时序数据处理能力始终是一大核心点,KaiwuDB 根据此需求在系统优化上重点关注海量时序数据的高性能读写、低成本存储、灵活生命周期管理及系统的水平拓展能力。

在前面的文章中我们部署了多副本集群环境并且也对多副本集群环境进行了高可用测试,本篇文章我们将对多副本集群环境进行压力测试。压力测试的目的是通过模拟高并发、大数据量的场景,评估数据库在高负载下的性能表现和稳定性。

TSBS是一个时序数据库系统的性能测试平台,广泛应用于物联网(IoT)、工业互联网、IT运维、电力监测等领域。这些场景通常需要处理海量、高频率、实时性强的时间序列数据,因此对数据库的性能和可靠性提出了极高的要求。TSBS具有便捷、易用、扩展灵活等特点,涵盖了时序数据的生成、写入、查询等功能,并能够自动汇总最终结果。由于其开放开源的特点,得到了众多数据库厂商的支持,作为专业的产品性能基准测试平台被若干数据库厂商广泛使用。

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

2. 压测环境部署

安装Go语言环境:

golang官网下载地址:https://golang.google.cn/doc/install

javascript 复制代码
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/
javascript 复制代码
vim ~/.bashrc
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

source ~/.bashrc 
go version
go version go1.24.2 linux/amd64
javascript 复制代码
go env -w GOBIN=/usr/local/go/bin
go env -w GO111MODULE=auto
go env -w GOPROXY=https://goproxy.cn,direct

安装TSBS:

javascript 复制代码
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
javascript 复制代码
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 秒一条数据。

javascript 复制代码
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语句,例如下面的数据格式:

javascript 复制代码
head -n 5 data.dat >> data1.dat 
cat data1.dat 
NSERT INTO cpu_usage (time, tags, usage_user, ...) 

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

javascript 复制代码
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工具模拟生产环境,该工具将指定文件中的数据加载到指定数据库实例,可以用于实现向远程数据库动态生成数据并加载

javascript 复制代码
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
javascript 复制代码
[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)

写入性能:

javascript 复制代码
cat write_results.log | grep "rows/sec"

5. 查询性能测试

查询吞吐和查询延迟是综合评估时序数据库的查询能力的重要指标。查询测试用例仍使用TSBS工具生成,选用时序场景代表性的single-groupby-1-1-1查询类型进行评测。single-groupby-1-1-1 查询类型的含义是选取 1 个设备的 1 个测量值,在随机的 1 小时内以 1 分钟为间隔进行分段聚合计算。

生成专用查询:

javascript 复制代码
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系列工具来执行查询脚本并生成性能测试结果:

javascript 复制代码
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(执行次数)

javascript 复制代码
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

查询性能:

javascript 复制代码
cat query_results.log | grep "queries completed"

7. 总结

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

预计再将被压测的部署环境硬件规格再次提升的话,KaiwuDB 的性能还可能会继续增长。这就充分证明了KaiwuDB的性能与技术实力能为用户在高性能时序数据管理方面提供可靠选择。

相关推荐
gsfl1 小时前
Redis 缓存
数据库·redis·缓存
恒悦sunsite7 小时前
Ubuntu之apt安装ClickHouse数据库
数据库·clickhouse·ubuntu·列式存储·8123
奥尔特星云大使8 小时前
MySQL 慢查询日志slow query log
android·数据库·mysql·adb·慢日志·slow query log
来自宇宙的曹先生8 小时前
MySQL 存储引擎 API
数据库·mysql
间彧8 小时前
MySQL Performance Schema详解与实战应用
数据库
间彧8 小时前
MySQL Exporter采集的关键指标有哪些,如何解读这些指标?
数据库
weixin_446260858 小时前
Django - 让开发变得简单高效的Web框架
前端·数据库·django
mpHH9 小时前
babelfish for postgresql 分析--todo
数据库·postgresql
zizisuo9 小时前
解决在使用Lombok时maven install 找不到符号的问题
java·数据库·maven
程序边界10 小时前
国产之光!金仓数据库KingbaseES Oracle兼容性深度体验大赏
数据库·oracle