摘要:GaussDB(for Influx)是一款基于计算存储分离架构,完全兼容 InfluxDB 生态的云原生时序数据库。
本文分享自华为云社区《云数据库 GaussDB(for Influx) 解密第十一期:让智能电网中时序数据处理更高效》,作者:华为云数据库 GaussDB(for Influx)。
今天在手机上就可以直接交电费、查看剩余电量、电量不足还可以发出告警提醒、以及分析过去的用电情况、预估未来用电情况等等。再也不用去缴费点缴费,也不用人工去每个电表上抄每家的使用情况,这些都基于我们国家的智能电网建设,而以上只是对消费者带来的一些便利。智能电网在电网线路监控、电力调度、配电等方面发挥着越来越重要的作用。
智能电网是由许多部分组成,包括智能变电站,线路输送,智能交互终端,智能电表,智能中央系统等等。每个部分都集成了大量的传感器,这些分布在全网各节点的传感器无时无刻不在收集各类数据。随着中国智能电网建设的不断完善,其测点的规模越来越大,达到数千万级以上,并且单个测点将以分钟级甚至秒级的频率产生数据。将会产生海量的监控数据,而且这些数据大部分属于时序数据。因此在针对智能电网构建集中式数据中心时,如何存储、处理、分析海量的监控数据成为一个难点,具体包括以下面三个方面 :
以智能电网中WAMS 系统为例,每秒需要处理的时序数据记录数可达到一千万,因此需要支撑每秒千万级别的写入。常规的数据处理方式根本无法满足需求。
针对数千万的电表终端,客户在充值后要立即生效,客户产生的电量要实时的计费,并反馈给客户等场景,都需要实时的处理海量数据;针对数千公里的电网线路监控,如果出现异常,要能及时告警等。
电网检测点多,检测信息密集,在如此海量的数据中挖掘出有价值的信息也会遇到很大的挑战。
智能电网中的时序数据一般是指由设备/仪表产生,由传感器进行收集,与某一设备具体相关,在时间上前后存在关联性的一类数据。如上图所示,对于电网中的电表设备,其电压、电流值就是典型的时序数据。
一条时序数据记录一般可定义为三元组: <DevicelD, Timestamp, Value>
在智能电网设备运行中,需要存储的数据包括状态量和模拟量。状态量反应设备的运行状态和告警状态,一般通过事件顺序(Sequence of Event,SOE)记录可满足对数据的检索和分析需求。电流、电压和功率等模拟量会随着设备运行时刻变化,具有明显的时序特性,需要进行时序存储。通过在选定的时间内查询 SOE 记录,可以将状态量和模拟量进行关联分析。智能电网监控系统中,已对断路器、隔离开关,变压器、负荷和联络线等电网设备进行建模,数据模型包括状态量和模拟量,其中模拟量包括电压、电流、有功、无功和频率等,不同的设备类型需要采集和存储的模拟量不同。以智能电表为例子,智能电表是组成智能电网的基础设施,通常安装在用户楼宇,用于收集每户产生的电力负荷数据,智能电表至少每天将这些信息反馈给中央系统。智能电网时间序列数据主要由大量的时间戳/值对组成,且通常一次写入,多次查询,很少修改或删除,但可追加,根据智能电网应用场景,一般访问一段时间内或某一时间点的数据。下面我们可以具体看一下不同的电网设备采集和存储时序数据也大有不同。
智能电网线路设备主要包括母联,母线,变压器,容抗器,联络线,负荷和发电机,这些设备采集和观测的指标也各有不同。
主要指安装在用户楼宇的智能电表收集的电力负荷数据,本质上是时间序列数据。以固定的短暂的时间间隔为单位持续记录,并实时反馈给中央监控系统。其对于客户和电网公司非常重要,因其可被用于许多电网服务,比如跟踪电能消耗和预测电力负荷。除此之外,电能表冻结电量值 - 电能表定时冻结,瞬时冻结,日冻结,整点冻结也是很重要的指标,用于计费用户用电量和管理梯度用电使用情况。一般会对电能表定时冻结,瞬时冻结,日冻结,整点冻结数据存储和查询,方便对年度、季度、月度的电量进行计算查询。
智能电网数据采集及监控系统(SCADA)作为智能电力物联网的一部分,对于时序数据处理有着多种维度查需和数据聚合需求,不仅需要实时监控,需要历史数据分析,例如历史 PDR 反演和事故分析。
因此智能电网行业应用场景对时序数据的访问方式主要有三种:
折线查询 : 获取指定设备一段时间内的相关量测值, 如查询特定用户智能电表在一段连续时间内的有功电能量。即测量对象为正向有功尖能量 (fd.shark.electricity),测量属性user= lvsejiayuan.A.unit2.603,dtype=ammeter,需查询2014.09.01 这一天的正向有功尖电能量。
对于折线查询,对象为监测的设备或关注的指标,特征集可标识为FSet = <(t1,v1), (t2,v2), ......, (tn,vn)>,其中 (t1, t2, t3, ......, tn) 为特定的时间序列,使用基于时间戳的偏移表示;(v1, v2, v3, ......, vn) 为与时间序列相对应的量测值。
断面查询 : 获取特定时间点特定区域内所有设备的相关量测值,如查询特定时间点某地区所有用户智能电表的有功电能量。及测量对象为正向有功尖能量 (fd.shark.electricity),测量属性 dtype=ammeter, 时间戳为 1409529600 (2014.09.01 08:00:00),需查询某地区特定时刻所有智能电表的正向有功尖电能量。
对于断面查询,对象为关注的区域/逻辑对象 (如街道/生活区/电厂),特征集可标识为 FSet = <(d1,v1), (d2,v2), ......, (dn,vn)>,其中 (d1, d2, d3, ......, dn) 为区域/逻辑对象所包含的设备/测点,(v1, v2, v3, ......, vn) 为对应的设备/测点在指定时间戳的值。
设备最新状态查询 : 这种场景类似于断面查询,只是针对最新最近的数据。通常用于检测设备是否正常工作。
最早的时候,智能电网相关应用系统中,一般使用 Oracle,Db2 等关系型数据库处理时序数据。
然而,传统的实体关系模型在应对时序数据时存在如下问题 :
后来,电力系统内的普遍做法转向使用商业时序数据库软件,如 OSIsoft Pi、eDNA 等作为时序数据的存储和读取工具。利用实时数据库进行时序数据处理。
然而实时数据库在应对智能电网大数据时存在如下问题:
随着大数据技术的发展,近年来也有一些基于开源的 HBase,Cassandra 等 NoSQL 数据库处理时序数据的研究和应用。这些分布式 NoSQL 数据库虽然解决了扩展能力,但是其通用的数据组织方式并不完全适合智能电网行业对时序数据存储和查询需求,用户必须根据实际应用场景,进行特殊设计甚至大量数据冗余存储才能较好的利用资源处理请求。
大部分仅提供的单个测点的数据存储接口,无法将设备模型数据与离散测点结合,难以支撑历史潮流分析、故障分析和 WAMS 等智能电网高级应用。除此之外,它们的数据模型单一,对于读取一定时间范围内的数据记录效率较高,但对于定位某个时间点的多条记录,过滤,组合等一系列操作将浪费大量 I/O 资源。
其次,二维数据模型中的每个存储单元由主键和列限定符唯一表示,因而大部分磁盘都浪费在存储重复的主键,存在大量冗余信息,存储效率低。同时,由于智能电网场景对于时序数据处理有着多种维度查需和数据聚合需求,通用KV 数据库往往需要结合 ElasticSearch / Solr 等搜索引擎进行加速或者需要开发巧妙设计 KV 结构才能达到很好的效果,但是这样大幅度提升了开发员人的学习和运维成本。
针对电网场景中时序数据,专业的分布式时序数据库是最好的选择,因为他们具备以下重要的特性 :
灵活多变的数据模型 : 用户根据业务需求,通过标签组合的方式自由定义数据模型,同时也可以根据业务变化和演进进行变更。
高写入吞吐量 : 分布式时序数据库解决大规模集群的横向扩展问题,保证高性能平稳写入的需求。
高效的时序数据查询与分析 : 时序数据库支持多维时间线检索、并具备流式处理、预计算等能力,满足大规模 APM、物联网,工业物联网等业务场景的典型查询需求。
低成本的时序数据存储 : 时序数据库充分利用好时序数据量大、冷热访问特征明显,进行计算、存储资源的解耦,通过低成本存储介质、压缩编码、冷热分离、高效 TTL等技术将数据存储成本降低到极致。
丰富的生态协同 : 时序数据库与数据可视化平台、大数据处理、流式分析系统等对接,与周边生态形成协同来创造业务价值。
下面我们具体看一下智能电网中的数据模型,从而进一步体现为什么时序数据库是智能电网场景中数据处理的最佳选择。
针对现在电力行业各企业业务数据模型多样化,非统一,交互困难等问题,国家电网公司通过分析整合,提出了一个新型的企业公共数据模型(SG-CIM), 形成了统一的信息视图,实现多企业多业务应用系统间的数据交互共享。SG-CIM 和时序数据库模型非常匹配。
在智能电网管理平台中,SG-CIM数据模型中的每个叶子节点称为测量对象,叶子节点标签称为测量属性,它由一个或多个键值对组成,用于进一步刻画补充测量对象的属性信息,根至叶子节点的全路径称为用户属性,作为一个特殊属性处理。
测量对象+时间戳+测量属性+测量值的组合称为一条时间序列数据记录,也称电力负荷数据测点。以某楼宇中某居民用户安装的智能电表为例,描述 SG-CIM 数据模型在海量数据管理平台中的应用,如下图所示。
根据 SG-CIM 数据模型,一条时间序列数据记录由如下几部分组成 :
测量对象 (obj) 以 SG-CIM 数据模型中的每个叶子节点来刻画,例如正向有功尖能量(fd.shark.electricity)。
测量属性 (tag) 以 SG-CIM 数据模型中叶子节点的属性:用户 (user) 和设备类型 (dtype) 等属性来描述,例如 user= lvsejiayuan.A.unit2.603,dtype=ammeter,user 是一个特殊的属性,用根至叶子节点的全路径刻画。
单值模型 : 即对测点建模,以单个测点对测点定义时序采样。
多值模型 : 即对设备/数据源进行建模,例如基于智能电网设备建模。
云原生分布式时序数据库GaussDB(for Influx)采用存储计算分离架构。
GaussDB(for Influx) 在生态和协议方面完美兼容 InfluxDB。InfluxDB 灵活多变的 Schema-Free 行协议可以完美匹配 SG-CIM 模型。
数据写入时候,不需要提前创建 Schema 定义,同时支持 Tags 和 Fields 字段自由扩展,未来有需要新增维度的时候,可以动态进行增加。
可以参考下面简单的例子 :
我们以智能电网中线路设备数据为例子,根据行协议如何将 SG-CIM 模型转化成 GaussDB(for Influx)数据模型 :
i_value, i_status : 电流相关指标 p_value, p_status : 电压相关指标 q_value, q_status : 功率相关指标 其中各个指标项采集的值是测量值 (value)
deviceId : 设备标识 ID
deviceType : 设备类型标识
line : 线路标识 ID
以上模型在数据库中存储格式如下:
stbl_line,line=XXX线路,deviceType=XXX,deviceId=E08995 i_value=X,i_status=X,p_value=X,p_status=X,q_value=X,q_status=X 1663121437010000000
GaussDB(for Influx)是一款基于计算存储分离架构,完全兼容 InfluxDB 生态的云原生时序数据库。依托于华为云计算平台高性能,高可靠,高安全,可弹性伸缩的基础上,GaussDB(for Influx)提供时序数据高效存储、分析、展示功能,同时具有高写入性能、灵活扩容、高压缩率和高查询性能等特点。GaussDB(for Influx)可以广泛应用于各种时序数据处理场景,例如工业物联网,车联网,物联网,运维监控,银行金融等。
华为云数据库 GaussDB(for Influx)团队(西安、深圳)简历投递邮箱:yujiandong@huawei.com
云数据库创新Lab(成都、北京)简历投递邮箱:xiangyu9@huawei.com