一种基于实时数据库代理的数据统计系统和方法与流程
未命名
10-19
阅读:137
评论:0
1.本发明属于网络数据传输技术领域,具体涉及一种基于实时数据库代理的数据统计系统和方法。
背景技术:
2.目前,电厂对数据统计功能没有统一、集中处理的模块,导致电厂对数据统计没有标准的处理方式,例如使用数据库自带的统计方法、手动进行计算统计、自主研发软件进行统计处理等。电厂进行数据统计时由于统计方法多样、有些统计方法会存在误差、有些统计方法会比较耗时会导致统计结果不一致、统计时间长、统计结果不准确等一系列问题。并且现存数据库自带的统计方法,以及相关软件的统计方法,存在一定的局限性,也不公开透明,用户不能够很好的把握统计结果的正确性。
技术实现要素:
3.为了克服上述现有技术的缺点,本发明的目的在于提供一种基于实时数据库代理的数据统计系统和方法,用于解决电厂进行数据统计时统计结果不一致、统计时间长、统计结果不准确等技术问题。
4.为了达到上述目的,本发明采用以下技术方案予以实现:
5.本发明公开了一种基于实时数据库代理的数据统计系统,包括消息处理模块、任务管理模块、任务处理模块、算法管理模块和统计缓冲池模块;
6.所述消息处理模块用于接收并解析来自实时数据库代理的消息并转发给任务管理模块或算法管理模块;
7.所述任务管理模块用于对消息处理模块得到任务队列中的数据统计任务进行任务解析、任务分发、任务返回和任务终止;
8.所述任务处理模块用于对来自任务管理模块的任务队列进行数据统计任务的处理;包括从执行队列获取任务、执行队列管理和执行线程池管理;
9.所述统计缓冲池模块用于对来自任务处理模块的数据统计结果进行管理;
10.所述算法管理模块用于对具体c语言开发的动态库算法和自定义lua脚本算法的添加、删除、替换,以及对任务处理模块提供相应的算法统计接口。
11.进一步地,所述算法管理模块包括算法库管理子模块、接口管理子模块和数据管理子模块;所述消息处理模块用于接收并解析来自实时数据库代理的消息并转发给任务管理模块或算法管理模块的数据管理子模块;
12.所述的算法库管理子模块用于对具体c语言开发的动态库统计算法和自定义lua脚本统计算法的添加、删除、替换;
13.所述的接口管理子模块对任务处理模块提供相应的算法统计接口;
14.所述的数据管理子模块与消息处理模块进行交互获取历史数据、实时数据和断面数据。
15.本发明还公开了上述基于实时数据库代理的数据统计系统的方法,包括以下步骤:
16.s1:消息处理模块接收并解析来自实时数据库代理的消息,转发给任务管理模块的任务队列中或算法管理模块;
17.s2:任务管理模块对任务队列中的数据统计任务进行任务解析、任务分发、任务返回和任务终止;
18.s3:任务处理模块从执行队列获取任务、执行队列管理和执行线程池管理;
19.s4:采用统计缓冲池模块对来自任务处理模块的数据统计结果进行管理;
20.s5:算法管理模块对任务处理模块提供相应的算法统计接口,并对具体c语言开发的动态库算法和自定义lua脚本算法的添加、删除、替换,并与消息处理模块进行交互获取历史数据、实时数据和断面数据,用于数据统计。
21.进一步地,实现s1的步骤,包括以下过程:
22.步骤1.1:接收来自实时数据库代理的通讯ipc消息msg;
23.步骤1.2:提取msg的消息编号,判断是否为获取数据统计的消息,否则再次执行步骤1.7,是则执行步骤1.3;
24.步骤1.3:解析消息msg获取统计算法的编号n,执行步骤1.4;
25.步骤1.4:与算法管理模块交互,判断算法编号n在算法库中是否存在,否则返回错误码并执行步骤1.1,是则执行步骤1.5;
26.步骤1.5:解析ipc消息msg,从中获取起始时间、终止时间、标签名称,并执行步骤1.6;
27.步骤1.6:将标签名称、起始时间、终止时间、以及算法编号n打包成任务消息发给任务管理的任务队里,执行步骤1.1;
28.步骤1.7:判断是否为数据,否则执行步骤1.1,是则执行步骤1.8;
29.步骤1.8:解析数据并转发给算法管理模块,执行步骤1.1。
30.进一步地,s2中,所述任务分发是将数据统计任务分解成多个子数据统计任务,然后转发给任务处理模块的执行队列中。
31.进一步地,s3中,任务处理模块从执行队列中获取子数据统计任务,从算法管理模块获取统计算法,进行数据统计,然后将统计结果存于统计缓冲池。
32.进一步地,s4中,统计缓冲池模块对统计缓冲池的统计结果进行管理,包括其他模块对数据统计结果的获取,以及对统计缓冲池中数据的删除、修改、查找。
33.进一步地,所述算法管理模块包括算法库管理子模块、接口管理子模块和数据管理子模块;所述的算法库管理子模块用于对具体c语言开发的动态库统计算法和自定义lua脚本统计算法的添加、删除、替换;所述的接口管理子模块对任务处理模块提供相应的算法统计接口;
34.所述的算法库管理子模块用于对具体c语言开发的动态库统计算法和自定义lua脚本统计算法的添加、删除、替换,包括以下步骤:
35.步骤2.1:解析ini配置文件,获取所有c语言开发的动态库统计算法的算法编号和路径;
36.步骤2.2:加载动态库,并实例化算法对象,并执行步骤2.3;
37.步骤2.3:将算法编号和对应的算法实例化对象存储于容器map1中,执行步骤2.4;
38.步骤2.4:解析lua配置文件,获取算法编号、以及对应算法lua文件路径,执行步骤2.5;
39.步骤2.5:将算法编号n和算法lua文件路径存储容器map2中。
40.进一步地,所述的接口管理子模块对任务处理模块提供相应的算法统计接口,包括以下步骤:
41.步骤3.1:任务处理模块调用算法管理模块提供的数据统计接口,将算法编号n、起始时间,结束时间,标签名称传入,执行步骤3.2;
42.步骤3.2:判断判断统计算法是否属于c动态库算法,是则执行步骤3.3,否则执行步骤3.4;
43.步骤3.3:从容器map1获取算法对象进行数据统计,执行步骤3.5;
44.步骤3.4:从容器map2中获取lua文件,通过内嵌lua脚本引擎调用该文件进行数据统计,执行步骤3.5;
45.步骤3.5:将统计值返回给任务处理模块。
46.进一步地,数据管理子模块与消息处理模块进行交互获取历史数据、实时数据和断面数据,用于数据统计。
47.与现有技术相比,本发明具有以下有益效果:
48.本发明公开的一种基于实时数据库代理的数据统计系统,可通过编写lua脚本实现统计算法,也可以根据对外提供的c接口实现动态库统计算法;然后通过编写配置文件实现对算法库中的统计算法的增加、修改、替换,拓展性强;其次,任务管理模块将数据统计任务分解为多个子统计任务,然后分发给任务处理模块,多任务并发处理,具有效率高的优势;由于采用统计的算法,结果具有一致性。接口丰富,消息处理模块,除了对实时数据库代理提供服务支持,对外实现了tcp、udp、websocket、http/https协议的支持。
49.本发明还公开了上述系统的方法,通过编写lua脚本实现统计算法,通过编写配置文件实现对算法库中的统计算法的增加、修改、替换,采用统计的算法,结果具有一致性、拓展性强,并具有高的统计效率和精准的统计结果。
附图说明
50.图1为本发明基于实时数据库代理的数据统计系统的框架图;
51.图2为本发明消息处理模块的流程图;
52.图3为本发明任务管理模块的流程图;
53.图4为本发明任务处理模块的流程图;
54.图5为算法管理模块的算法库管理子模块的流程图;
55.图6为算法管理模块的接口管理子模块的流程图;
56.图7为lua脚本调用示意图;
57.图8脚本引擎框架图。
具体实施方式
58.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的
附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
59.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
60.如图1所示,本发明公开了一种基于实时数据库代理的数据统计系统,包括消息处理模块、任务管理模块、任务处理模块、算法管理模块和统计缓冲池模块;所述消息处理模块用于接收并解析来自实时数据库代理的消息并转发给任务管理模块或算法管理模块的数据管理子模块;
61.所述任务管理模块用于对数据统计任务进行任务解析、任务分发、任务返回和任务终止;
62.所述任务处理模块用于对任务队列进行数据统计任务的处理;包括从执行队列获取任务、执行队列管理和执行线程池管理;
63.其中的算法管理模块包括算法库管理子模块、接口管理子模块和数据管理子模块;所述的算法库管理子模块用于对具体c语言开发的动态库统计算法和自定义lua脚本统计算法的添加、删除、替换;所述的接口管理子模块对任务处理模块提供相应的算法统计接口;所述的数据管理子模块与消息处理模块进行交互获取历史数据、实时数据和断面数据。所述统计缓冲池模块用于对任务处理模块的数据统计结果进行缓存,以及对数据统计结果的获取、超时删除、统计值修改;所述算法管理模块用于对具体c语言开发的动态库算法和自定义lua脚本算法的添加、删除、替换,以及对任务处理模块提供相应的算法统计接口。
64.上述所示的系统的工作方法,包括以下步骤:
65.s1:消息处理模块接收并解析来自实时数据库代理的消息,转发给任务管理模块的任务队列中或算法管理模块的数据管理子模块
66.s2:如图3所示,任务管理模块对任务队列中的数据统计任务进行任务解析、任务分发、任务返回和任务终止。其中任务分发是将数据统计任务分解成多个子数据统计任务,然后转发给任务处理模块的执行队列中。
67.s3:如图4所示,任务处理模块从执行队列中获取子数据统计任务,从算法管理模块获取统计算法,进行数据统计,然后将统计结果存于统计缓冲池
68.s4:统计缓冲池模块对统计缓冲池的统计结果进行管理,包括其他模块对数据统计结果的获取,以及对统计缓冲池中数据的删除、修改、查找
69.s5:算法管理模块对任务处理模块提供相应的算法统计接口,并对具体c语言开发的动态库算法和自定义lua脚本算法的添加、删除、替换,并与消息处理模块进行交互获取历史数据、实时数据和断面数据,用于数据统计。
70.优选地,如图2所示,实现s1的步骤,包括以下过程:
71.步骤1.1:接收来自实时数据库代理的通讯ipc消息msg;
72.步骤1.2:提取msg的消息编号,判断是否为获取数据统计的消息,否则再次执行步骤1.7,是则执行步骤1.3;
73.步骤1.3:解析消息msg获取统计算法的编号n,执行步骤1.4;
74.步骤1.4:与算法管理模块交互,判断算法编号n在算法库中是否存在,否则返回错误码并执行步骤1.1,是则执行步骤1.5;
75.步骤1.5:解析ipc消息msg,从中获取起始时间、终止时间、标签名称,并执行步骤1.6;
76.步骤1.6:将标签名称、起始时间、终止时间、以及算法编号n打包成任务消息发给任务管理的任务队里,执行步骤1.1;
77.步骤1.7:判断是否为数据,否则执行步骤1.1,是则执行步骤1.8;
78.步骤1.8:解析数据并转发给算法管理模块,执行步骤1.1。
79.优选地,如图5所示,所述的算法库管理子模块用于对具体c语言开发的动态库统计算法和自定义lua脚本统计算法的添加、删除、替换,过程如下:
80.步骤2.1:解析ini配置文件,获取所有c语言开发的动态库统计算法的算法编号和路径;
81.步骤2.2:加载动态库,并实例化算法对象,并执行步骤2.3;
82.步骤2.3:将算法编号和对应的算法实例化对象存储于容器map1中,执行步骤2.4;
83.步骤2.4:解析lua配置文件,获取算法编号、以及对应算法lua文件路径,执行步骤2.5;
84.步骤2.5:将算法编号n和算法lua文件路径存储容器map2中。
85.优选地,如图6所示,所述的接口管理子模块对任务处理模块提供相应的算法统计接口,流程如下:
86.步骤3.1:任务处理模块调用算法管理模块提供的数据统计接口,将算法编号n、起始时间,结束时间,标签名称传入,执行步骤3.2;
87.步骤3.2:判断判断统计算法是否属于c动态库算法,是则执行步骤3.3,否则执行步骤3.4;
88.步骤3.3:从容器map1获取算法对象进行数据统计,执行步骤3.5;
89.步骤3.4:从容器map2中获取lua文件,通过内嵌lua脚本引擎调用该文件进行数据统计,执行步骤3.5;
90.步骤3.5:将统计值返回给任务处理模块。
91.优选地,数据管理子模块与消息处理模块进行交互获取历史数据、实时数据和断面数据,用于数据统计。
92.本发明一种基于实时数据库代理的数据统计的方法和系统,通讯采取采用异步网络io,ipc协议(windows使用127.0.0.1的af_inet,linux使用af_unix协议)提供内部模块之间的消息交互。具体的统计值管理模块、算法管理模块的接口管理子模块、加载lua脚本算法原理、lua引擎实现原理的详细实现:
93.统计值管理模块使用b+树在磁盘文件中建立索引,使用文件系统提供的流模式,
划分定长逻辑记录区(每条记录1024字节),设计最大记录数规模1千6百万,足够应用。属性使用protocol buffer编码,支持未来扩展属性。标签表使用hashmap来存储,可以在标签对象存储该标签在记录文件中位置,固定o(1)次io操作。
94.由于该方法和系统是寄生于实时数据库代理,不能过多的占用代理的资源,,并且算法管理模块的接口管理子模块要一对多个统计算法实例,所以在数据的获取通过单线程实现,模块采用单例的方式实现。数据统计时历史数据的获取相当频繁,并且特别占用内存,因此在历史数据使用采用内存池的进行存储和释放,缓解压力,提供运行效率。
95.如图7所示,主程序控制lua脚本引擎的启停,lua脚本引擎去加载、解析、运行用户编辑的lua脚本算法文件;lua脚本的具体实现原理如图8所示,脚本引擎模块在结构上包括两个部分,第一是识别脚本语言,编译字节码指令,第二是执行字节码指令;两个部分的分离能够有效提高脚本引擎扩展性。上层编译器主要对脚本源程序的字节流进行指令序列的转换,并对源程序进行词法和语法的逻辑分析,对于出现错误的情况,将会指出错误信息。虚拟机主要用于解释与执行指令流。api则是虚拟机与主程序间信息连接的重要部分,能够实现程序间控制与信息传递。
96.以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。
技术特征:
1.一种基于实时数据库代理的数据统计系统,其特征在于,包括消息处理模块、任务管理模块、任务处理模块、算法管理模块和统计缓冲池模块;所述消息处理模块用于接收并解析来自实时数据库代理的消息并转发给任务管理模块或算法管理模块;所述任务管理模块用于对消息处理模块得到的任务队列中的数据统计任务进行任务解析、任务分发、任务返回和任务终止;所述任务处理模块用于对来自任务管理模块的任务队列进行数据统计任务的处理;包括从执行队列获取任务、执行队列管理和执行线程池管理;所述统计缓冲池模块用于对来自任务处理模块的数据统计结果进行管理;所述算法管理模块用于对具体c语言开发的动态库算法和自定义lua脚本算法的添加、删除、替换,以及对任务处理模块提供相应的算法统计接口。2.根据权利要求1所述的一种基于实时数据库代理的数据统计系统,其特征在于,所述算法管理模块包括算法库管理子模块、接口管理子模块和数据管理子模块;所述消息处理模块用于接收并解析来自实时数据库代理的消息并转发给任务管理模块或算法管理模块的数据管理子模块;所述的算法库管理子模块用于对具体c语言开发的动态库统计算法和自定义lua脚本统计算法的添加、删除、替换;所述的接口管理子模块对任务处理模块提供相应的算法统计接口;所述的数据管理子模块与消息处理模块进行交互获取历史数据、实时数据和断面数据。3.权利要求1所述的一种基于实时数据库代理的数据统计系统的方法,其特征在于,包括以下步骤:s1:消息处理模块接收并解析来自实时数据库代理的消息,转发给任务管理模块的任务队列中或算法管理模块;s2:任务管理模块对任务队列中的数据统计任务进行任务解析、任务分发、任务返回和任务终止;s3:任务处理模块从执行队列获取任务、执行队列管理和执行线程池管理;s4:采用统计缓冲池模块对来自任务处理模块的数据统计结果进行管理;s5:算法管理模块对任务处理模块提供相应的算法统计接口,并对具体c语言开发的动态库算法和自定义lua脚本算法的添加、删除、替换,并与消息处理模块进行交互获取历史数据、实时数据和断面数据,用于数据统计。4.根据权利要求3所述的一种基于实时数据库代理的数据统计系统的方法,其特征在于,实现s1的步骤,包括以下过程:步骤1.1:接收来自实时数据库代理的通讯ipc消息msg;步骤1.2:提取msg的消息编号,判断是否为获取数据统计的消息,否则再次执行步骤1.7,是则执行步骤1.3;步骤1.3:解析消息msg获取统计算法的编号n,执行步骤1.4;步骤1.4:与算法管理模块交互,判断算法编号n在算法库中是否存在,否则返回错误码并执行步骤1.1,是则执行步骤1.5;
步骤1.5:解析ipc消息msg,从中获取起始时间、终止时间、标签名称,并执行步骤1.6;步骤1.6:将标签名称、起始时间、终止时间、以及算法编号n打包成任务消息发给任务管理的任务队里,执行步骤1.1;步骤1.7:判断是否为数据,否则执行步骤1.1,是则执行步骤1.8;步骤1.8:解析数据并转发给算法管理模块,执行步骤1.1。5.权利要求3所述的一种基于实时数据库代理的数据统计系统的方法,其特征在于,s2中,所述任务分发是将数据统计任务分解成多个子数据统计任务,然后转发给任务处理模块的执行队列中。6.权利要求3所述的一种基于实时数据库代理的数据统计系统的方法,其特征在于,s3中,任务处理模块从执行队列中获取子数据统计任务,从算法管理模块获取统计算法,进行数据统计,然后将统计结果存于统计缓冲池。7.权利要求6所述的一种基于实时数据库代理的数据统计系统的方法,其特征在于,s4中,统计缓冲池模块对统计缓冲池的统计结果进行管理,包括其他模块对数据统计结果的获取,以及对统计缓冲池中数据的删除、修改、查找。8.根据权利要求3所述的一种基于实时数据库代理的数据统计系统的方法,其特征在于,所述算法管理模块包括算法库管理子模块、接口管理子模块和数据管理子模块;所述的算法库管理子模块用于对具体c语言开发的动态库统计算法和自定义lua脚本统计算法的添加、删除、替换;所述的接口管理子模块对任务处理模块提供相应的算法统计接口;所述的算法库管理子模块用于对具体c语言开发的动态库统计算法和自定义lua脚本统计算法的添加、删除、替换,包括以下步骤:步骤2.1:解析ini配置文件,获取所有c语言开发的动态库统计算法的算法编号和路径;步骤2.2:加载动态库,并实例化算法对象,并执行步骤2.3;步骤2.3:将算法编号和对应的算法实例化对象存储于容器map1中,执行步骤2.4;步骤2.4:解析lua配置文件,获取算法编号、以及对应算法lua文件路径,执行步骤2.5;步骤2.5:将算法编号n和算法lua文件路径存储容器map2中。9.根据权利要求8所述的一种基于实时数据库代理的数据统计系统的方法,其特征在于,所述的接口管理子模块对任务处理模块提供相应的算法统计接口,包括以下步骤:步骤3.1:任务处理模块调用算法管理模块提供的数据统计接口,将算法编号n、起始时间,结束时间,标签名称传入,执行步骤3.2;步骤3.2:判断判断统计算法是否属于c动态库算法,是则执行步骤3.3,否则执行步骤3.4;步骤3.3:从容器map1获取算法对象进行数据统计,执行步骤3.5;步骤3.4:从容器map2中获取lua文件,通过内嵌lua脚本引擎调用该文件进行数据统计,执行步骤3.5;步骤3.5:将统计值返回给任务处理模块。10.根据权利要求9所述的一种基于实时数据库代理的数据统计系统的方法,其特征在于,数据管理子模块与消息处理模块进行交互获取历史数据、实时数据和断面数据,用于数据统计。
技术总结
本发明公开了一种基于实时数据库代理的数据统计系统和方法,属于网络数据传输技术领域。本发明公开的系统可通过编写lua脚本实现统计算法,也可以根据对外提供的C接口实现动态库统计算法,通过编写配置文件实现对算法库中的统计算法的增加、修改、替换,拓展性强,多任务并发处理,具有效率高的优势。具有效率高的优势。具有效率高的优势。
技术研发人员:何清 王奕飞 韩秀清 罗睿 王毅
受保护的技术使用者:西安西热电站信息技术有限公司
技术研发日:2023.07.21
技术公布日:2023/10/15
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
