CentOS Stream 9服务器Docker部署KWDB:从零到跨模查询实战全记录
目录 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

相关新闻

Exploring Multimodal LMMs for Online Episodic Memory Question Answering on the Edge

Exploring Multimodal LMMs for Online Episodic Memory Question Answering on the Edge

Exploring Multimodal LMMs for Online Episodic Memory Question Answering on the Edge Authors: Giuseppe Lando, Rosario Forte, Antonino Furnari Deep-Dive Summary: 探索用于边缘端在线情景记忆问答的多模态大语言模型 作者: Giuseppe Lando, Rosario Fo…

2026/5/17 7:01:43 阅读更多 →
导处结果的“Knit”按钮

导处结果的“Knit”按钮

下面的内容摘录自《用R探索医药数据科学》专栏文章的部分内容(原文6872字)。 2章8节:一文学会 R Markdown 的文档核心操作,切记文末有R资源的分享_r markdown文件(.rmd)-CSDN博客 一、创建 R Markdown 二、 R Markdown 如何写 …

2026/7/5 7:36:18 阅读更多 →
【信息科学与工程学】【解决方案体系】第十五篇 家庭经营解决方案

【信息科学与工程学】【解决方案体系】第十五篇 家庭经营解决方案

家庭经营解决方案构建一个覆盖家庭与社会全链条的“精细化策略库”是一项宏大且极具系统性的工程。这本质上是在创建一个家庭复杂系统决策与运作的“元模型”。第一部分:策略库构建框架(元规则)编号体系 (HM-ABCDEF):HM&#xff1…

2026/7/6 12:38:53 阅读更多 →

最新新闻

如何用Kotlin Multiplatform实现Android与iOS应用代码共享:Fruitties实战指南

如何用Kotlin Multiplatform实现Android与iOS应用代码共享:Fruitties实战指南

如何用Kotlin Multiplatform实现Android与iOS应用代码共享:Fruitties实战指南 【免费下载链接】kotlin-multiplatform-samples Samples showcasing the Kotlin Multiplatform Jetpack libraries 项目地址: https://gitcode.com/GitHub_Trending/ko/kotlin-multipl…

2026/7/6 19:12:49 阅读更多 →
EasyContext内存优化秘籍:DeepSpeed Zero3卸载策略详解

EasyContext内存优化秘籍:DeepSpeed Zero3卸载策略详解

EasyContext内存优化秘籍:DeepSpeed Zero3卸载策略详解 【免费下载链接】EasyContext Memory optimization and training recipes to extrapolate language models context length to 1 million tokens, with minimal hardware. 项目地址: https://gitcode.com/gh…

2026/7/6 19:12:49 阅读更多 →
UE4SS:解锁虚幻引擎游戏无限可能的终极修改工具指南

UE4SS:解锁虚幻引擎游戏无限可能的终极修改工具指南

UE4SS:解锁虚幻引擎游戏无限可能的终极修改工具指南 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS …

2026/7/6 19:08:46 阅读更多 →
如何安装和配置EnergyBar:10分钟快速上手教程

如何安装和配置EnergyBar:10分钟快速上手教程

如何安装和配置EnergyBar:10分钟快速上手教程 【免费下载链接】EnergyBar Supercharge your Macs Touch Bar. 项目地址: https://gitcode.com/gh_mirrors/en/EnergyBar 想要快速上手EnergyBar,让你的Mac Touch Bar变得更强大吗?Energy…

2026/7/6 19:08:46 阅读更多 →
如何快速入门Encog:5个简单步骤构建你的第一个神经网络

如何快速入门Encog:5个简单步骤构建你的第一个神经网络

如何快速入门Encog:5个简单步骤构建你的第一个神经网络 【免费下载链接】encog-java-core 项目地址: https://gitcode.com/gh_mirrors/en/encog-java-core Encog是一个强大的Java机器学习框架,专为构建和训练神经网络而设计。无论你是机器学习新…

2026/7/6 19:08:46 阅读更多 →
Linkora开发指南:如何为这款KMP应用贡献代码和新功能

Linkora开发指南:如何为这款KMP应用贡献代码和新功能

Linkora开发指南:如何为这款KMP应用贡献代码和新功能 【免费下载链接】Linkora Local-first multiplatform link organizer with optional self-hosted sync. 项目地址: https://gitcode.com/gh_mirrors/li/Linkora Linkora是一款基于Kotlin Multiplatform&a…

2026/7/6 19:06:45 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