KaiwuDBKaiwuDB

KWDB 创作者计划 | KWDB容器化部署与性能测试

2025-04-27

本文链接:https://blog.csdn.net/lgbisha/article/details/147165056

作者:lgbisha



什么是KWDB


KWDB 是由 开放原子开源基金会孵化并运营的开源项目,定位为一款面向 AIoT 场景 的 分布式多模数据库产品。

它支持在同一实例中同时构建 时序库 和 关系库,实现多模数据的融合管理与统一处理。


该系统具备以下核心能力:

1、高并发数据处理能力:支持千万级设备接入、百万级数据秒级写入、亿级数据秒级读取,满足大规模物联网环境下的高效数据处理需求;

2、强大的时序数据处理能力:专为海量时序数据设计,具备高吞吐、低延迟的写入与查询性能;

3、多模融合架构:统一支持时序数据与结构化数据的存储与分析,便于构建复杂业务模型;

4、稳定安全、易于运维:具备高可用架构设计、完善的安全机制以及便捷的运维工具,适用于大规模工业级部署场景。


KWDB 适用于工业互联网、智慧城市、能源、电力、交通等多种 AIoT 应用场景,是一款具有自主创新能力的国产数据库解决方案。


KWDB 创作者计划 | KWDB容器化部署与性能测试(图1)


 面向不同角色的支持能力


 对于开发者:

KWDB 提供完善的开发支持,具备如下特性:

1、标准化的 通用连接接口

2、高速写入 与 极速查询能力

3、SQL 支持,方便上手

4、支持 数据压缩策略 与 生命周期管理

5、灵活的 集群部署

6、可无缝集成多种第三方工具(如 BI 工具、数据分析平台)


这些能力帮助开发者快速构建应用,降低学习成本与开发复杂度,大幅提升开发效率。


对于运维人员:

KWDB 同样为数据库管理员和运维人员提供了强有力的支撑,包括:

1、一键式的 快速安装与部署

2、支持平滑的 升级与迁移操作

3、提供丰富的 系统监控能力

4、降低整体 运维与管理成本



开始部署KWDB

这次安装我们准备使用docker容器进行安装


docker环境的安装

1、进行docker容器的安装,安装最新版本的docker

2、这里因为docker现在已经无法直接通过网络安装,所以我们通过离线安装的方式安装docker环境

3、从官网下载离线包

https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/

KWDB 创作者计划 | KWDB容器化部署与性能测试(图2)


1、如图所示,把离线包传到服务器上,进行安装

dpkg -i *.deb


2、查看安装的docker版本


root@VM-12-13-ubuntu:/home/docker# docker -v
Docker version 27.1.2, build d01f264


3、至此docker容器环境安装完毕


 

docker-compose安装


1、docker容器安装完毕后,开始安装docker-compose

2、https://github.com/docker/compose/tags离线下载docker-compose的包

3、因为我是x86-64的环境,所以从中找到docker-compose-linux-x86_64进行下载

4、下载完毕后上传到服务器,然后执行 sudo cp -f docker-compose-linux-x86_64 /usr/local/bin/docker-compose

5、然后授予可执行权限,sudo chmod +x /usr/local/bin/docker-compose

6、查看docker-compose版本

root@VM-12-13-ubuntu:/# sudo docker-compose -v
Docker Compose version v2.29.2




使用容器快速部署KWDB


1、首先去镜像仓库,查看KWDB镜像,果然是有的,这样就可以快速进行KWDB的安装与启动


KWDB 创作者计划 | KWDB容器化部署与性能测试(图3)


2、先去拉去镜像,docker pull kwdb/kwdb,拉取最新的KWDB镜像


KWDB 创作者计划 | KWDB容器化部署与性能测试(图4)


3、然后创建创建 docker-compose.yml 配置文件

version: '3.3'
services:
 kaiwudb-container:
   image: "kwdb/kwdb:latest"
   container_name: kaiwudb-experience
   hostname: kaiwudb-experience
   ports:
     - 8080:8080
     - 26257:26257
   ulimits:
     memlock: -1
   volumes:
     - /dev:/dev
   networks:
     - default
   restart: on-failure
   ipc: shareable
   privileged: true
   environment:
     - LD_LIBRARY_PATH=/kaiwudb/lib
   tty: true
   working_dir: /kaiwudb/bin
   command:
     - /bin/bash
     - -c
     - |
       /kaiwudb/bin/kwbase start-single-node --insecure --listen-addr=0.0.0.0:26257 --advertise-addr=127.0.0.1:26257 --http-addr=0.0.0.0:8080 --store=/kaiwudb/deploy/kaiwudb




