体验 KWDB 及其测试组件 kwdb-tsbs

作者:听见风的声音
原文链接:https://www.modb.pro/db/1925359962285420544
1 KWDB-面向 AIoT 场景的分布式多模数据库产品
1.1 时序数据库-数据洪流中的时间舵手
时序数据库(TSDB)是专为处理按时间顺序生成的海量数据而设计的数据库系统。其核心原理是围绕时间戳构建数据模型,通过优化存储结构(如列式存储、时间分区)和压缩算法(如 Delta 编码),实现每秒百万级数据点的高效写入与快速查询。例如,国家电网使用 TDengine 数据库,每日可处理千万级智能电表的 10 亿条用电数据,存储成本降低 90%,同时支持秒级异常用电分析。时序数据库的发展逐渐从传统数据库扩展走向专用化:早期基于 Oracle 等关系型数据库的扩展因性能瓶颈逐渐被淘汰;2000 年后,RRDTool 以环形存储开创时序数据专用存储先河;2013 年 InfluxDB 推出 TSM 引擎,结合类 SQL 语法成为物联网主流选择;近年来,云原生 TSDB(如 AWS Timestream)实现弹性扩缩容,支撑亿级设备接入。随着物联网的不断推广及发展,时序数据库也面临比较复杂的挑战,主要集中在三个方面:其一,数据量爆炸式增长,如自动驾驶汽车每秒产生 1GB 数据,对存储与实时处理提出极限要求;其二,多模态数据融合难题,如气象预测需结合时间序列与空间地理数据;其三,查询效率与成本平衡,金融高频交易需纳秒级响应,而传统 TSDB 可能因索引冗余拖慢速度。时序数据库的发展也沿着不断克服各种各样的挑战,适应各种差异化的场景的方式演进,未来趋势呈现三大方向:一是边缘智能,在设备端部署轻量级 TSDB(如 QuestDB Edge),实现数据本地化处理,例如三一重工借此将挖掘机振动数据云端传输量减少 80%;二是 AI 原生融合,例如 Azure Data Explorer 已集成时序预测函数,某风电企业故障预测准确率从 78%提升至 95%;三是多模态扩展,比如 InfluxDB 推出地理空间插件,支持气象、物流等领域时空联合分析,再如浪潮推出的开源的 KWDB,融合了关系数据库、时序数据库及预测分析引擎。
1.2 KWDB-国产开源的多模时间数据库
KWDB 是由开放原子开源基金会孵化及运营的开源项目,是一款面向 AIoT 场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。相比传统的数据库,KaiwuDB 提供多模数据管理能力,提供关系数据模型和时序数据模型,助力企业跨部门、跨业务统一管理数据,实现多业务数据融合,支撑多样化的应用服务。KaiwuDB 的产品架构如下图所示

KaiwuDB 在多模数据库基础上开发了预测分析引擎,用于提供从模型导入、模型训练、模型预测、模型评估到模型更新的全生命周期管理能力。任何具备数据库应用开发背景的应用开发人员都可以轻松地导入、训练、预测、评估、更新模型。KaiwuDB 预测分析引擎支持社区活跃的主流机器学习框架,包括 scikit-learn、XGBoost、LightGBM 和 TensorFlow。除了原生的框架支持,KaiwuDB 预测分析引擎也具备扩展能力。用户不仅可以部署 KaiwuDB 自带的机器学习运行环境,还可以建立自定义的运行环境,满足不同项目的需要。KaiwuDB 的与分析引擎架构图如下:

