写点什么

技术贴 | 如何基于 KWDB 快速实现工业物联网智能电表系统设计?

作者:KaiwuDB
  • 2025-05-15
    北京
  • 本文字数:3589 字

    阅读完需:约 12 分钟

技术贴 | 如何基于 KWDB 快速实现工业物联网智能电表系统设计?

各位社区小伙伴:


好消息!为了帮助大家快速无痛上手 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.gztsdb.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,为大家提供更多的示例场景,欢迎大家关注我们的公众号,第一时间获取最新的技术动态和产品更新。

发布于: 刚刚阅读数: 5
用户头像

KaiwuDB

关注

还未添加个人签名 2021-04-29 加入

KaiwuDB 是浪潮集团控股的数据库企业,公司汇聚了全球顶尖的数据库人才,以多模数据库为核心产品,面向工业物联网、数字能源、交通车联网、智慧产业等各大行业领域,提供领先创新的数据服务软件。

评论

发布
暂无评论
技术贴 | 如何基于 KWDB 快速实现工业物联网智能电表系统设计?_数据库·_KaiwuDB_InfoQ写作社区