博客 / 詳情

返回

KWDB容器化部署與性能測試

作者:lgbisha

原文鏈接:https://blog.csdn.net/lgbisha/article/details/147165056

什麼是KWDB

KWDB 是由開放原子開源基金會孵化並運營的開源項目,定位為一款面向 AIoT 場景 的 分佈式多模數據庫產品。
它支持在同一實例中同時構建 時序庫 和 關係庫,實現多模數據的融合管理與統一處理。
該系統具備以下核心能力:

  • 高併發數據處理能力:支持千萬級設備接入、百萬級數據秒級寫入、億級數據秒級讀取,滿足大規模物聯網環境下的高效數據處理需求;
  • 強大的時序數據處理能力:專為海量時序數據設計,具備高吞吐、低延遲的寫入與查詢性能;
  • 多模融合架構:統一支持時序數據與結構化數據的存儲與分析,便於構建複雜業務模型;
  • 穩定安全、易於運維:具備高可用架構設計、完善的安全機制以及便捷的運維工具,適用於大規模工業級部署場景。

KWDB 適用於工業互聯網、智慧城市、能源、電力、交通等多種 AIoT 應用場景,是一款具有自主創新能力的國產數據庫解決方案。

面向不同角色的支持能力

對於開發者:

KWDB 提供完善的開發支持,具備如下特性:

  • 標準化的 通用連接接口
  • 高速寫入 與 極速查詢能力
  • SQL 支持,方便上手
  • 支持 數據壓縮策略 與 生命週期管理
  • 靈活的 集羣部署
  • 可無縫集成多種第三方工具(如 BI 工具、數據分析平台)

這些能力幫助開發者快速構建應用,降低學習成本與開發複雜度,大幅提升開發效率。

對於運維人員:

KWDB 同樣為數據庫管理員和運維人員提供了強有力的支撐,包括:

  • 一鍵式的 快速安裝與部署
  • 支持平滑的 升級與遷移操作
  • 提供豐富的 系統監控能力
  • 降低整體 運維與管理成本

開始部署KWDB

這次安裝我們準備使用docker容器進行安裝

docker環境的安裝

  • 進行docker容器的安裝,安裝最新版本的docker
  • 這裏因為docker現在已經無法直接通過網絡安裝,所以我們通過離線安裝的方式安裝docker環境

-從官網下載離線包

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

  • 如圖所示,把離線包傳到服務器上,進行安裝
dpkg -i *.deb
  • 查看安裝的docker版本
root@VM-12-13-ubuntu:/home/docker# docker -v
Docker version 27.1.2, build d01f264
  • 至此docker容器環境安裝完畢

docker-compose安裝

  • docker容器安裝完畢後,開始安裝docker-compose
  • https://github.com/docker/compose/tags離線下載docker-compose的包
  • 因為我是x86-64的環境,所以從中找到docker-compose-linux-x86_64進行下載
  • 下載完畢後上傳到服務器,然後執行 sudo cp -f docker-compose-linux-x86_64 /usr/local/bin/docker-compose
  • 然後授予可執行權限,sudo chmod +x /usr/local/bin/docker-compose
  • 查看docker-compose版本
root@VM-12-13-ubuntu:/# sudo docker-compose -v
Docker Compose version v2.29.2

使用容器快速部署KWDB

  • 首先去鏡像倉庫,查看KWDB鏡像,果然是有的,這樣就可以快速進行KWDB的安裝與啓動

  • 先去拉去鏡像,docker pull kwdb/kwdb,拉取最新的KWDB鏡像

  • 然後創建創建 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:

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

services::定義一個或多個容器服務,這裏只有一個服務叫做 kaiwudb-container。

容器配置

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

image:使用的鏡像,來自於 kwdb/kwdb:latest。

container_name:指定容器名為 kaiwudb-experience。

hostname:容器的主機名,也叫 kaiwudb-experience,有助於容器內部網絡識別。