基础结构



version: '3.3'
services:
  kaiwudb-container:


1、version: '3.3':指定使用 Docker Compose 文件的语法版本。

2、services::定义一个或多个容器服务,这里只有一个服务叫做 kaiwudb-container。




容器配置

image: "kwdb/kwdb:latest"
container_name: kaiwudb-experience
hostname: kaiwudb-experience


1、image:使用的镜像,来自于 kwdb/kwdb:latest。

2、container_name:指定容器名为 kaiwudb-experience。

3、hostname:容器的主机名,也叫 kaiwudb-experience,有助于容器内部网络识别。




端口映射

ports:
  - 8080:8080
  - 26257:26257


将宿主机的端口 8080 和 26257 映射到容器内部的相同端口:

1、8080 是 KaiwuDB 的 Web 管理界面(http 访问)

2、26257 是数据库服务监听端口




系统相关设置

ulimits:
  memlock: -1
volumes:
  - /dev:/dev
ipc: shareable
privileged: true


1、ulimits.memlock: -1:禁用内存锁限制,适用于数据库避免 swap。

2、volumes: /dev:/dev:挂载宿主机的 /dev 到容器内

3、ipc: shareable:允许其他容器与它共享 IPC 命名空间。

4、privileged: true:给予容器几乎与宿主机等同的权限




其他设置

networks:
  - default
restart: on-failure
tty: true
working_dir: /kaiwudb/bin


1、networks: default:使用默认网络。

2、restart: on-failure:如果容器因错误退出,会自动重启。

3、tty: true:分配一个伪终端,便于交互和日志记录。

4、working_dir:设置默认的工作目录。




环境变量和启动命令


environment:
  - LD_LIBRARY_PATH=/kaiwudb/lib
command:
  - /bin/bash
  - -c
  - |
    /kaiwudb/bin/kwbase start-single-node --insecure --listen-addr=0.0.0.0:26257 --advertise-addr=127.0.0.1:26257 --http-addr=0.0.0.0:8080 --store=/kaiwudb/deploy/kaiwudb


1、LD_LIBRARY_PATH=/kaiwudb/lib:供 KaiwuDB 启动时查找依赖库。

2、command: 使用 bash -c 执行多行命令。


实际执行的命令是:


/kaiwudb/bin/kwbase start-single-node \
  --insecure \
  --listen-addr=0.0.0.0:26257 \
  --advertise-addr=127.0.0.1:26257 \
  --http-addr=0.0.0.0:8080 \
  --store=/kaiwudb/deploy/kaiwudb


含义如下:

1、start-single-node:以单节点模式启动数据库。

2、--insecure:以非加密模式运行,适合本地体验

3、--listen-addr=0.0.0.0:26257:监听所有网卡上的 26257 端口。

4、--advertise-addr=127.0.0.1:26257:对外广播的地址为 127.0.0.1(主要用于集群内部通信)。

5、--http-addr=0.0.0.0:8080:Web UI 监听端口。

6、--store=/kaiwudb/deploy/kaiwudb:数据库数据存储路径。



 

启动KWDB容器


执行 docker-compose up -d


root@VM-12-13-ubuntu:/data/docker/kwdb# docker-compose up -d
Creating network "kwdb_default" with the default driver
Creating kaiwudb-experience ... done
root@VM-12-13-ubuntu:/data/docker/kwdb#


可以看到KWDB已经成功启动了




使用KDC联接KWDB


1、什么是KDC,KaiwuDB Developer Center(KaiwuDB 开发者中心),是KaiwuDB官方的可视化连接管理工具

2、首先需要下载KDC,可以在官方gitee仓库中找到下载地址,https://gitee.com/kwdb/kwdb/releases


KWDB 创作者计划 | KWDB容器化部署与性能测试(图5)


下载完毕后解压


