【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试
【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/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工具生成,选用时序场景代表性的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的性能与技术实力能为用户在高性能时序数据管理方面提供可靠选择。
相关文章:
【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试
【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试 1. 概述2. 压测环境部署3. 生成测试数据4. 写入性能测试5. 查询性能测试7. 总结 1. 概述 KaiwuDB分布式多模数据库从物联网场景真实需求出发,针对性设计多模架构。物联网…...
极狐GitLab 自定义实例级项目模板功能介绍
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 自定义实例级项目模板 (PREMIUM SELF) 极狐GitLab 管理员可以将群组设置为在实例上创建新项目时可选择的项目模板的来源。然…...
最新扣子(Coze)案例教程:飞书多维表格按条件筛选记录 + 读取分页Coze工作流,无限循环使用方法,手把手教学,完全免费教程
大家好,我是斜杠君。 👨💻 星球群里有同学想学习一下飞书多维表格的使用方法,关于如何通过按条件筛选飞书多维表格中的记录,以及如何使用分页解决最多一次只能读取500条的限制问题。 斜杠君今天就带大家一起搭建一…...
第八天 AI开发:NavMesh导航系统 对话系统:使用ScriptableObject存储对话数据 存档系统:JSON序列化保存数据
一、智能导航系统:NavMesh实战指南 1.1 导航网格基础配置 在Unity编辑器中: 选择场景中的静态物体勾选Navigation Static属性打开Window > AI > Navigation窗口 烘焙参数设置: NavMeshBuildSettings settings NavMesh.GetSettingsBy…...
Spring AI Alibaba-02-多轮对话记忆、持久化消息记录
Spring AI Alibaba-02-多轮对话记忆、持久化消息记录 Lison <dreamlison163.com>, v1.0.0, 2025.04.19 文章目录 Spring AI Alibaba-02-多轮对话记忆、持久化消息记录多轮对话对话持久-Redis 本次主要聚焦于多轮对话功能的实现,后续会逐步增加更多实用内容&…...
联邦元学习实现个性化物联网的框架
随着数据安全和隐私保护相关法律法规的出台,需要直接在中央服务器上收集和处理数据的集中式解决方案,对于个性化物联网而言,训练各种特定领域场景的人工智能模型已变得不切实际。基于此,中山大学,南洋理工大学…...
做虚拟化应该怎么选择美国服务器?
选择适合做虚拟化的美国服务器,需要综合考虑硬件性能、网络质量、稳定性、价格和服务支持等多个方面。以下是详细的选购指南,适合准备搭建VPS、虚拟主机、分销业务、开发测试环境、容器集群等用途的用户参考。 一、为什么美国服务器适合虚拟化? 美国机房…...
实验1 温度转换与输入输出强化
知识点:input()/print()、分支语句、字符串处理(教材2.1-2.2) 实验任务: 1. 实现摄氏温度与华氏温度互转(保留两位小数) 2. 扩展功能:输入错误处理(如非数字输入提示重新输入&#x…...
MongoDB 集合名称映射问题
项目场景 在使用 Spring Data MongoDB 进行开发时,定义了一个名为 CompetitionSignUpLog 的实体类,并创建了对应的 Repository 接口。需要明确该实体类在 MongoDB 中实际对应的集合名称是 CompetitionSignUpLog 还是 competitionSignUpLog。 问题描述 …...
【AI】SpringAI 第五弹:接入千帆大模型
1. 添加依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-qianfan</artifactId> </dependency> 2. 编写 yml 配置文件 spring:ai:qianfan:api-key: 你的api-keysecret-key: 你的secr…...
【编码规范】原生开发 与 Vue+组件库开发
原生开发 vs Vue组件库开发对比 一、原生开发常用方法 DOM操作: document.getElementById()document.querySelector()element.addEventListener()classList API操作类名 事件处理: 直接事件绑定事件委托 document.body.addEventListener(click, functi…...
[Godot] C#2D平台游戏基础移动和进阶跳跃代码
本文章给大家分享一下如何实现基本的移动和进阶的跳跃(跳跃缓冲、可变跳跃、土狼时间)以及相对应的重力代码,大家可以根据自己的需要自行修改 实现效果 场景搭建 因为Godot不像Unity,一个节点只能绑定一个脚本,所以我…...
【Unity笔记】Unity + OpenXR项目无法启动SteamVR的排查与解决全指南
图片为AI生成 一、前言 随着Unity在XR领域全面转向OpenXR标准,越来越多的开发者选择使用OpenXR来构建跨平台的VR应用。但在项目实际部署中发现:打包成的EXE程序无法正常启动SteamVR,或者SteamVR未能识别到该应用。本文将以“Unity OpenXR …...
使用 rebase 轻松管理主干分支
前言 最近遇到一个技术团队的 dev 环境分支错乱,因为是多人合作大家各自提交信息,导致出现很多交叉合并记录,让对应 log 看起来非常混乱,难以阅读。 举例说明 假设我们有一个项目,最初develop分支有 3 个提交记录&a…...
【愚公系列】《Python网络爬虫从入门到精通》063-项目实战电商数据侦探(主窗体的数据展示)
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
HttpSessionListener 的用法笔记250417
HttpSessionListener 的用法笔记250417 以下是关于 HttpSessionListener 的用法详解,涵盖核心方法、实现步骤、典型应用场景及注意事项,帮助您全面掌握会话(Session)生命周期的监听与管理: 1. 核心功能 HttpSessionLi…...
火山RTC 5 转推CDN 布局合成规则
实时音视频房间,转推CDN,文档: 转推直播--实时音视频-火山引擎 一、转推CDN 0、前提 * 在调用该接口前,你需要在[控制台](https://console.volcengine.com/rtc/workplaceRTC)开启转推直播功能。<br> * 调…...
Spark两种运行模式与部署
1. Spark 的运行模式 部署Spark集群就两种方式,单机模式与集群模式 单机模式就是为了方便开发者调试框架的运行环境。但是生产环境中,一般都是集群部署。 现在Spark目前支持的部署模式: (1)Local模式:在本地…...
react 父子组件通信 子 直接到父, 父 forwardref子
React核心概念:单向数据流(Unidirectional Data Flow) React 中数据的流动像瀑布一样,只能从上层组件(父组件)流向下层组件(子组件)。 子组件无法直接反向修改父组件的数据&#x…...
qt画一朵花
希望大家的生活都更加美好,画一朵花送给大家 效果图 void FloatingArrowPubshButton::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing);QPen pen;pen.setColor("green");pen.setWidth(5);QBrush…...
服务器上安装maven
1.安装 下载安装包 https://maven.apache.org/download.cgi 解压安装包 cd /opt/software tar -xzvf apache-maven-3.9.9-bin.tar.gz 安装目录(/opt/maven/) mv /opt/software/apache-maven-3.9.9 /opt/ 3.权限设置 把/opt/software/apache-maven-3.9.9 文件夹重命名为ma…...
UOS+N 卡 + CUDA 环境下 X86 架构 DeepSeek 基于 vLLM 部署与 Dify 平台搭建指南
一、文档说明 本文档是一份关于 DeepSeek 在X86架构下通vLLM工具部署的操作指南,主要面向需要在UOSN卡CUDA环境中部署DeepSeek的技术人员,旨在指导文档使用者完成从 Python 环境升级、vLLM 库安装、模型部署到 Dify 平台搭建的全流程操作。 二、安装Pyt…...
MySQL终章(8)JDBC
目录 1.前言 2.正文 2.1JDBC概念 2.2三种编码方式 2.2.1第一种 2.2.2第二种(优化版) 2.2.3第三种(更优化版) 3.小结 1.前言 哈喽大家好吖,今天来给大家带来Java中的JDBC的讲解,之前学习的都是操作…...
点云数据处理开源C++方案
一、主流开源库对比 库名称特点适用场景开源协议活跃度PCL功能最全,算法丰富科研、工业级应用BSD★★★★★Open3D现代API,支持Python绑定快速开发、深度学习MIT★★★★☆CGAL计算几何算法强大网格处理、高级几何运算GPL/LGPL★★★☆☆PDAL专注于点云…...
Python 爬虫如何伪装 Referer?从随机生成到动态匹配
一、Referer 的作用与重要性 Referer 是 HTTP 请求头中的一个字段,用于标识请求的来源页面。它在网站的正常运行中扮演着重要角色,例如用于统计流量来源、防止恶意链接等。然而,对于爬虫来说,Referer 也可能成为被识别为爬虫的关…...
【MySQL】表的约束(主键、唯一键、外键等约束类型详解)、表的设计
目录 1.数据库约束 1.1 约束类型 1.2 null约束 — not null 1.3 unique — 唯一约束 1.4 default — 设置默认值 1.5 primary key — 主键约束 自增主键 自增主键的局限性:经典面试问题(进阶问题) 1.6 foreign key — 外键约束 1.7…...
基于STC89C52RC和8X8点阵屏、独立按键的小游戏《打砖块》
目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 用的是普中A2开发板,外设有:8X8LED点阵屏、独立按键。 【单片机】STC89C52RC 【频率】12T11.0592MHz 效…...
数字电子技术基础(五十)——硬件描述语言简介
目录 1 硬件描述语言简介 1.1 硬件描述语言简介 1.2 硬件编程语言的发展历史 1.3 两种硬件描述的比较 1.4 硬件描述语言的应用场景 1.5 基本程序结构 1.5.1 基本程序结构 1.5.2 基本语句和描述方法 1.5.3 仿真 1 硬件描述语言简介 1.1 硬件描述语言简介 硬件描述语…...
【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读
【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读前言autopad函数Conv类__init__成员函数forward成员函数forward_fuse成员函数 Bottleneck类__init__成员…...
16.Chromium指纹浏览器开发教程之WebGPU指纹定制
WebGPU指纹概述 WebGPU是下一代的Web图形和计算API,旨在提供高性能的图形渲染和计算能力。它是WebGL的后继者,旨在利用现代GPU的强大功能,使得Web应用能够实现接近原生应用的图形和计算性能。而且它是一个低级别的API,可以直接与…...