1.3 kwdb-tsbs-- KaiwuDB 实现的 tsbs 测试套件
TSBS 是一个开源的性能基准测试平台,旨在为时序数据库系统提供性能评估。它涵盖了 IoT 和 DevOps 两个典型应用场景,能够模拟大规模时序数据生成、写入和查询等操作,从而对时序数据库的性能进行全面评估。
TSBS 的主要特点
便捷性:TSBS 提供了友好的用户界面,使得用户能够轻松设置和执行性能测试。
易用性:TSBS 的使用门槛较低,无需复杂的配置和安装过程,即可快速上手。
扩展灵活性:TSBS 支持自定义测试场景和数据模型,以满足不同用户的需求。
自动汇总结果:TSBS 能够自动汇总测试结果,为用户提供直观的性能数据。
TSBS 因其开放开源的特点,得到了众多数据库厂商的支持,成为专业产品性能基准测试平台的首选。通过使用 TSBS,数据库厂商可以对自己的产品进行全面的性能评估,从而优化产品性能,满足市场需求。TSBS 提供了下面两个测试场景
1)DevOps 场景
该用例分为两种形式:
完整形式:模拟真实 DevOps 监控场景,生成并插入来自 9 个可观测系统(如 CPU、内存、磁盘等)的指标数据。每轮读数周期共产生 100 个指标,涵盖系统全维度状态。
简化形式:聚焦 CPU 监控,每轮读数生成 10 个 CPU 核心指标(如利用率、负载、上下文切换次数等),适用于轻量级测试。
两类形式均会为每台主机生成元数据标签(如主机地理位置、操作系统类型等),标签组合唯一标识一台主机,主机数量通过规模参数(scale flag)动态定义。例如设置 1000 台主机时,将生成 1000 组独立标签及对应监控数据流。
2)物联网(IoT)场景
模拟虚构物流公司的卡车车队数据流,包含:
诊断数据:每辆卡车生成引擎温度、油耗、胎压等实时指标;
环境复杂性:引入乱序数据(如网络延迟导致时序错乱)和批量数据摄入(模拟卡车离线后重新联网的补传场景);
元数据关联:通过卡车编号、车型、所属车队等元数据,将分散的指标与诊断记录动态关联。生成的查询请求将涵盖两类分析:
实时状态:监控车辆当前位置、故障码等即时信息;
预测分析:基于历史时序数据(如连续 30 天引擎振动频率)预测零部件寿命,实现预防性维护。场景规模由卡车数量参数(scale factor)控制,例如 5000 辆卡车将产生 5000 条独立数据流。
kwdb-tsbs 是一款基于 Timescale Time Series Benchmark Suite (TSBS) 的时序数据库性能基准测试工具,用于生成数据集,然后对 KaiwuDB 数据库的读写性能进行基准测试。kwdb-tsbs 支持时序数据生成、数据写入、查询处理、自动化结果汇总统计等功能。具有一下特性
数据生成:支持自定义设备数量、数据采样时间范围和数据采样间隔。
数据导入:提供针对 KaiwuDB 优化的批量写入工具。
查询场景:提供标准的时序查询模板。
自动化测试:一键执行完整的 KaiwuDB 性能基准测试流程
目前,kwdb-tsbs 只支持 DevOps cpu-only 测试场景,场景只关注 CPU 指标。该测试场景模拟对服务器 CPU 监控生成的时序数据,针对每台设备(CPU)记录其 10 个 CPU 指标。
2 KWDB 的部署
KWDB 支持用户根据需求选择二进制安装包、容器和源码安装与试用 KWDB 数据库
二进制安装包:支持单机和集群以及安全和非安全部署模式,更多信息见单节点部署和集群部署。
容器镜像:KWDB 提供了多种容器镜像下载渠道,用户可以根据当前网络环境选择合适的镜像,或者直接在 Release 页面下载对应版本的后缀为 -docker.tar.gz 的压缩包解压并使用 docker load < KaiwuDB.tar 命令加载 kaiwudb_install/packages 中的镜像。官方仓库:kwdb/kwdb 国内镜像:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kwdb/kwdbGithub 容器镜像:ghcr.io/kwdb/kwdb
源码:源码编译目前支持单节点非安全模式部署。
我这里的环境是一个 Oracle VM VirtualBOX 虚拟机,安装的是 CentOS 7 操作系统,配置是 4C10G,80G 的 SSD,CentOS 不在 KWDB 官方支持的操作系统之内,因此选择容器方式安装,查一下官网文档,KWDB 支持容器安装部署的方式有两种,一是使用 YAML 文件部署,一是直接使用 docker 命令部署。直接使用命令部署相对简单直接,所以这里首先使用这种方式。这两种方式的前提条件在官网上是相同的
已获取 KaiwuDB 容器安装包。
待部署节点的硬件、操作系统、软件依赖和端口满足安装部署要求。
安装用户为 root 用户或者拥有 sudo 权限的普通用户。
root 用户和配置 sudo 免密的普通用户在执行部署脚本时无需输入密码。
未配置 sudo 免密的普通用户在执行部署脚本时,需要输入密码进行提权。
安装用户为非 root 用户时,需要通过 sudo usermod -aG docker $USER 命令将用户添加到 docker 组。
这里对第二个要求提出质疑,既然是使用容器部署了,对待部署节点的硬件有要求是应该的,为何对操作系统、软件依赖也要求提出要求,这个要求是什么,是否和二进制时要求的相同,个人感觉应该说的清楚一些。因为,我这里的操作系统及软件依赖是不符合 KWDB 二进制安装的要求的,这个疑虑导致我在部署的过程中一直怀疑这次部署是不是会有问题,部署的第一步是获取 KWDB 容器安装包(官网的叫法),使用下面命令拉取映像,拉取映像前先检查一下 docker 映像仓库地址,现在 docker 官方的影响仓库地址连接很不稳定,稍微大一点的映像就容易超时,还是换成国内的镜像仓库地址较好,运行 docker info 命令,显示当前使用的镜像仓库
这里使用的轩辕镜像,仓库更换方法可以参考这个镜像的网站。使用下面命令拉取 kwdb 映像
查看一下拉取的映像
映像的大小是 259MB,我电脑中 postgres 17 的映像是 438MB,MySQL 的映像是 516MB,kwdb 的代码还是比较精简的。使用下面命令部署 KWDB
上面命令的-v 选项将宿主的/var/lib/kaiwudb 映射到容器内,在运行 docker 命令前需要先创建这个目录
然后运行 docker 命令后,容器创建并启动成功
3 kwdb-tsbs 的安装部署
kwdb-tsbs 必须以源码编译的方式安装部署,编译需要 go 1.23 及以上版本,go 的二进制安装包可以从官网下载,linux 操作系统可以使用 wget 命令下载
下载后使 tar 命令解压至相应目录,并创建 go 执行文件至/usr/bin 的软连接
上面之所以使用软连接的方式,而不使用设置用户环境变量的方式是这种方式更简单直接,不必为每个用户单独设置。
现在已具备 kwdb-tsbs 的编译条件,从 github 克隆 kwdb-tsbs 仓库,进入仓库目录后进行编译
运行 make 命令编译,在这里报了如下错误
刚看到这个错误以为是 github 连接不稳定的原因,打开浏览器验证一下这时 github 的连接是稳定的,百度了一下才发现原来是 proxy.golang.org 的连接有问题,需要更换一个可用的 goproxy 代理,网上搜索发现了一个是可用的网址如下 goproxy 可用地址
将此 go proxy 的地址设置为当前环境变量,再次编译
编译成功了,在 tsbs 仓库路径 bin 目录下生成了相应的文件
4 使用 kwdb-tsbs 进行测试
使用 kwdb-tsbs 进行基准测试包括 4 个阶段:数据生成、数据导入、查询生成、和查询执行,这四个阶段 kwdb-tsbs 都提供相应的脚本,在执行这四个脚本之前需要在数据库执行一些准备工作
4.1 数据库上的准备工作
这次 kwdb-tsbs 测试使用 root 账户进行,数据上的准备比较简单,登陆 kwdb,创建一个数据库即可
benchmark 是这次测试使用的数据库,引擎类型是 TIME SERIES
4.2 创建测试数据集
上面命令中 forma 和 use-case 只能填这个值,scale 设置主机的数量,orderquantity 设置初始生成设备数量。例如,对于 100 台 设备,首先生成从 host_0 到 host_11 的数据,然后生成从 host_12 到 host_23 的数据。命令运行后,生成的数据如下
4.3 载入数据
上面的命令中,user,pass,host,port 根据数据库的实际情况填写,我这里是非安全模式的 kwdb,root 密码为空。insert 类型可以选择 prepare 和 insert,insert 直接载入数据,prepare 先进行编译后再载入,猜测 prepare 方式应该会快一些,db-name 填入之前创建的数据库。tsbs 的载入相当快这从命令的执行结果可以看出来
1 秒钟平均载入 454033 多行,4994836 多个 metrics,这个载入效率是相当高的。这个载入脚本会数据库内创建表并载入数据,登陆数据库可以查到以下信息
4.4 生成测试查询语句
这个命令的参数大部分前面都出现过,查询次数是测试总共运行的查询的次数。
4.5 运行测试
file 参数填入刚才创建的查询文件,测试的结果如下
5 一点感想
国产数据库这几天的发展确实很快,也有了非常明显的进步。KWDB 和测试组件 kwdb-tsbs 的安装部署相当简单,尤其是 kwdb-tsbs 组件的数据载入速度给我的印象非常深刻。
版权声明: 本文为 InfoQ 作者【KaiwuDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/903b923dedee15bc3c947a629】。文章转载请联系作者。
评论