KWDB 创作者计划 | KWDB容器化部署与性能测试(图6)


双击打开可视化工具,配置新连接


KWDB 创作者计划 | KWDB容器化部署与性能测试(图7)


配上刚才安装的KWDB地址,点击测试连接可以看到


KWDB 创作者计划 | KWDB容器化部署与性能测试(图8)

KWDB 创作者计划 | KWDB容器化部署与性能测试(图9)


这样我们KDC联接KWDB就大功告成



体验KWDB功能

在KDC中新建数据库performance_test


KWDB 创作者计划 | KWDB容器化部署与性能测试(图10)

然后建表


-- 建表
CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    age INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 创建索引
CREATE INDEX idx_username ON users(username);
CREATE INDEX idx_age ON users(age);
CREATE INDEX idx_created_at ON users(created_at);


 KWDB 创作者计划 | KWDB容器化部署与性能测试(图11)



插入一些数据,用于测试


KWDB 创作者计划 | KWDB容器化部署与性能测试(图12)




KWDB性能测试 

1. 精确查找(测试索引查找)

SELECT * FROM users WHERE username = 'user_50000';


KWDB 创作者计划 | KWDB容器化部署与性能测试(图13)


2. 范围查找(测试范围扫描)

SELECT * FROM users WHERE age BETWEEN 20 AND 30;


KWDB 创作者计划 | KWDB容器化部署与性能测试(图14)


3. 聚合查询(测试 GROUP BY + COUNT)

SELECT age, COUNT(*) FROM users GROUP BY age ORDER BY COUNT(*) DESC LIMIT 10;


KWDB 创作者计划 | KWDB容器化部署与性能测试(图15)

 

4. 排序 + 分页查询

SELECT * FROM users ORDER BY created_at DESC LIMIT 20 OFFSET 1000;


KWDB 创作者计划 | KWDB容器化部署与性能测试(图16)

 

5. 更新操作(批量更新)

UPDATE users SET age = age + 1 WHERE age < 30;


KWDB 创作者计划 | KWDB容器化部署与性能测试(图17)

 这里可以看到批量更新速度比较慢,然后执行 


EXPLAIN analyze UPDATE users SET age = age + 1 WHERE age < 30;


{
 
  "sql": "EXPLAIN ANALYZE (DISTSQL) UPDATE users SET age = age + 1 WHERE age \u003c 30",
 
  "nodeNames": [
 
    "1"
 
  ],
 
  "processors": [
 
    {
 
      "nodeIdx": 0,
 
      "inputs": [],
 
      "core": {
 
        "title": "TableReader/0",
 
        "details": [
 
          "users@idx_age",
 
          "Spans: /!NULL-/30",
 
          "Out: @1",
 
          "rows read: 17620",
 
          "stall time: 40.341ms",
 
          "bytes read: 620 KiB"
 
        ]
 
      },
 
      "outputs": [],
 
      "stage": 1
 
    },
 
    {
 
      "nodeIdx": 0,
 
      "inputs": [],
 
      "core": {
 
        "title": "JoinReader/1",
 
        "details": [
 
          "users@primary",
 
          "Render: @1, @2, @3, @4, @5, @4+1:::INT8",
 
          "rows read: 17620",
 
          "stall time: 43.781ms",
 
          "index rows read: 17620",
 
          "index stall time: 327.187ms"
 
        ]
 
      },
 
      "outputs": [],
 
      "stage": 2
 
    },
 
    {
 
      "nodeIdx": 0,
 
      "inputs": [],
 
      "core": {
 
        "title": "local count 0/2",
 
        "details": []
 
      },
 
      "outputs": [],
 
      "stage": 3
 
    },
 
    {
 
      "nodeIdx": 0,
 
      "inputs": [],
 
      "core": {
 
        "title": "Response",
 
        "details": [
 
          "rows read: 1",
 
          "stall time: 1.586834s"
 
        ]
 
      },
 
      "outputs": [],
 
      "stage": 0
 
    }
 
  ],
 
  "edges": [
 
    {
 
      "sourceProc": 0,
 
      "sourceOutput": 0,
 
      "destProc": 1,
 
      "destInput": 0
 
    },
 
    {
 
      "sourceProc": 1,
 
      "sourceOutput": 0,
 
      "destProc": 2,
 
      "destInput": 0
 
    },
 
    {
 
      "sourceProc": 2,
 
      "sourceOutput": 0,
 
      "destProc": 3,
 
      "destInput": 0
 
    }
 
  ],
 
  "encodePlan": "eJyUkm9r2zAQxt_vU9zu1Ua1xLLTJAgGzqhh2YybJS77a4ZqHcFgW54ks5SQ7z5sbywtTWjf2Nw99-ien9Ae7a8SBUZfVvFimcAiWcRfv0Xw6mq5STef4tdws7papBG0loyFTZSC3BK87b8XwOHz-2gd9dWP1vOCHAIPGdZaUSIrsii-I8eMYWN0TtZq07X2_cBS7VB4DIu6aV3Xzhjm2hCKPbrClYQCU3lb0pqkIjPuDlbkZFH2x_aJwkLtfsotIcNNI2srYPwyuYnjN-M-x3XrBIQcGRr924IhqQTw2dTvROtkWYIrKhIw8UbBhFcWGd7eOfo3OvU9-Fi8w-zAULfuf07ruqWCH9jTWT7oov6Lwh9DaUxRSXOHDNdUKzJdcgahzyAMGIQTBuFl97_gQohlks6fgBWMZvMBq6gV7eCR-UE4dgX-bMTns8qe5Pafw13qXJaQ67Z24I39e-inFgTPWbAm2-ja0v1LPUZ9cC18dDmfzoPJaUDvkDEktaXhuVrdmpxWRud9mKG87n19Q5F1g8qHYlkPUodxbOZnzf55s3_WHDwwZ4cXfwIAAP__2oQ2mQ=="
 
}


