用于配电网多源数据库的高吞吐率数据处理方法与流程

专利2022-06-30  53


本发明涉及数据吞吐技术领域,尤其指一种用于配电网多源数据库的高吞吐率数据处理方法。



背景技术:

随着智能电网的建设,越来越多的量测终端或系统布置于配电网,比如配网微型同步相量测量装置(d-pmu),高级量测体系(ami)这些设备与传统的配网scada系统一起构成新的配电网混合量测与控制系统。在此种新型配电网系统中,配用电数据爆炸性增长,以d-pmu数据为主,d-pmu数据采集频率为每次/10ms,对于一个50通道量测点的d-pmu来说每秒钟需要采集的数据达到50000个,一分钟为300万个点。如此海量高频的数据,给配电网多源数据库存的数据吞吐能力提出新的挑战。



技术实现要素:

为了解决上述问题,本发明提供一种用于配电网多源数据库的高吞吐率数据处理方法。

用于配电网多源数据库的高吞吐率数据处理方法,包括以下步骤:

一、采用socket或动态链接库获取多源数据;

二、通过c 动态链接库数据访问接口发送多源数据。。

进一步地,所述多源数据包括d-pmu数据和scada数据,所述d-pmu数据采用socket来获取,所述scada数据采用动态链接库来获取。

更进一步地,配电网多源数据库采集d-pmu数据的过程如下:

s01,在多源数据库的接收端创建服务器套接字并绑定端口,与d-pmu建立socket连接;

s02,多源数据库的接收端启动线程进行数据的获取;

s03,根据d-pmu数据的包特点,对每个包依次进行读取并分别创建线程进行数据解析和处理。

更进一步地,在对每个包依次进行读取并分别创建线程进行数据解析和处理时:先读取每个包的数据长度信息,再根据数据长度将整个包读取出来,接着使用线程池技术对每个包的“数据点数、每秒数据个数、时间戳和数据类型”进行解析,最后根据数据类型分别对每个包进行处理。

再进一步地,配电多源数据库采集scada数据的过程如下:

s01,通过c 调用主站平台提供的动态链接库获取scada数据;

s02,创建数据库连接,在平台qt框架下将scada数据批量插入数据库。

再进一步地,所述c 动态链接库数据访问接口的制作方法为:先确定数据访问接口的数据访问形式并以此定义数据结构,然后定义c 接口函数并逐个实现获取不同类型数据的c 函数。

优选地,所有数据的c 函数的实现过程均如下:

s01,创建数据库连接;

s02,通过sql工具从数据库中查询获取数据并进行数据封装;

s03,制作动态链接库配置文件;

s04,在服务器中编译运行步骤s02和s03中得到的文件,生成c 动态链接库。

本发明提供的用于配电网多源数据库的高吞吐率数据处理方法,针对配电网多源数据的特点,分别采用了socket和动态链接库来获取数据,并通过c 动态链接库数据访问接口将高级应用所需的多源数据发送出去。具体而言,在此种方法中,d-pmu数据的采集通过多线程技术、线程池可以提高资源利用率和数据处理效率,数据存储通过数据库连接池、批量处理技术可以提升存储效率,这些方法的使用能够实现每秒3万甚至以上的d-pmu数据提取需求,而通过动态链接库形式获取scada数据较socket获取数据的效率更高,使得scada数据无需进行数据解析即可存入多源数据库。另外,此种方法中使用c 动态链接库数据访问接口一次性可以获取100测量点20s左右的数据量(频率最高的d-pmu数据刷新频率可达到10ms一条,每个测量点一秒钟可产生100条数据,),显著提高了数据的访问速度和效率。显然,本发明提供的用于配电网多源数据库的高吞吐率数据处理方法可以有效提高多源数据库的吞吐率,满足新型配电网系统的数据量需求。

附图说明

图1为本发明所涉用于配电网多源数据库的高吞吐率数据处理方法中采集d-pmu数据的流程图;

图2为本发明所涉用于配电网多源数据库的高吞吐率数据处理方法中采集scada数据的流程图;

图3为本发明c 动态链接库数据访问接口的制作方法的流程图。

具体实施方式

为了便于本领域技术人员的理解,下面结合实施例与附图对本发明作进一步的说明,实施方式提及的内容并非对本发明的限定。

数据的吞吐关键在于数据的采集和发送,配电网多源数据库中包括动态数据和静态数据,动态数据是指变化频率比较高的数据,如:scada数据、d-pmu数据、光伏数据和营销数据,静态数据是指变化频率不高的数据,如:台账数据和gis数据,其中,相对于scada数据和d-pmu数据来说,光伏数据、营销数据、台账数据和gis数据的数据密度并不高,传统的配电网多源数据库完全有能力进行这些数据的吞吐,目前,最主要的是如何解决scada数据和d-pmu数据的吞吐问题,鉴于此,本实施方式提供了以下方法予以解决。

