云数据库 GaussDB(for Influx) 解密第十一期:让智能电网中时序数据处理更高效

Posted 华为云开发者联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云数据库 GaussDB(for Influx) 解密第十一期:让智能电网中时序数据处理更高效相关的知识,希望对你有一定的参考价值。

摘要:GaussDB(for Influx)是一款基于计算存储分离架构,完全兼容 InfluxDB 生态的云原生时序数据库。

本文分享自华为云社区《云数据库 GaussDB(for Influx) 解密第十一期:让智能电网中时序数据处理更高效》,作者:华为云数据库 GaussDB(for Influx)。

电网场景中的时序数据

今天在手机上就可以直接交电费、查看剩余电量、电量不足还可以发出告警提醒、以及分析过去的用电情况、预估未来用电情况等等。再也不用去缴费点缴费,也不用人工去每个电表上抄每家的使用情况,这些都基于我们国家的智能电网建设,而以上只是对消费者带来的一些便利。智能电网在电网线路监控、电力调度、配电等方面发挥着越来越重要的作用。

智能电网是由许多部分组成,包括智能变电站,线路输送,智能交互终端,智能电表,智能中央系统等等。每个部分都集成了大量的传感器,这些分布在全网各节点的传感器无时无刻不在收集各类数据。随着中国智能电网建设的不断完善,其测点的规模越来越大,达到数千万级以上,并且单个测点将以分钟级甚至秒级的频率产生数据。将会产生海量的监控数据,而且这些数据大部分属于时序数据。因此在针对智能电网构建集中式数据中心时,如何存储、处理、分析海量的监控数据成为一个难点,具体包括以下面三个方面 :

  • 数据规模超大,分布密集,数据存储难

以智能电网中WAMS 系统为例,每秒需要处理的时序数据记录数可达到一千万,因此需要支撑每秒千万级别的写入。常规的数据处理方式根本无法满足需求。

  • 数据处理实时性需求高

针对数千万的电表终端,客户在充值后要立即生效,客户产生的电量要实时的计费,并反馈给客户等场景,都需要实时的处理海量数据;针对数千公里的电网线路监控,如果出现异常,要能及时告警等。

  • 数据价值挖掘困难

电网检测点多,检测信息密集,在如此海量的数据中挖掘出有价值的信息也会遇到很大的挑战。

智能电网设备中的时序数据

智能电网中的时序数据一般是指由设备/仪表产生,由传感器进行收集,与某一设备具体相关,在时间上前后存在关联性的一类数据。如上图所示,对于电网中的电表设备,其电压、电流值就是典型的时序数据。

一条时序数据记录一般可定义为三元组: <DevicelD, Timestamp, Value>

  • DeviceID : 产生该条数据的物理设备/传感器
  • 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 等作为时序数据的存储和读取工具。利用实时数据库进行时序数据处理。

然而实时数据库在应对智能电网大数据时存在如下问题:

  • 无法支持大规模测点管理。对于国家级或省级智能电网而言,需要支持上亿甚至上十亿的测点规模。然而,无论 PI,eDNA,均无法为大规模测点管理提供支撑。
  • 扩展能力不足。实时数据库一般只支持单机部署,无法集群部署,无法支撑大规模数据应用。
  • 高可用与数据安全性不足。实时数据库一般不具备高可用特性,对于所存储的数据的安全性,也完全依赖于硬件与数据库软件本身,不支持数据冗余备份,无法应对大数据分析场景。

随着大数据技术的发展,近年来也有一些基于开源的 HBase,Cassandra 等 NoSQL 数据库处理时序数据的研究和应用。这些分布式 NoSQL 数据库虽然解决了扩展能力,但是其通用的数据组织方式并不完全适合智能电网行业对时序数据存储和查询需求,用户必须根据实际应用场景,进行特殊设计甚至大量数据冗余存储才能较好的利用资源处理请求。

大部分仅提供的单个测点的数据存储接口,无法将设备模型数据与离散测点结合,难以支撑历史潮流分析、故障分析和 WAMS 等智能电网高级应用。除此之外,它们的数据模型单一,对于读取一定时间范围内的数据记录效率较高,但对于定位某个时间点的多条记录,过滤,组合等一系列操作将浪费大量 I/O 资源。

