各位社区小伙伴:
好消息!为了帮助大家快速无痛上手 KWDB ,KWDB 研发团队基于已有场景精心打造了一个示例项目 SampleDB ,内附场景与样例数据,零门槛体验多模数据库 KWDB。
仓库地址:https://gitee.com/kwdb/sampledb
本期博客,我们就用这个 SampleDB, 带大家一起体验 KWDB 在工业物联网智能电表业务场景中的使用。
1. 项目背景
随着向工业物联网的发展,智能电表的应用日益普及,比如实时监控、数据分析、实时异常检测与预测、设备健康度评估、电价优化分析、多维度数据聚合行业标准协议集成(如 DLMS/COSEM )、边缘计算协同等。
其中,在告警检测中,不仅检测当前故障,还可以预测设备故障概率;用电量统计中加入峰谷时段的分析,帮助用户优化用电成本;实时流数据处理能力,或者与边缘计算设备的协同工作,减少数据传输延迟。
在工业物联网智能电表场景中,电表数据通常包含时序数据(电压/电流实时监测)、关系型数据(用户档案)、用户数据等多模型数据。 KWDB 通过统一查询引擎和原生多模型存储实现高效跨模型查询。
SampleDB 中的 示例一:智能电表模型 就是模拟了这一典型场景,借助这一典型场景帮助大家快速了解 KWDB 的使用。
2. 表结构设计
众所周知,KWDB 是一款 开源多模数据库,支持关系型数据库和时序数据库两种模型。在这个示例中,我们将同时使用这两种类型来存储和查询智能电表的相关数据。
关系库
关系库电表基础信息表 meter_info
核心作用: 构建电表设备全生命周期档案
存储电表的基本属性:电表 ID、安装日期、电压等级、制造商、状态、所属区域和用户 ID
CREATE TABLE rdb.meter_info (
meter_id VARCHAR(50) PRIMARY KEY,
install_date DATE,
voltage_level VARCHAR(20),
manufacturer VARCHAR(50),
status VARCHAR(20),
area_id VARCHAR(20),
user_id VARCHAR(50)
);
关系表用户信息表 user_info
核心作用: 建立用户画像与用电行为关联
用户的基本资料,用户 ID 为主键,还有姓名、地址和联系方式。这个表用于管理用户数据,关联到电表的使用者
CREATE TABLE rdb.user_info (
user_id VARCHAR(50) PRIMARY KEY,
user_name VARCHAR(100),
address VARCHAR(200),
contact VARCHAR(20)
);
关系表区域信息表 area_info
核心作用: 支撑电网拓扑管理与区域化运营
存储区域的信息,区域 ID、名称、负责人和所属地区。主键是 area_id,用于划分不同地理或管理区域,方便后续的区域用电统计和分析。
CREATE TABLE rdb.area_info (
area_id VARCHAR(20) PRIMARY KEY,
area_name VARCHAR(100),
manager VARCHAR(50),
region VARCHAR(50)
);
关系表告警规则表 alarm_rules
核心作用: 实现动态可配置的智能告警引擎
存储报警规则,包括规则ID、名称、指标、操作符、阈值、严重程度和通知方式。自增的 rule_id 作为主键,方便管理和扩展报警规则。
CREATE TABLE rdb.alarm_rules(
rule_id SERIAL PRIMARY KEY,
rule_name VARCHAR(100),
metric VARCHAR(50),
operator VARCHAR(10),
threshold FLOAT8,
severity VARCHAR(20),
notify_method VARCHAR(50)
);
时序库
时序表实时用电数据表 meter_data
核心作用: 承载高频时序数据流,支持实时分析
时间戳、电压、电流、功率、能量和电表 ID。这里用了 TAGS 来标记 meter_id,用于高效查询和管理时间序列数据
CREATE TABLE tsdb.meter_data (
ts TIMESTAMPTZ(3) NOT NULL,
voltage FLOAT8 NULL,
current FLOAT8 NULL,
power FLOAT8 NULL,
energy FLOAT8 NULL,
meter_id VARCHAR(50)
) TAGS (meter_id VARCHAR(50) NOT NULL)
PRIMARY TAGS(meter_id)
retentions 0s
activetime 1d
partition interval 10d
3. 体验 KWDB
以下示例均采用 KWDB 自带 CLI 工具 kwbase
进行操作,您也可以 kwbase sql --insecure --host=<your-host-ip>
命令进入 KWDB 的交互式 SQL 环境或使用 KWDB 开发者中心连接 KWDB 进行操作。
准备工作
向 KWDB 中导入数据
在数据库数据目录创建 extern
目录,将 rdb.tar.gz
和 tsdb.tar.gz
解压到 extern
目录下。
rdb.tar.gz 和 tsdb.tar.gz 文件存放在 extern 目录下,您可自行下载后解压到 extern 目录下。
cd /data/kaiwudb
mkdir extern
tar xvf rdb.tar.gz
tar xvf tsdb.tar.gz
导入关系库 rdb 数据
kwbase sql --certs-dir=/etc/kaiwudb/certs -e 'import database csv data ("nodelocal://1/rdb");'
导入时序库 tsdb 数据
kwbase sql --certs-dir=/etc/kaiwudb/certs -e 'import database csv data ("nodelocal://1/tsdb");'
数据生成脚本
编写脚本 generate_series.sh
,用于生成时序数据,脚本内容如下:
#!/bin/bash
num=$1
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "INSERT INTO tsdb.meter_data (ts, voltage, current, power, energy, meter_id) SELECT NOW() - (s*10)::int * INTERVAL '1 minute', 220.0 + (s%10)::float, 5.0 + (s%15)::float*0.1, 1000.0 + (s%20)::float*50, 5000.0 + s::float*10, 'M' || ((s%100)+1)::text FROM generate_series(1, $1) AS s;"
执行脚本,输入变量大于 1 的数字例如 100,代表生成100 条数据:
sh generate_series.sh 100
查看场景数据
执行 SQL 查询语句,查看场景数据:
典型场景
典型场景1: 时序+关系型查询 - 区域用电量TOP10
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "
SELECT a.area_name, SUM(md.energy) AS total_energy
FROM tsdb.meter_data md
JOIN rdb.meter_info mi ON md.meter_id = mi.meter_id
JOIN rdb.area_info a ON mi.area_id = a.area_id
GROUP BY a.area_name
ORDER BY total_energy DESC
LIMIT 10;"
场景2: 时序+用户信息查询 - 故障电表关联分析
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "
SELECT mi.meter_id, u.user_name, u.contact, a.area_name
FROM rdb.meter_info mi
JOIN rdb.user_info u ON mi.user_id = u.user_id
JOIN rdb.area_info a ON mi.area_id = a.area_id
WHERE mi.status = 'Fault';"
场景3: 时序+关系库计算 - 告警检测查询分析
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "
SELECT md.meter_id, md.ts, ar.rule_name,
md.voltage, md.current, md.power
FROM tsdb.meter_data md
JOIN rdb.alarm_rules ar ON 1=1
WHERE (ar.metric = 'voltage' AND (
(ar.operator = '>' AND md.voltage < ar.threshold) OR
(ar.operator = '<' AND md.voltage > ar.threshold)))
OR (ar.metric = 'current' AND md.current > ar.threshold)
OR (ar.metric = 'power' AND md.power > ar.threshold)
ORDER BY md.ts DESC
LIMIT 100;"
更多场景
场景4: 电表概要查询
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "SELECT mi.meter_id, mi.voltage_level, mi.status,
u.user_name, a.area_name,
(SELECT COUNT(*) FROM tsdb.meter_data md
WHERE md.meter_id = mi.meter_id) AS data_points
FROM rdb.meter_info mi
JOIN rdb.user_info u ON mi.user_id = u.user_id
JOIN rdb.area_info a ON mi.area_id = a.area_id
WHERE mi.meter_id = 'M1';"
场景5: 区域用电量统计
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "SELECT a.region, a.area_name,
SUM(md.energy) AS total_energy,
AVG(md.power) AS avg_power
FROM tsdb.meter_data md
JOIN rdb.meter_info mi ON md.meter_id = mi.meter_id
JOIN rdb.area_info a ON mi.area_id = a.area_id
GROUP BY a.region, a.area_name;"
场景 6: 查询指定电表最近24小时用电趋势
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "
SELECT md.ts, md.power, md.energy
FROM tsdb.meter_data md
WHERE md.meter_id = 'M1'
AND md.ts > NOW() - INTERVAL '24 hours'
ORDER BY md.ts;"
4. KWDB 优势
- 多模数据高效处理:基于 KWDB 多模数据库,更好地实现了关系库与时序库的数据融合导入,实现以一库管理多模态数据;
- 实时系统预警响应:基于 KWDB 百万级数据秒级写入、亿级数据秒级读取的性能优势,电表系统可实现故障定位在 100ms 内完成,可提升停电恢复效率,降低用户投诉率,更好地维护用户隐私及电网运行安全;
- 应用场景广泛多样:工业物联网(IIoT)智能电表是能源行业数字化转型的核心基础设施之一,通过基于 KWDB 的数据管理方案还可实现包括虚拟电厂运营、用电安全治理、碳足迹追踪等多样化场景。
5. 总结
通过以上示例,我们可以轻松体验 KWDB 在智能电表业务场景中的应用。通过统一查询引擎和原生多模型存储,KWDB 可以高效地支持关系型和时序型数据的查询和分析,为用户提供更全面、准确的数据分析和决策支持。后续我们将持续更新 SampleDB,为大家提供更多的示例场景,欢迎大家关注我们的公众号,第一时间获取最新的技术动态和产品更新。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。