一种用于配电网多源数据库的高吞吐率数据处理方法,包括以下步骤:

一、采用socket或动态链接库获取多源数据;

二、通过c 动态链接库数据访问接口发送多源数据。

在前述步骤一中,对于d-pmu数据宜采用socket来获取,而对于scada数据宜采用动态链接库来获取,两种数据的采集方式详见下面。

1)d-pmu数据的采集

d-pmu数据获取方式为socket获取,数据发送方为客户端,数据接收方为服务端。发送数据类型为16进制数据,接收方获取数据后需要进行数据解析后,才能将解析数据存入数据库。单个d-pmu数据量每秒5万条左右,且24小时不间断发送数据。假设有100个pmu同时发送数据,接收方需在1秒以内完成500万条左右数据的获取、解析和存储操作。

本发明提供的d-pmu的数据采集通过多线程技术、线程池等提高资源利用率和数据处理效率,数据存储通过数据库连接池、批量处理等技术来提升存储效率。下面通过实例来进行说明,如图1所示,d-pmu数据的采集过程如下:

首先数据接收方创建服务器套接字serversocket,绑定端口为5001(令数据发送端指定服务器ip:192.168.100.11,端口号:5001)。

接着,当发送端创建socket连接后,接收方为socket创建并启动新的线程单独进行数据接收、处理和存储。值得注意的是,socket进行接收数据前,需要先对数据格式进行分析,d-pmu数据为16进制格式,数据可以划分为每个独立的包,每个包以0x68开头,接下来两个字节数据表示包中的数据长度,数据为2字节长度数据后的0x68标识符之后的下一个数据开始(1字节类型)至0x16数据结束。

最后,根据d-pmu数据的包特点,接收数据时对每个包依次进行读取并分别创建线程进行数据解析工作,具体来说,先将0x86和两字节的长度数据作为包的头信息进行读取,解析数据长度信息后再读取整个包的剩余部分。为了提升系统的执行效率,通过使用线程池技术,节省线程的创建、销毁带来的时间开销,对包数据进行处理时首先解析包信息,包括数据点数、每秒数据个数、时间戳以及数据类型信息,数据处理通过线程单独处理,从而不会阻塞下一个包的数据读取操作,由于遥测数据与遥信数据数据域长度不同,接下来需根据数据类型分别对数据包进行处理,但是处理逻辑大体类似。此处以遥测为例,首先需要将整个包分数据域为每个数据点分别进行处理,根据数据点的个数将每个数据点的数据域提取处理,对每个数据点进行解析并生成批量插入sql语句的value,最后根据系统的处理能力从队列中获取指定个数的d-pmu数据点sql语句value值,并拼接为完整的批量插入sql语句,进行批量插入操作。

为了节省每次插入数据库创建连接与销毁时带来的时间开销,通过数据库连接池技术来节省连接建立与销毁的时间。数据库连接池中同样使用blockingqueue队列存储所有数据库连接,将数据库连接的建立写入静态代码块中,使得类在加载时就能构建好数据库连接池。数据库连接池大小根据执行sql语句执行线程数量决定,由于线程池使用blockingqueue数据结构存放,因此连接池大小设为sql语句执行线程数的两倍能够使得执行效率不被影响。采用上述实施方式所涉的方法能够实现每秒3万甚至以上的d-pmu数据提取需求。

2)scada数据的采集

scada数据的采集方式与d-pmu数据的采集方式不同,如图2所示,scada数据的采集方法如下所述:

首先,需要在系统中通过c 调用主站平台提供的原始数据访问接口进行数据获取。主站提供的数据访问接口形式是c 动态链接库的形式提供,因此接口的调用形式、运行平台都需要与主站保持一致。接口返回数据以向量vector形式返回,vector中对象类型根据具体获取数据的接口进行区分。需要强调的是,通过动态链接库形式获取数据较socket获取数据的效率更高,且无需进行数据解析即可存入数据库。

然后,创建数据库连接,在平台qt框架下将scada数据批量插入数据库。由于运行平台采用了qt框架,为了便于开发和维护,scada数据的数据库插入操作也采用qt框架提供的批量处理方法进行。需要注意的是,在进行数据库连接时需要设置数据编码格式,这与数据库的编码格式相同,否则会造成插入的数据出现乱码。虽然scada数据密度没有d-pmu数据数据密度高,但由于每次获取的数据量未知,因此也需要及时高效的将获取数据快速存入数据库中,需要采用qt框架下提供的数据库批量插入操作。由于数据量的不确定性,每次批量插入操作的数据最大为1万条数据,数据量大于1万条时通过外层循环执行多次插入操作,最后将生成的数据绑定在批量处理insert中,并执行批量处理语句。