其次,二维数据模型中的每个存储单元由主键和列限定符唯一表示,因而大部分磁盘都浪费在存储重复的主键,存在大量冗余信息,存储效率低。同时,由于智能电网场景对于时序数据处理有着多种维度查需和数据聚合需求,通用KV 数据库往往需要结合 ElasticSearch / Solr 等搜索引擎进行加速或者需要开发巧妙设计 KV 结构才能达到很好的效果,但是这样大幅度提升了开发员人的学习和运维成本。

针对电网场景中时序数据,专业的分布式时序数据库是最好的选择,因为他们具备以下重要的特性 :

灵活多变的数据模型 : 用户根据业务需求,通过标签组合的方式自由定义数据模型,同时也可以根据业务变化和演进进行变更。

高写入吞吐量 : 分布式时序数据库解决大规模集群的横向扩展问题,保证高性能平稳写入的需求。

  • 在一些大规模的应用性能监控、物联网场景,海量的设备持续产生时序数据,例如省域级别的电网用电测量数据,9000万数量级的电表设备,原来每个月采集一次,后续业务升级后15分钟采集一次,每秒需要处理的时序数据点数达到数百万甚至千万数据点,需要庞大且可以横向水平扩展的集群来支撑全量的业务写入。

高效的时序数据查询与分析 : 时序数据库支持多维时间线检索、并具备流式处理、预计算等能力,满足大规模 APM、物联网,工业物联网等业务场景的典型查询需求。

  • 在典型的监控场景,通常需要对长周期的数据进行查询分析,比如针对某些指标最近1天、3天、7天、1个月的趋势分析、报表等;而在物联网场景,有一类比较典型的断面查询需求,例如查询某个省指定时间所有电表的用电量量明细数据,查询某个品牌空调的某个时间的平均运行温度;这些查询要扫描大量的集群数据才能拿到结果,同时查询的结果集也可能非常大。

低成本的时序数据存储 : 时序数据库充分利用好时序数据量大、冷热访问特征明显,进行计算、存储资源的解耦,通过低成本存储介质、压缩编码、冷热分离、高效 TTL等技术将数据存储成本降低到极致。

  • 在车联网场景,20000辆车每小时就产生近百 GB 的车辆指标数据。如果要保存一年的运行数据就需要PB级的数据存储规模。由于数据规模巨大,对存储的低成本要求很高,另外时序数据的冷热特征明显。

丰富的生态协同 : 时序数据库与数据可视化平台、大数据处理、流式分析系统等对接,与周边生态形成协同来创造业务价值。

  • 在物联网、工业互联网等场景,时序数据通常有进一步做运营分析处理的需求,在很多情况下时序数据只是业务数据的一部分,需要与其他类型的数据组合来完成查询分析。

智能电网数据模型

下面我们具体看一下智能电网中的数据模型,从而进一步体现为什么时序数据库是智能电网场景中数据处理的最佳选择。

统一标准 SG-CIM

针对现在电力行业各企业业务数据模型多样化,非统一,交互困难等问题,国家电网公司通过分析整合,提出了一个新型的企业公共数据模型(SG-CIM), 形成了统一的信息视图,实现多企业多业务应用系统间的数据交互共享。SG-CIM 和时序数据库模型非常匹配。

在智能电网管理平台中,SG-CIM数据模型中的每个叶子节点称为测量对象,叶子节点标签称为测量属性,它由一个或多个键值对组成,用于进一步刻画补充测量对象的属性信息,根至叶子节点的全路径称为用户属性,作为一个特殊属性处理。

测量对象+时间戳+测量属性+测量值的组合称为一条时间序列数据记录,也称电力负荷数据测点。以某楼宇中某居民用户安装的智能电表为例,描述 SG-CIM 数据模型在海量数据管理平台中的应用,如下图所示。

根据 SG-CIM 数据模型,一条时间序列数据记录由如下几部分组成 :

  • 测量对象 (obj) : 一个被定量测量对象的名称,比如电能量,吞吐量等。
  • 时间戳 (timestamp) : 以 UNIX 时间表示(秒或毫秒),用于标识这条时间序列被记录/存储的时间。
  • 测量属性 (tag) : 键值对,用于区分或组组织测量对象相同,但来自不同源或相关实体的相似数据点,增加灵活性。
  • 测量值 (value) : 该测量对象在当前时刻的实际测量值,整型或浮点型。

测量对象 (obj) 以 SG-CIM 数据模型中的每个叶子节点来刻画,例如正向有功尖能量(fd.shark.electricity)。

