跳到主要内容
CentOS Stream 9 Docker 部署 KaiwuDB 社区版与跨模查询实战 | 极客日志
SQL AI
CentOS Stream 9 Docker 部署 KaiwuDB 社区版与跨模查询实战 综述由AI生成 CentOS Stream 9 环境下通过 Docker 部署 KaiwuDB 社区版,实现关系型与时序数据的统一管理。演示了 docker-compose 配置、容器启动验证及 kwbase CLI 连接方法。核心实践涵盖双模建表、跨库 JOIN 查询及聚合统计,解决二元运算符报错、标签类型限制等常见问题。验证了多模融合在物联网电表场景下的价值,提供从环境检查到故障排查的完整操作指南。
beaabea 发布于 2026/3/16 更新于 2026/4/26 5 浏览CentOS Stream 9 服务器 Docker 部署 KaiwuDB 社区版:从零到跨模查询实战全记录
最近在研究物联网数据库选型时,了解到 KWDB 是一款面向 AIoT 场景的分布式多模数据库 ,支持在同一实例中同时处理时序数据 和关系数据 ,并能进行跨模查询。这个特性非常吸引我。
本次实操我选择了 CentOS Stream 9 云服务器 ,采用 Docker 方式部署 KWDB,并基于智能电表场景,完整实践了'时序表 + 关系表'的创建与跨模查询。本文将记录从环境准备、部署踩坑到实战应用的全过程。
环境信息:
操作系统:CentOS Stream 9 (x86_64)
Docker 版本:29.0+
KWDB 版本:3.1.0(官方最新版)
服务器配置:16 核 32G
🛠 一、环境准备
1.1 检查 CentOS 系统版本
cat /etc/centos-release
1.2 检查 Docker 是否已安装
docker --version
docker compose version
1.3 检查端口是否被占用
KWDB 默认使用 8080(Web 界面)和 26257(数据库服务端口)。
netstat -tlnp | grep 8080
netstat -tlnp | grep 26257
如有占用,需要先停止相应进程或修改端口映射。
1.4 创建部署目录
mkdir -p ~/kwdb-docker && cd ~/kwdb-docker
🚀 二、Docker 部署 KWDB
(官方提供了两种 Docker 部署方式,我选择了更清晰的 docker-compose 方式)
2.1 拉取 KWDB 镜像
docker pull registry.cn-hangzhou.aliyuncs.com/kwdb/kwdb:latest
2.2 创建 docker-compose.yml 文件 services:
kaiwudb-container:
image: "registry.cn-hangzhou.aliyuncs.com/kwdb/kwdb:latest"
container_name: kaiwudb-experience
hostname: kaiwudb-experience
ports:
- 8080 :8080
- 26257 :26257
ulimits:
memlock: -1
volumes:
- /dev:/dev
restart: on-failure
ipc: shareable
privileged: true
environment:
- LD_LIBRARY_PATH=/kaiwudb/lib
- tty=true
working_dir: /kaiwudb/bin
command:
- /bin/bash
- -c
- |
./kwbase start-single-node --insecure --listen-addr=0.0.0.0:26257 --advertise-addr=222.*.*.130:26257 --http-addr=0.0.0.0:8080 --store=/kaiwudb/deploy/kaiwudb
2.3 启动容器
2.4 验证容器运行状态
🔌 三、连接 KWDB 验证
3.1 进入容器 docker exec -it kaiwudb-experience /bin/bash
3.2 使用 kwbase CLI 连接数据库 ./kwbase sql --insecure --host=localhost
3.3 查看数据库版本
🔥 四、核心实战:双模建表与跨模查询 (参考官方文档和社区实践,我模拟一个智能电表场景 )
4.1 创建关系数据库和关系表(存储电表档案信息)
CREATE DATABASE db1;
SET DATABASE = db1;
CREATE TABLE accounts (
meter_id STRING PRIMARY KEY ,
location STRING,
customer_name STRING,
install_date DATE
);
INSERT INTO accounts VALUES
('M1001' ,'北京市朝阳区' ,'王先生' ,'2024-01-15' ),
('M1002' ,'上海市浦东新区' ,'李女士' ,'2024-02-20' ),
('M1003' ,'深圳市南山区' ,'张先生' ,'2024-03-10' );
SELECT * FROM accounts;
4.2 创建时序数据库和时序表(存储电表读数)
CREATE TS DATABASE ts_db;
SET DATABASE = ts_db;
CREATE TABLE readings (
ts TIMESTAMP NOT NULL ,
voltage FLOAT ,
current FLOAT ,
power FLOAT
) TAGS (
meter_id VARCHAR (64 ) NOT NULL
) PRIMARY TAGS (meter_id);
INSERT INTO readings VALUES
('2026-02-27 14:30:00' ,220.5 ,5.2 ,1146.6 ,'M1001' ),
('2026-02-27 14:31:00' ,221.3 ,6.1 ,1350.9 ,'M1001' ),
('2026-02-27 14:30:00' ,219.8 ,4.8 ,1055.0 ,'M1002' ),
('2026-02-27 14:31:00' ,220.1 ,7.2 ,1584.7 ,'M1002' ),
('2026-02-27 14:30:00' ,221.0 ,3.9 ,861.9 ,'M1003' );
4.3 跨模查询实战(核心亮点) 场景需求 :查看"每个用户的实时用电情况,并显示用户姓名和所在区域"
SELECT a.customer_name, a.location, r.ts, r.voltage, r.power
FROM ts_db.readings r
JOIN db1.accounts a ON r.meter_id = a.meter_id
WHERE r.ts >= now() - interval '5 minutes'
ORDER BY r.ts;
结果分析 :可以看到,时序表的实时读数成功关联上了关系表的用户信息,一条 SQL 搞定原本需要两套数据库 + 代码联动的复杂操作 ,这就是 KWDB 多模融合的价值所在!
4.4 进阶聚合查询
SELECT a.customer_name, SUM (r.power) as total_power
FROM ts_db.readings r
JOIN db1.accounts a ON r.meter_id = a.meter_id
WHERE r.ts >= now() - interval '1 hour'
GROUP BY a.customer_name;
🕳 五、踩坑与解决记录
❌ 坑 1:启动容器时报错 'bash: docker-compose: command not found'
现象 :执行 docker-compose up -d 提示 bash: docker-compose: command not found
原因 :版本问题,应该使用 docker compose up -d
❌ 坑 2:跨模查询时提示 'relation 'db1.accounts' does not exist'
现象 :执行 JOIN 查询时报错表不存在
原因 :没有指定数据库名称,KWDB 默认在当前数据库找表
解决 :使用 数据库名。表名 的完整写法,如 db1.accounts
❌ 坑 3:时序表插入数据时报错 'ERROR: unsupported input type BinaryOperator'
现象 :ERROR: unsupported input type BinaryOperator
原因 :在 KWDB 中,不支持 now() + interval '1 minute' 这种二元运算符 写法。根据官方文档,时间戳可以使用 NOW() 函数,但不支持这种加法运算。
解决 :使用硬编码时间戳
INSERT INTO readings VALUES
('2026-02-27 14:30:00' ,220.5 ,5.2 ,1146.6 ,'M1001' ),
('2026-02-27 14:31:00' ,221.3 ,6.1 ,1350.9 ,'M1001' ),
('2026-02-27 14:30:00' ,219.8 ,4.8 ,1055.0 ,'M1002' ),
('2026-02-27 14:31:00' ,220.1 ,7.2 ,1584.7 ,'M1002' ),
('2026-02-27 14:30:00' ,221.0 ,3.9 ,861.9 ,'M1003' );
❌ 坑 4:在 KWDB 时序表中,标签列不支持 STRING 类型 原因 :在 KWDB 时序表中,标签列不支持 STRING 类型 。根据官方文档,时序表的标签列不支持 以下数据类型:
TIMESTAMP / TIMESTAMPTZ(时间类型)
NVARCHAR (可变长度字符)
GEOMETRY(几何类型)
CREATE TABLE readings (
ts TIMESTAMP NOT NULL ,
voltage FLOAT ,
current FLOAT ,
power FLOAT
) TAGS (
meter_id VARCHAR (64 ) NOT NULL
) PRIMARY TAGS (meter_id);
📝 六、总结与心得
6.1 部署体验
Docker 方式便捷度 :☆☆☆☆☆(15 分钟搞定,比裸机安装省事太多)
官方文档友好度 :☆☆☆☆(资料齐全,但部分散落在不同平台)
6.2 KWDB 核心能力验证
多模数据统一管理 :同一个实例同时存储关系数据和时序数据
跨模查询 :通过 SQL 直接关联分析两类数据,无需中间件拼装
6.3 适用场景思考 结合官方介绍,我认为 KWDB 特别适合以下场景:
工业物联网 :设备档案(关系)+ 实时监控数据(时序)
能源电力 :电表档案 + 读数记录
车联网 :车辆信息 + 轨迹数据
6.4 后续计划 下一步打算申请试用 KAT(KWDB 智能体工具) 或尝试 Smart Meter Web 可视化项目 ,做更深入的应用探索。
📎 七、参考资料 相关免费在线工具 RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
SQL 美化和格式化 在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
SQL转CSV/JSON/XML 解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 工具包 CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online