使用了 users@idx_age 这个索引,可以看到索引是命中了

1、慢的根源在于更新量太大 + 每行都要做一次回表 + 写入

2、并非 SQL 本身逻辑复杂,而是更新代价大


所以 1.6 秒其实是“正常”的,尤其是在大批量写入的场景下。在业务场景下,就不应该一次性批量更新,需要改为限速分批更新


6. 删除操作(批量删除)

DELETE FROM users WHERE age > 90;


KWDB 创作者计划 | KWDB容器化部署与性能测试(图18)

 


测试结果


本次测试在约 10 万条数据量下,对 KWDB执行了典型的读写操作,表现出惊人的高效与稳定性:

测试数据规模

表名:users

数据量:100,000 条

字段:id(主键)、name(字符串)、age(整数)、email(唯一索引)

查询性能表现

查询类型 返回行数响应耗时说明
精确查找1行16ms使用索引,极速返回
范围查找100行17ms范围查询 + 索引命中,响应极快
聚合统计+排序 10行132ms全表聚合 + 排序,依然秒级内完成
分页 + 排序20行27ms支持快速分页,适用于业务场景
更新操作17620行1.69ms批量更新,受写入压力影响,建议分页优化
删除操作1行15ms快速定位并删除,毫秒级完成



总结一句话:KWDB确实挺不错的


KWDB 在本次实测中展现了以下几个优势:


 1、索引优化极致:无论是点查还是范围查,响应时间均在毫秒级

2、吞吐能力强:10 万条数据照样秒查,轻松应对大表压力

3、复杂查询不慌:聚合、排序、分页都能快速处理

4、更新写入可控:批量更新虽慢,但通过分页策略可优化


结尾:对第一次上手KWDB的感受

第一次尝试 KWDB,部署+体验一次性通过,轻松上手。可以说是一个“不会让人折腾太久”的国产数据库了,而且数据库性能极强。后续继续研究它的时序数据能力,咱们下次再聊!




体验全新的分布式多模数据库解决方案

企业版 社区版

KaiwuDB 是浪潮控股的数据库企业,面向工业物联网、数字能源、车联网、智慧产业等行业领域,提供稳定安全、高性能、易运维的创新数据软件与服务。

关注官方微信

友情链接:浪潮  

© 上海沄熹科技有限公司 Shanghai Yunxi Technology Co., Ltd.    沪ICP备2023002175号-1    网站服务协议   |   隐私政策
400-624-5688-7
服务与支持
marketing@kaiwudb.org.cn