多源数据融合与处理原型平台通过调用主站提供的原始数据访问接口获取未处理的、原始的静态数据和动态数据。获取到数据之后通过一系列的预处理操作形成融合后的、高度关联的多源数据集,多源数据集为上层有需求的高级应用提供融合后的数据支持。上层应用要使用融合后的数据,就需要一套完整的数据访问接口,通过数据访问接口访问多源数据库从而获取数据。由于平台提供的数据访问接口形式是c 动态链接库,考虑到系统的整体性和一致性,多源融合数据访问接口也以c 动态链接库的形式提供,并且接口的调用形式、运行平台都与平台保持一致。鉴于此,在前述步骤二中,要实现多源数据的高速访问,就需要在多源数据库的发送端制作c 动态链接库数据访问接口,如图3所示,该c 动态链接库数据访问接口的制作方法如下:

首先,制作数据访问接口首先要考虑的是从数据库中读取数据之后以什么形式返回,本实施方式中平台提供的接口中数据是以向量vector的形式返回,例如:获取scada数据时,用户需要先定义一个向量vector,向量的数据类型是scada类,调用获取scada数据接口时将此向量作为参数传过去,平台就会将数据结果保存到这个向量里面返回给用户。为了保持接口的一致性,采用以vector的形式承载查询到的数据。值得注意的是,接口返回结果向量中数据类型需要提前定义好供用户使用,每一类数据都是一种数据类型。数据类型可以存在于一个名为“wamsrtdbstructdef.h”的头文件中,用户可以在该头文件中查看所有的数据类型。确定数据访问接口的数据返回形式后,再定义数据结构,为每一类数据封装一种数据结构。前述有提及,数据可分为两类静态数据:台账数据和gis数据,以及六类动态数据:d-pmu数据、scada数据、营销数据、光伏数据、气象数据、计量数据,其中dpmu数据和scada数据又有遥测和遥信之分,因此总计有十类数据结构。

其次,定义c 接口函数并逐个实现获取不同类型数据的c 函数。每个函数的内部实现总体流程都是相同的,这里以其中一种数据为例描述其实现的具体过程:

s01,创建数据库连接

数据库连接的配置信息是默认一致的,本实施方式中的数据库连接采用的是qt框架中的qtsql/qsqldatabase,需要注意的是在进行数据库连接之前需要设置好数据编码格式,这里我们设置的是选择数据库默认编码方式,因为在创建数据库时采用的也是数据库默认编码方式,这样就保持了编码的一致性,以防出现乱码,同时也提高了程序的灵活性,如果后期需要修改编码方式,只需要修改数据库默认编码而不用修改程序代码。

s02,编写sql语句,获取数据并进行数据封装

封装数据之前需要先确定要提供哪些数据,即sql语句内容,通常情况下数据接口是有条件的查询,极少数情况下会获取全部数据,查询条件需要我们定义之后由用户调用接口时传过来,我们对sql进行拼接封装再进行sql查询获取数据,封装的目的有两个:第一是由于qt框架查询出来的数据格式是qt专有的,需要将其转为常用的char、int等;第二是将每一条数据封装成数据对象,将其放到vector向量中返回给用户。

s03,编写配置文件

数据结构头文件和主函数全部写好之后,最后是编写配置文件,该配置文件的作用是配置qt环境、设置生成的动态链接库存放位置、设置需要引用的外部头文件、设置主程序入口等。

s04,将步骤s02、s03中编辑好的文件均拷贝至服务器上,在该目录下打开终端命令框,进行编译运行,编译运行的命令是qmake和make,执行之后就会在系统配置的目录(/home/smart/smartsys/binary/kylin64/debug/bin)下生产一个名为libmultidata.so的动态链接库。到这里动态链接库的制作流程全部完成。

动态链接库制作完成之后,在实验室环境下进行了接口性能测试,主要是测试接口数据访问时延。通常,该项指标的要求是数据访问时延<200ms,而通过测试得到:当获取营销数的数量一万条左右时,数据访问平均时延为10ms;当获取营销数的数量在五万条左右时,数据访问平均时延为50ms;当获取营销数的数量在十万条左右时,数据访问平均时延为100ms。在满足指标要求范围内,最大数据量可以达到20万条左右;本实施方式中频率最高的d-pmu数据刷新频率为10ms一条,每个测量点一秒钟产生100条数据,通过我们提供的接口,一次性可以获取100测量点20s左右的数据量,可以满足高级应用的数据量需求。

