作者: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,部署+體驗一次性通過,輕鬆上手。可以説是一個“不會讓人折騰太久”的國產數據庫了,而且數據庫性能極強。後續繼續研究它的時序數據能力,咱們下次再聊!