端口映射

ports:
  - 8080:8080
  - 26257:26257

將宿主機的端口 8080 和 26257 映射到容器內部的相同端口:

  • 8080 是 KaiwuDB 的 Web 管理界面(http 訪問)
  • 26257 是數據庫服務監聽端口

系統相關設置

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

ulimits.memlock: -1:禁用內存鎖限制,適用於數據庫避免 swap。

volumes: /dev:/dev:掛載宿主機的 /dev 到容器內

ipc: shareable:允許其他容器與它共享 IPC 命名空間。

privileged: true:給予容器幾乎與宿主機等同的權限

其他設置

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

networks: default:使用默認網絡。

restart: on-failure:如果容器因錯誤退出,會自動重啓。

tty: true:分配一個偽終端,便於交互和日誌記錄。

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

LD_LIBRARY_PATH=/kaiwudb/lib:供 KaiwuDB 啓動時查找依賴庫。

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

含義如下:

start-single-node:以單節點模式啓動數據庫。

  • insecure:以非加密模式運行,適合本地體驗
  • listen-addr=0.0.0.0:26257:監聽所有網卡上的 26257 端口。
  • advertise-addr=127.0.0.1:26257:對外廣播的地址為 127.0.0.1(主要用於集羣內部通信)。
  • http-addr=0.0.0.0:8080:Web UI 監聽端口。
  • 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

什麼是KDC,KaiwuDB Developer Center(KaiwuDB 開發者中心),是KaiwuDB官方的可視化連接管理工具
首先需要下載KDC,可以在官方gitee倉庫中找到下載地址,https://gitee.com/kwdb/kwdb/releases

下載完畢後解壓

雙擊打開可視化工具,配置新連接

配上剛才安裝的KWDB地址,點擊測試連接可以看到

這樣我們KDC聯接KWDB就大功告成

體驗KWDB功能

在KDC中新建數據庫performance_test,

然後建表

-- 建表
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性能測試

1. 精確查找(測試索引查找)

SELECT * FROM users WHERE username = 'user_50000';

2. 範圍查找(測試範圍掃描)

SELECT * FROM users WHERE age BETWEEN 20 AND 30;

3. 聚合查詢(測試 GROUP BY + COUNT)

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

4. 排序 + 分頁查詢

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

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

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

這裏可以看到批量更新速度比較慢,然後執行

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 這個索引,可以看到索引是命中了

  • 慢的根源在於更新量太大 + 每行都要做一次回表 + 寫入
  • 並非 SQL 本身邏輯複雜,而是更新代價大

所以 1.6 秒其實是“正常”的,尤其是在大批量寫入的場景下。在業務場景下,就不應該一次性批量更新,需要改為限速分批更新

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

DELETE FROM users WHERE age > 90;

本次測試在約 10 萬條數據量下,對 KWDB執行了典型的讀寫操作,表現出驚人的高效與穩定性:

測試數據規模

  • 表名:users
  • 數據量:100,000 條
  • 字段:id(主鍵)、name(字符串)、age(整數)、email(唯一索引)

查詢性能表現

總結一句話:KWDB確實挺不錯的

KWDB 在本次實測中展現了以下幾個優勢:

  • ✅ 索引優化極致:無論是點查還是範圍查,響應時間均在毫秒級
  • ✅ 吞吐能力強:10 萬條數據照樣秒查,輕鬆應對大表壓力
  • ✅ 複雜查詢不慌:聚合、排序、分頁都能快速處理
  • ✅ 更新寫入可控:批量更新雖慢,但通過分頁策略可優化

結尾:對第一次上手KWDB的感受

第一次嘗試 KWDB,部署+體驗一次性通過,輕鬆上手。可以説是一個“不會讓人折騰太久”的國產數據庫了,而且數據庫性能極強。後續繼續研究它的時序數據能力,咱們下次再聊!

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.