目录 CentOS Stream 9服务器Docker部署KWDB从零到跨模查询实战全记录 一、环境准备1.1 检查 CentOS 系统版本1.2 检查 Docker 是否已安装1.3 检查端口是否被占用1.4 创建部署目录 二、Docker 部署 KWDB2.1 拉取 KWDB 镜像2.2 创建 docker-compose.yml 文件2.4 验证容器运行状态 三、连接 KWDB 验证3.1 进入容器3.2 使用 kwbase CLI 连接数据库3.3 查看数据库版本 四、核心实战双模建表与跨模查询4.1 创建关系数据库和关系表存储电表档案信息4.2 创建时序数据库和时序表存储电表读数4.3 跨模查询实战核心亮点4.4 进阶聚合查询 五、踩坑与解决记录❌ 坑1启动容器时报错 bash: docker-compose: command not found❌ 坑2跨模查询时提示 relation db1.accounts does not exist❌ 坑3时序表插入数据时报错 ERROR: unsupported input type BinaryOperator❌ 坑4在 KWDB 时序表中**标签列不支持 STRING 类型** 六、总结与心得6.1 部署体验6.2 KWDB 核心能力验证6.3 适用场景思考6.4 后续计划 七、参考资料 CentOS Stream 9服务器Docker部署KWDB从零到跨模查询实战全记录最近在研究物联网数据库选型时了解到 KWDB 是一款面向 AIoT 场景的分布式多模数据库支持在同一实例中同时处理时序数据和关系数据并能进行跨模查询 。这个特性非常吸引我。本次实操我选择了CentOS Stream 9 云服务器采用Docker 方式部署KWDB并基于智能电表场景完整实践了“时序表关系表”的创建与跨模查询。本文将记录从环境准备、部署踩坑到实战应用的全过程。环境信息操作系统CentOS Stream 9 (x86_64)Docker 版本29.0KWDB 版本3.1.0 官方最新版服务器配置16核32G 一、环境准备1.1 检查 CentOS 系统版本cat/etc/centos-release1.2 检查 Docker 是否已安装docker--versiondockercompose version1.3 检查端口是否被占用KWDB 默认使用8080Web界面和26257数据库服务端口。netstat-tlnp|grep8080netstat-tlnp|grep26257如有占用需要先停止相应进程或修改端口映射。1.4 创建部署目录mkdir-p ~/kwdb-dockercd~/kwdb-docker 二、Docker 部署 KWDB官方提供了两种 Docker 部署方式我选择了更清晰的 docker-compose 方式2.1 拉取 KWDB 镜像dockerpull registry.cn-hangzhou.aliyuncs.com/kwdb/kwdb:latest2.2 创建 docker-compose.yml 文件vimdocker-compose.yml写入以下内容 services:kaiwudb-container:image:registry.cn-hangzhou.aliyuncs.com/kwdb/kwdb:latest# 直接使用阿里云镜像container_name:kaiwudb-experiencehostname:kaiwudb-experienceports:-8080:8080-26257:26257ulimits:memlock:-1volumes:-/dev:/devrestart:on-failureipc:shareableprivileged:trueenvironment:-LD_LIBRARY_PATH/kaiwudb/libtty:trueworking_dir:/kaiwudb/bincommand:-/bin/bash--c-|./kwbase start-single-node --insecure --listen-addr0.0.0.0:26257 --advertise-addr222.*.*.130:26257 --http-addr0.0.0.0:8080 --store/kaiwudb/deploy/kaiwudb2.3 启动容器dockercompose up -d2.4 验证容器运行状态dockerps 三、连接 KWDB 验证3.1 进入容器dockerexec-it kaiwudb-experience /bin/bash3.2 使用 kwbase CLI 连接数据库./kwbase sql --insecure --hostlocalhost3.3 查看数据库版本SELECTVERSION(); 四、核心实战双模建表与跨模查询参考官方文档和社区实践我模拟一个智能电表场景4.1 创建关系数据库和关系表存储电表档案信息-- 创建关系数据库CREATEDATABASEdb1;-- 切换到关系数据库SETDATABASEdb1;-- 创建关系表存储电表基础信息CREATETABLEaccounts(meter_id STRINGPRIMARYKEY,location STRING,customer_name STRING,install_dateDATE);-- 插入测试数据INSERTINTOaccountsVALUES(M1001,北京市朝阳区,王先生,2024-01-15),(M1002,上海市浦东新区,李女士,2024-02-20),(M1003,深圳市南山区,张先生,2024-03-10);-- 查询验证SELECT*FROMaccounts;4.2 创建时序数据库和时序表存储电表读数-- 创建时序数据库CREATETSDATABASEts_db;-- 切换到时序数据库SETDATABASEts_db;-- 创建时序表存储实时读数-- 注意时序表需要指定时间戳列和标签列CREATETABLEreadings(tsTIMESTAMPNOTNULL,voltageFLOAT,currentFLOAT,powerFLOAT)TAGS(meter_idVARCHAR(64)NOTNULL-- 改为 VARCHAR指定长度)PRIMARYTAGS(meter_id);-- 插入模拟时序数据INSERTINTOreadingsVALUES(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 跨模查询实战核心亮点场景需求查看每个用户的实时用电情况并显示用户姓名和所在区域-- 跨库跨模查询关联关系库的 accounts 表和时序库的 readings 表SELECTa.customer_name,a.location,r.ts,r.voltage,r.powerFROMts_db.readings rJOINdb1.accounts aONr.meter_ida.meter_idWHEREr.tsnow()-interval5 minutesORDERBYr.ts;结果分析可以看到时序表的实时读数成功关联上了关系表的用户信息一条SQL搞定原本需要两套数据库代码联动的复杂操作这就是 KWDB 多模融合的价值所在4.4 进阶聚合查询-- 统计每个用户最近1小时的总用电量SELECTa.customer_name,SUM(r.power)astotal_powerFROMts_db.readings rJOINdb1.accounts aONr.meter_ida.meter_idWHEREr.tsnow()-interval1 hourGROUPBYa.customer_name; 五、踩坑与解决记录这里一定要写你实际遇到的问题评委最爱看真实踩坑❌ 坑1启动容器时报错 “bash: docker-compose: command not found”现象执行docker-compose up -d提示bash: docker-compose: command not found原因版本问题应该使用docker compose up -d解决dockercompose 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()函数但不支持这种加法运算 。解决使用INSERTINTOreadingsVALUES(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几何类型解决: 将 STRING 改为 VARCHARCREATETABLEreadings(tsTIMESTAMPNOTNULL,voltageFLOAT,currentFLOAT,powerFLOAT)TAGS(meter_idVARCHAR(64)NOTNULL-- 改为 VARCHAR指定长度)PRIMARYTAGS(meter_id); 六、总结与心得6.1 部署体验Docker 方式便捷度☆☆☆☆☆15分钟搞定比裸机安装省事太多官方文档友好度☆☆☆☆资料齐全但部分散落在不同平台6.2 KWDB 核心能力验证本次实操成功验证了 KWDB 的两大核心能力多模数据统一管理同一个实例同时存储关系数据和时序数据跨模查询通过 SQL 直接关联分析两类数据无需中间件拼装6.3 适用场景思考结合官方介绍我认为 KWDB 特别适合以下场景 工业物联网设备档案关系 实时监控数据时序能源电力电表档案 读数记录车联网车辆信息 轨迹数据6.4 后续计划下一步打算申请试用KATKWDB 智能体工具或尝试Smart Meter Web 可视化项目做更深入的应用探索。 七、参考资料KWDB 官方文档https://www.kaiwudb.com/docsKWDB Gitee 仓库https://gitee.com/kwdb/kwdb跨模查询参考基于 Smart Meter Web深入实践 KWDB 跨模查询Docker 部署参考在 CentOS 云服务中通过 Docker 安装 KWDB