最近在研究物联网数据库选型时,了解到 KaiwuDB 是一款面向 AIoT 场景的分布式多模数据库,支持在同一实例中同时处理时序数据和关系数据,并能进行跨模查询。这个特性非常吸引我。
本次实操我选择了 CentOS Stream 9 云服务器,采用 Docker 方式部署 KaiwuDB,并基于智能电表场景,完整实践了时序表与关系表的创建以及跨模查询。本文将记录从环境准备、部署踩坑到实战应用的全过程。
环境信息如下。操作系统为 CentOS Stream 9 x86_64 架构,Docker 版本 29.0 以上,KaiwuDB 版本为 3.1.0 官方最新版,服务器配置为 16 核 32G 内存。
一、环境准备
首先检查 CentOS 系统版本。
bash
cat /etc/centos-release
然后检查 Docker 是否已安装。
bash
docker --version
docker compose version
检查端口是否被占用。KaiwuDB 默认使用 8080 端口提供 Web 界面,26257 端口提供数据库服务。
bash
netstat -tlnp | grep 8080
netstat -tlnp | grep 26257
如果有端口被占用,需要先停止相应进程或修改端口映射。
创建部署目录。
bash
mkdir -p ~/kwdb-docker && cd ~/kwdb-docker
二、Docker 部署 KaiwuDB
官方提供了两种 Docker 部署方式,我选择了更清晰的 docker compose 方式。
首先拉取 KaiwuDB 镜像。
bash
docker pull registry.cn-hangzhou.aliyuncs.com/kwdb/kwdb:latest
然后创建 docker-compose.yml 文件。
bash
vim 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
启动容器。
bash
docker compose up -d
验证容器运行状态。
bash
docker ps
三、连接 KaiwuDB 验证
进入容器。
bash
bash
docker exec -it kaiwudb-experience /bin/bash
使用 kwbase CLI 连接数据库。
bash
./kwbase sql --insecure --host=localhost
查看数据库版本。
sql
SELECT VERSION();
四、核心实战:双模建表与跨模查询
参考官方文档和社区实践,我模拟了一个智能电表场景。
4.1 创建关系数据库和关系表
关系表用于存储电表档案信息。
sql
-- 创建关系数据库
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', '北京市朝阳区', '王先生', '2026-01-15'),
('M1002', '上海市浦东新区', '李女士', '2026-02-20'),
('M1003', '深圳市南山区', '张先生', '2026-03-10');
-- 查询验证
SELECT * FROM accounts;
4.2 创建时序数据库和时序表
时序表用于存储电表读数。
sql
-- 创建时序数据库
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 跨模查询实战
跨模查询是多模数据库的核心亮点。场景需求是查看每个用户的实时用电情况,并显示用户姓名和所在区域。
sql
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 完成了原本需要两套数据库加代码联动才能实现的复杂操作,这就是多模融合的核心价值。
4.4 进阶聚合查询
统计每个用户最近一小时的总用电量。
sql
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;
五、踩坑与解决记录
以下是实际部署过程中遇到的几个典型问题。
坑一:启动容器时报错 bash: docker-compose: command not found
原因是新版 Docker 已不再默认包含独立的 docker-compose 命令,应使用 docker compose 子命令。解决方法是将 docker-compose up -d 改为 docker compose up -d。
坑二:跨模查询时报错 relation db1.accounts does not exist
原因是 KWDB 默认在当前数据库查找表,如果没有指定数据库名称,就会报表不存在。解决方法是使用数据库名.表名的完整写法,如 db1.accounts。
坑三:时序表插入数据时报错 unsupported input type BinaryOperator
原因是 KWDB 不支持 now() + interval 这种二元运算符写法。时间戳可以使用 NOW() 函数,但不支持加法运算。解决方法是直接使用具体的时间字符串进行插入。
坑四:时序表中标签列不支持 STRING 类型
根据官方文档,时序表的标签列不支持 TIMESTAMP、NVARCHAR、GEOMETRY 等数据类型。解决方法是将 STRING 改为 VARCHAR 并指定长度。
sql
CREATE TABLE readings (
ts TIMESTAMP NOT NULL,
voltage FLOAT,
current FLOAT,
power FLOAT
) TAGS (
meter_id VARCHAR(64) NOT NULL
) PRIMARY TAGS (
meter_id
);
六、总结与心得
从部署体验来看,Docker 方式的便捷度非常高,十五分钟左右就能完成部署,比裸机安装省事很多。官方文档资料齐全,但部分内容散落在不同平台,查找时需要一些耐心。
本次实操成功验证了 KaiwuDB 的两大核心能力。多模数据统一管理的能力,让同一个实例可以同时存储关系数据和时序数据。跨模查询的能力,通过 SQL 直接关联分析两类数据,无需中间件进行数据拼装。
结合官方介绍,KaiwuDB 特别适合工业物联网、能源电力和车联网等场景。设备档案作为关系数据,实时监控数据作为时序数据,两类数据在同一数据库中统一管理,查询和分析都非常便捷。
后续计划申请试用 KAT 智能体工具,或者尝试 Smart Meter Web 可视化项目,做更深入的应用探索。