本发明涉及电力监控技术领域,尤其涉及一种基于哈希算法的电力设备数据存取方法及系统。
背景技术:
电力系统是由供电和用电环节组成的电能生产与消费系统。其将自然界的一次能源通过发电动力装置转化成电能,再经输电、变电和配电将电能供应到各用户。为实现这一功能,电力系统在各个环节和不同层次还具有相应的信息与控制系统,对电能的生产过程进行监控和控制,以保证用户获得安全、优质的电能。
在电力监控系统中,如果电力设备过多,数据量过大,则在数据存取时会消耗大量的时间,不利于系统的实时性和运行效率。
鉴于此,为克服上述技术缺陷,提供一种基于哈希算法的电力设备数据存取方法及系统成为本领域亟待解决的问题。
技术实现要素:
本发明的目的在于克服现有技术的缺点,提供一种基于哈希算法的电力设备数据存取方法及系统,大大提高了存取和查找速度,保证了系统的实时性和运行效率。
为解决以上技术问题,本发明的技术方案为:一种基于哈希算法的电力设备数据存取方法,其不同之处在于,其步骤包括:
s1、构建哈希表:
s11、构建链表,以key和value为元素,建立存储哈希键值对的节点;
s12、以步骤s11中构建的链表为元素,构建哈希表;
s2、取设备id,以设备id为哈希键值对的key值;
s3、使用aphash算法得到哈希键值对的value值;
s4、数据存取:
s41、存数据:以键值对为元素添加节点,根据value值插入节点到哈希表相应位置;
s42、取数据:根据value值在哈希表中查找到元素,取出key即为设备id。
按以上技术方案,所述步骤s12中,以指向节点的指针为链表头指针,以指向头指针的指针为哈希表指针,同时在成员变量中有表示散列地址长度的变量即数组的长度。
按以上技术方案,步骤s41中,通过aphash算法得到散列值nhash,分配一个节点,把key和value存入节点,并把节点添加到链表之中。
按以上技术方案,查找时先用key计算出是哪个链表,之后遍历链表,把key值与链表中的节点key值一一比较,即可找到数据点。
一种基于哈希算法的电力设备数据存取系统,其特征在于:其包括电力设备数据、哈希表、主数据库和实时数据库,所述电力设备数据分别存入哈希表和实时数据库中,取数据时利用哈希表一次性找到数据。
按以上技术方案,所述主数据库中建立有与电力设备信息相关的表,包括设备表、信号表、连接表。
按以上技术方案,在所述设备表中以设备id为主键,其它表与设备表相关联,从而建立了以设备id为标志符,以设备id为查找条件可以查找到关于设备所有信息的存取体系。
按以上技术方案,所述实时数据库建立在内存中,绕过访问数据库的过程,可以实现数据的快速读取。
按以上技术方案,所述哈希表包括设备哈希表,遥测哈希表和遥信哈希表。
按以上技术方案,各类哈希表建立一个子类,子类继承哈希算法具体实现中的父类,在子类中增添各个类特有的属性,以类的对象实例分配内存。
对比现有技术,本发明的有益特点为:为了解决大数据存取的问题,设计了这种基于哈希算法的存取系统,本发明引入哈希表和实时数据库,把数据分别存入哈希表和实时数据库中,在系统取数据时利用哈希表的查找便捷性一次性找到数据,大大提高了查找速度,保证了系统的实时性和运行效率。
附图说明
图1为本发明实施例的数据存取系统架构示意图;
图2为本发明实施例的数据存取方法流程示意图;
图3为本发明实施例的各类哈希表示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图和具体实施例对本发明作进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在下文中,将参考附图来更好地理解本发明的许多方面。附图中的部件未必按照比例绘制。替代地,重点在于清楚地说明本发明的部件。此外,在附图中的若干视图中,相同的附图标记指示相对应零件。
如本文所用的词语“示例性”或“说明性”表示用作示例、例子或说明。在本文中描述为“示例性”或“说明性”的任何实施方式未必理解为相对于其它实施方式是优选的或有利的。下文所描述的所有实施方式是示例性实施方式,提供这些示例性实施方式是为了使得本领域技术人员做出和使用本公开的实施例并且预期并不限制本公开的范围,本公开的范围由权利要求限定。在其它实施方式中,详细地描述了熟知的特征和方法以便不混淆本发明。出于本文描述的目的,术语“上”、“下”、“左”、“右”、“前”、“后”、“竖直”、“水平”和其衍生词将与如图1定向的发明有关。而且,并无意图受到前文的技术领域、背景技术、发明内容或下文的详细描述中给出的任何明示或暗示的理论限制。还应了解在附图中示出和在下文的说明书中描述的具体装置和过程是在所附权利要求中限定的发明构思的简单示例性实施例。因此,与本文所公开的实施例相关的具体尺寸和其他物理特征不应被理解为限制性的,除非权利要求书另作明确地陈述。
本发明中使用到的技术有:哈希表技术,哈希表是根据设定的哈希函数h(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。
通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名,也称为“消息摘要”。
拉链法就是把具有相同散列地址的关键字(同义词)值放在同一个单链表中,称为同义词链表。有m个散列地址就有m个链表,同时用指针数组t[0..m-1]存放各个链表的头指针,凡是散列地址为i的记录都以结点方式插入到以t[i]为指针的单链表中。t中各分量的初值应为空指针。这种方法的基本思想就是选择足够大的m,使得所有链表都尽可能短以保证高效的查找。查找分两步:首先根据hash值找到对应的链表,然后沿着链表顺序查找对应的键。
在本系统中哈希函数采用aphash算法,这种算法基于对字符编码的迭代运算,可以很好地解决冲突,由于设备id是设备的唯一标志符,以id为key值,经过哈希运算后得到value值,以value值为哈希数组的位置符,锁定链表的位置,并依次向链表中增添节点,即可把key值散列到整个哈希表中。
1)构建哈希表
首先构建链表,以key和value为元素,建立链表节点;
以上一步构建的链表为元素,构建哈希表,以指向节点的指针为链表头指针,同时以指向头指针的指针为哈希表指针,同时在成员变量中有表示散列地址长度的变量即数组的长度。在结构体中声明增删改查的各个函数,在外部调用时只需以哈希指针定位,直接调用类中的函数。
2)aphash算法
aphash算法,这种算法基于对字符编码的迭代运算,可以很好地解决冲突。不断取key值的低位与计算后的值异或,最后与数组长度取余,即得到hash值。
3)数据存取
在得到value值后即定位链表在哈希数组中的位置,通过aphash算法得到散列值nhash,分配一个节点,把key和value存入节点,并把节点添加到链表之中即可。
查找时先用key算出是哪个链表,之后遍历链表,把key值与链表中的节点key值一一比较,即可找到数据点。
参照图1至图3,本发明公开了一种基于哈希算法的电力设备数据存取方法,其不同之处在于,其步骤包括:
s1、构建哈希表:
s11、构建链表,以key和value为元素,建立存储哈希键值对的节点;
s12、以步骤s11中构建的链表为元素,构建哈希表;
s2、取设备id,以设备id为哈希键值对的key值;
s3、使用aphash算法得到哈希键值对的value值;
s4、数据存取:
s41、存数据:以键值对为元素添加节点,根据value值插入节点到哈希表相应位置;
s42、取数据:根据value值在哈希表中查找到元素,取出key即为设备id。
具体的,所述步骤s12中,以指向节点的指针为链表头指针,以指向头指针的指针为哈希表指针,同时在成员变量中有表示散列地址长度的变量即数组的长度。
优选的,步骤s41中,通过aphash算法得到散列值nhash,分配一个节点,把key和value存入节点,并把节点添加到链表之中。
具体的,查找时先用key计算出是哪个链表,之后遍历链表,把key值与链表中的节点key值一一比较,即可找到数据点。
一种基于哈希算法的电力设备数据存取系统,其特征在于:其包括电力设备数据、哈希表、主数据库和实时数据库,所述电力设备数据分别存入哈希表和实时数据库中,取数据时利用哈希表一次性找到数据。
主数据库建设:在mysql数据库中建立设备表,信号表,连接表等有关电力设备信息的表,在设备表中以设备id为主键,其它表与设备表相关联,从而建立了以设备id为标志符,以设备id为查找条件可以查找到关于设备所有信息的存取体系。
实时数据库建设:实时数据库建立在内存中,绕过访问数据库的过程,可以实现数据的快速读取。在本系统中对应数据库建立各个结构体,用指针分配内存,把数据填入结构体指针中,在系统启动后会对实时库进行初始化。与哈希表相比,实时数据库的查询更慢,但是保存的数据可以更多,所以在本系统中作为对哈希表的补充,对于一些不会频繁访问的数据保存在实时数据库中。
哈希表建设:由于在电力系统中会对设备和设备信号进行大量和高频的访问,所以把这部分数据存入哈希表,将建立多张哈希表,主要包括设备哈希表,遥测哈希表和遥信哈希表,各类哈希表建立一个子类,子类继承哈希算法具体实现中的父类cint64hash,在子类中增添各个类特有的属性,以类的对象实例分配内存。
优选的,所述主数据库中建立有与电力设备信息相关的表,包括设备表、信号表、连接表。
具体的,在所述设备表中以设备id为主键,其它表与设备表相关联,从而建立了以设备id为标志符,以设备id为查找条件可以查找到关于设备所有信息的存取体系。
具体的,所述实时数据库建立在内存中,绕过访问数据库的过程,可以实现数据的快速读取。
优选的,所述哈希表包括设备哈希表,遥测哈希表和遥信哈希表。
具体的,各类哈希表建立一个子类,子类继承哈希算法具体实现中的父类,在子类中增添各个类特有的属性,以类的对象实例分配内存。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。