测量属性 (tag) 以 SG-CIM 数据模型中叶子节点的属性:用户 (user) 和设备类型 (dtype) 等属性来描述,例如 user= lvsejiayuan.A.unit2.603,dtype=ammeter,user 是一个特殊的属性,用根至叶子节点的全路径刻画。

根据 SG-CIM 模型进行时序数据模型设计 - 多值模型和单值模型

单值模型 : 即对测点建模,以单个测点对测点定义时序采样。

  • 按设备将每个设备的测量值属性分别定义到时序数据库中。
  • 这种存储方式数据定义、变化值提交和历史值查询都相对简单。
  • 缺点同样明显,存储在时序数据库中数据没有关联性,如需同时查询线路的有功和电流,则需要分两次查询,查询性能较低,同时也不利于做关联性分析。
  • OpenTSDB 和 Prometheus时序数据库采用的是单值模型。

多值模型 : 即对设备/数据源进行建模,例如基于智能电网设备建模。

  • 在时序数据库中,将同一个设备采集的不同测点属性存储在一张表的不同域。这要只需要一次查询,即可得到一个设备的所有量测,查询效率和数据同步行都相对较高。
  • 线路设别在时序数据库中的记录可定义为八元组:<oid,timestamp, i_value, i_status, p_value, p_status, q_value, q_status>。
  • GaussDB(for Influx) , InfluxDB,TimeScaleDB 等时序数据库采用的是多值模型。

云数据库 GaussDB(for Influx)

如何支撑庞大的智能电网数据

云原生分布式时序数据库GaussDB(for Influx)采用存储计算分离架构。

  • 集群能力方面 : 具备非常平滑快速的弹性扩缩容能力。集群可以轻松扩展至每秒千万点写入吞吐量,PB界别的存储支持。
  • 服务和数据高可用方面 : 数据三副本存储确保数据可用性;集群跨 AZ 可用区容灾部署,集群最大支持N - 1 节点故障,同时数据自动负载均衡避免热点。
  • 时序数据存储方面 : 深度优化存储引擎,确保稳定的高吞吐量写入;同时时序数据的自适应压缩能力,让时序数据压缩比达到20 : 1;自动的数据冷热分层存储,进一步降低数据存储成本。
  • 时序数据计算方面 : 集成了丰富的数据聚合,降采样,插值,预算,异常检测等算子。同时支持边云同步能力,实现数据边云一体化。
  • 在生态和开源兼容方面 : 支持多种开源时序数据库协议,例如 Prometheus,Graphite 和 OpenTSDB,同时完全兼容InfluxDB 生态。

基于 GaussDB(for Influx)的电网数据模型设计

GaussDB(for Influx) 在生态和协议方面完美兼容 InfluxDB。InfluxDB 灵活多变的 Schema-Free 行协议可以完美匹配 SG-CIM 模型。

数据写入时候,不需要提前创建 Schema 定义,同时支持 Tags 和 Fields 字段自由扩展,未来有需要新增维度的时候,可以动态进行增加。

可以参考下面简单的例子 :

我们以智能电网中线路设备数据为例子,根据行协议如何将 SG-CIM 模型转化成 GaussDB(for Influx)数据模型 :

  • Measurement : stbl_line,相当于关系型数据库中的表概念。
  • Fields : SG-CIM 模型中的多个测量对象 (Obj),即线路设备采集和上报的指标项,后期可以动态扩展。

i_value, i_status : 电流相关指标 p_value, p_status : 电压相关指标 q_value, q_status : 功率相关指标 其中各个指标项采集的值是测量值 (value)

  • Tags : SG-CIM 模型中的测量属性 (Tag),表示线路设备静态属性标签,可以根据系统需要自定义和扩展

deviceId : 设备标识 ID

deviceType : 设备类型标识

line : 线路标识 ID

  • Timestamp : SG-CIM 模型中时间戳项。

以上模型在数据库中存储格式如下:

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

点击关注,第一时间了解华为云新鲜技术~

以上是关于云数据库 GaussDB(for Influx) 解密第十一期:让智能电网中时序数据处理更高效的主要内容,如果未能解决你的问题,请参考以下文章

解读华为云GaussDB(for Influx):最佳实践之数据建模

华为云GaussDB(for Influx)揭密:数据分级存储

解读华为云GaussDB(for Influx):数据直方图

Prometheus搭乘华为云GaussDB(for Influx):让监控数据更安全

华为云GaussDB(for Influx)解读第五期:最佳实践之子查询

解读GaussDB(for Influx)的数据压缩