在本发明中,为了方便高级应用调用动态链接库获取数据,可以开发一个访问接口的示例程序,程序的主体结构和四方提供的示例程序结构基本一致。另外,还可以在现有的框架中加上内存数据库缓冲机制,以满足高级应用对更大数据量的需求。内存数据库是建立在内存中的关系数据库,而传统的数据库一般是建立在磁盘上,磁盘数据库需要频繁地访问磁盘来进行数据的操作,由于对磁盘读写数据的操作,一方面要进行磁头的机械移动,另一方面受到系统调用(通常通过cpu中断完成,受到cpu时钟周期的制约)时间的影响,当数据量很大,操作频繁且复杂时,就会暴露出很多问题。内存数据库数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。也就是说在相同的时间延迟情况下,通过增加内存数据库缓冲机制,我们的接口最多可以一次性提供两百万条数据。

上述实施例为本发明较佳的实现方案,除此之外,本发明还可以其它方式实现,在不脱离本技术方案构思的前提下任何显而易见的替换均在本发明的保护范围之内。

为了让本领域普通技术人员更方便地理解本发明相对于现有技术的改进之处,本发明的一些附图和描述已经被简化,并且为了清楚起见,本申请文件还省略了一些其它元素,本领域普通技术人员应该意识到这些省略的元素也可构成本发明的内容。


技术特征:

1.用于配电网多源数据库的高吞吐率数据处理方法,其特征在于,包括以下步骤:

一、采用socket或动态链接库获取多源数据;

二、通过c 动态链接库数据访问接口发送多源数据。

2.根据权利要求1所述的用于配电网多源数据库的高吞吐率数据处理方法,其特征在于:所述多源数据包括d-pmu数据和scada数据,所述d-pmu数据采用socket来获取,所述scada数据采用动态链接库来获取。

3.根据权利要求2所述的用于配电网多源数据库的高吞吐率数据处理方法,其特征在于:配电网多源数据库采集d-pmu数据的过程如下:

s01,在多源数据库的接收端创建服务器套接字并绑定端口,与d-pmu建立socket连接;

s02,多源数据库的接收端启动线程进行数据的获取;

s03,根据d-pmu数据的包特点,对每个包依次进行读取并分别创建线程进行数据解析和处理。

4.根据权利要求3所述的用于配电网多源数据库的高吞吐率数据处理方法,其特征在于:在对每个包依次进行读取并分别创建线程进行数据解析和处理时:

先读取每个包的数据长度信息,再根据数据长度将整个包读取出来,接着使用线程池技术对每个包的“数据点数、每秒数据个数、时间戳和数据类型”进行解析,最后根据数据类型分别对每个包进行处理。

5.根据权利要求2或4所述的用于配电网多源数据库的高吞吐率数据处理方法,其特征在于:配电多源数据库采集scada数据的过程如下:

s01,通过c 调用主站平台提供的动态链接库获取scada数据;

s02,创建数据库连接,在平台qt框架下将scada数据批量插入数据库。

6.根据权利要求5所述的用于配电网多源数据库的高吞吐率数据处理方法,其特征在于:所述c 动态链接库数据访问接口的制作方法为:先确定数据访问接口的数据访问形式并以此定义数据结构,然后定义c 接口函数并逐个实现获取不同类型数据的c 函数。

7.根据权利要求6所述的用于配电网多源数据库的高吞吐率数据处理方法,其特征在于:所有数据的c 函数的实现过程均如下:

s01,创建数据库连接;

s02,通过sql工具从数据库中查询获取数据并进行数据封装;

s03,制作动态链接库配置文件;

s04,在服务器中编译运行步骤s02和s03中得到的文件,生成c 动态链接库。

技术总结
用于配电网多源数据库的高吞吐率数据处理方法,涉及数据吞吐技术领域,该用于配电网多源数据库的高吞吐率数据处理方法包括两大步骤,步骤一、采用Socket或动态链接库获取多源数据;步骤二、通过C 动态链接库数据访问接口发送多源数据。本发明所涉用于配电网多源数据库的高吞吐率数据处理方法可以有效提高多源数据库的吞吐率。

技术研发人员:何西;严亚周;董恒;李祖林
受保护的技术使用者:湖南工学院
技术研发日:2020.02.17
技术公布日:2020.06.05

转载请注明原文地址: https://bbs.8miu.com/read-57870.html

最新回复(0)