各位社区小伙伴:
好消息!为了帮助大家快速无痛上手 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/kaiwudbmkdir externtar xvf rdb.tar.gztar 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/bashnum=$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_energyFROM tsdb.meter_data mdJOIN rdb.meter_info mi ON md.meter_id = mi.meter_idJOIN rdb.area_info a ON mi.area_id = a.area_idGROUP BY a.area_nameORDER BY total_energy DESCLIMIT 10;"
复制代码
场景 2: 时序+用户信息查询 - 故障电表关联分析
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "SELECT mi.meter_id, u.user_name, u.contact, a.area_nameFROM rdb.meter_info miJOIN rdb.user_info u ON mi.user_id = u.user_idJOIN rdb.area_info a ON mi.area_id = a.area_idWHERE 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.powerFROM tsdb.meter_data mdJOIN rdb.alarm_rules ar ON 1=1WHERE (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 DESCLIMIT 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_pointsFROM rdb.meter_info miJOIN rdb.user_info u ON mi.user_id = u.user_idJOIN rdb.area_info a ON mi.area_id = a.area_idWHERE 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_powerFROM tsdb.meter_data mdJOIN rdb.meter_info mi ON md.meter_id = mi.meter_idJOIN rdb.area_info a ON mi.area_id = a.area_idGROUP BY a.region, a.area_name;"
复制代码
场景 6: 查询指定电表最近 24 小时用电趋势
kwbase sql --certs-dir=/etc/kaiwudb/certs -e "SELECT md.ts, md.power, md.energyFROM tsdb.meter_data mdWHERE 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,为大家提供更多的示例场景,欢迎大家关注我们的公众号,第一时间获取最新的技术动态和产品更新。
评论