【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的性能与技术实力能为用户在高性能时序数据管理方面提供可靠选择。

相关推荐
呼拉拉呼拉10 分钟前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超13 分钟前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)33 分钟前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅42 分钟前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍2 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税2 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
hshpy3 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
文牧之4 小时前
Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
运维·数据库·oracle
篱笆院的狗4 小时前
如何使用 Redis 快速实现布隆过滤器?
数据库·redis·缓存
洛神灬殇5 小时前
【LLM大模型技术专题】「入门到精通系列教程」基于ai-openai-spring-boot-starter集成开发实战指南
网络·数据库·微服务·云原生·架构