掌桥专利:专业的专利平台
掌桥专利
首页

一种动态哈希方法、装置、设备及存储介质

文献发布时间:2023-06-19 10:08:35


一种动态哈希方法、装置、设备及存储介质

技术领域

本发明涉及哈希技术领域,更具体地说,涉及一种动态哈希方法、装置、设备及存储介质。

背景技术

哈希(Hash)能将任意长度的消息压缩到某一固定长度的消息摘要。在利用哈希算法实现记录查询时,通常是在哈希表中存储需要访问的记录,利用相应的哈希函数对用于实现记录查询的关键值进行计算得到对应的哈希值,然后在哈希表中查询该哈希值对应的位置处的记录,也即为需要访问的记录;但是,常规静态的哈希(hash)算法不会随着用户环境变化而优化,因此存在不同环境下同一种哈希算法因效率不同从而影响所属程序的程序运行效率的问题。

发明内容

本发明的目的是提供一种动态哈希方法、装置、设备及存储介质,能够提高哈希算法的效率,进而提高哈希算法所属程序的程序运行效率。

为了实现上述目的,本发明提供如下技术方案:

一种动态哈希方法,包括:

获取历史上访问待更新的原哈希表的历史数据,并基于所述历史数据确定历史上访问位于所述原哈希表中相应记录的频率;

基于高于频率阈值的频率对应记录生成相应哈希函数,以基于生成的哈希函数访问频率高于频率阈值的记录时发生哈希冲突的可能性最低;

创建与生成的哈希函数对应的哈希表,并按照生成的哈希函数,将所述原哈希表中包含的各记录均插入至生成的哈希表中;

利用生成的哈希表替换所述原哈希表,并利用生成的哈希函数替换所述原哈希表对应的哈希函数。

优选的,按照生成的哈希函数,将所述原哈希表中包含的各记录均插入至生成的哈希表中,包括:

如果存在多个记录基于生成的哈希函数得到的哈希值相同,则确定对应于同一哈希值的多个记录属于生成的哈希表中的同一个桶,并按照所述频率越高在对应桶中位置越前的原则,将对应于同一哈希值的多个记录插入至所述哈希表的对应桶中。

优选的,还包括:

在将所述原哈希表中包含的各记录均插入至生成的哈希表中的过程中,如果接收到用户发送的信息请求,则在生成的哈希表中查询与所述信息请求对应的记录,如果查找成功,则将查找到的记录返回给所述用户,否则,在所述原哈希表中查询与所述信息请求对应的记录。

优选的,利用生成的哈希表替换所述原哈希表之后,还包括:

回收所述原哈希表,并清理所述原哈希表对应的缓存。

优选的,获取历史上访问待更新的原哈希表的历史数据之前,还包括:

监控主机CPU、内存、原哈希表的状态及原哈希表的性能,如果监控到所述主机CPU包含的空闲资源少于预设资源、和/或所述内存包含的存储空间少于预设空间、和/或所述原哈希表包含的记录数量大于记录阈值、和/或所述原哈希表的查询效率低于效率阈值,则执行获取历史上访问待更新的原哈希表的历史数据的步骤。

优选的,还包括:

定时收集当前时刻之前预设时间段内访问待更新的原哈希表的历史数据,并将收集的历史数据存储到内存或者文件中,以供获取。

优选的,回收所述原哈希表之前,还包括:

输出是否回收所述原哈希表的选项,如果接收外界基于所述选项输入的回收指令,则执行回收所述原哈希表的步骤,否则,将所述原哈希表转移至指定位置保存。

一种动态哈希装置,包括:

获取模块,用于:获取历史上访问待更新的原哈希表的历史数据,并基于所述历史数据确定历史上访问位于所述原哈希表中相应记录的频率;

生成模块,用于:基于高于频率阈值的频率对应记录生成相应哈希函数,以基于生成的哈希函数访问频率高于频率阈值的记录时发生哈希冲突的可能性最低;

创建模块,用于:创建与生成的哈希函数对应的哈希表,并按照生成的哈希函数,将所述原哈希表中包含的各记录均插入至生成的哈希表中;

替换模块,用于:利用生成的哈希表替换所述原哈希表,并利用生成的哈希函数替换所述原哈希表对应的哈希函数。

一种动态哈希设备,其特征在于,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上任一项所述动态哈希方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述动态哈希方法的步骤。

本发明提供了一种动态哈希方法、装置、设备及存储介质,该方法包括:获取历史上访问待更新的原哈希表的历史数据,并基于所述历史数据确定历史上访问位于所述原哈希表中相应记录的频率;基于高于频率阈值的频率对应记录生成相应哈希函数,以基于生成的哈希函数访问频率高于频率阈值的记录时发生哈希冲突的可能性最低;创建与生成的哈希函数对应的哈希表,并按照生成的哈希函数,将所述原哈希表中包含的各记录均插入至生成的哈希表中;利用生成的哈希表替换所述原哈希表,并利用生成的哈希函数替换所述原哈希表对应的哈希函数。本申请公开的技术方案中,基于用户历史上访问原哈希表中记录的数据确定出用户历史上访问对应记录的频率,确定出用户最常访问的记录后,生成访问这些记录时发生哈希冲突可能性最低的哈希函数,并生成新的哈希表,将原哈希表中的记录按照哈希函插入至新的哈希表中,最终利用新的哈希函数及新的哈希表替换原哈希函数及原哈希表;从而基于不同环境下用户访问记录的情况实现哈希算法的动态更新,使得在相应环境下用户最常访问的记录在动态更新哈希算法后,实现访问时存在哈希冲突的可能性最低,提高哈希算法的效率,进而提高哈希算法所属程序的程序运行效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种动态哈希方法的流程图;

图2为本发明实施例提供的一种动态哈希方法的实现示意图;

图3为本发明实施例提供的一种动态哈希方法中历史记录模块的功能实现示意图;

图4为本发明实施例提供的一种动态哈希方法中哈希算法生成模块的功能实现示意图;

图5为本发明实施例提供的一种动态哈希方法中哈希替换模块的功能实现示意图;

图6为本发明实施例提供的一种动态哈希装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,其示出了本发明实施例提供的一种动态哈希方法的流程图,可以包括:

S11:获取历史上访问待更新的原哈希表的历史数据,并基于历史数据确定历史上访问位于原哈希表中相应记录的频率。

本发明实施例提供的一种动态哈希方法的执行主体可以为对应的动态哈希装置。其中,对哈希算法进行更新包括对哈希函数及哈希表的更新,哈希函数为需要对用于实现记录查询的关键值进行计算以得到其哈希值(哈希值与需要查询的记录在哈希表中的位置相对应)的函数,哈希表为存储有需要查询的记录的表,记录则为需要查询的数据;本申请实施例中原哈希表为需要更新的哈希表,原哈希表对应的哈希函数则为需要更新的哈希函数。具体来说,在需要实现哈希算法的更新时,可以获取历史上访问原哈希表的历史数据,历史数据可以为获取的用户侧(用户环境)的数据,其包含在当前时刻之前的时间(也即历史上)访问的位于原哈希表中的记录及次数,该次数则为访问相应记录的频率,如果该频率越高,则说明访问相应记录越频繁,也即相应记录越可能为用户常需访问的记录。

S12:基于高于频率阈值的频率对应记录生成相应哈希函数,以基于生成的哈希函数访问频率高于频率阈值的记录时发生哈希冲突的可能性最低。

频率阈值可以为根据实际需要设定的值,如果访问任意记录的频率高于频率阈值,则说明访问该任意记录较为频繁,该任意记录为用户常需访问的数据;基于高于频率阈值的频率所属记录及哈希函数的原理,可以生成相应的低冲突哈希函数(即为新的哈希函数),而低冲突哈希函数则为在利用哈希函数计算所得哈希值访问高于频率阈值的频率所属记录时,存在的哈希冲突最低。其中,哈希冲突与现有技术中对应概念的含义相同,也即不同记录对应的哈希值相同,此时这些记录应属于哈希表中的同一位置。

S13:创建与生成的哈希函数对应的哈希表,并按照生成的哈希函数,将原哈希表中包含的各记录均插入至生成的哈希表中。

在生成新的哈希函数之后,还需要创建与新的哈希函数相对应的哈希表,也即为新的哈希表;具体来说,创建的新的哈希表为不包含任何记录的哈希表,然后再将遍历原哈希表中的各项记录,将其全部插入至新的哈希表中。其中,在将原哈希表中的各项记录插入至新的哈希表中时,是按照新的哈希函数实现的,也就是说,在确定出新的哈希函数之后,可以确定原哈希表中每项记录与新的哈希函数相对应的哈希值,而该哈希值则对应记录在新的哈希表中的位置,因此,在将原哈希表中的记录插入至新的哈希表中时,则是先确定与原哈希表中任意记录与新的哈希函数对应的哈希值,然后将该任意记录插入至新的哈希表中与确定出的哈希值相对应的位置,从而实现原哈希表中全部记录至新的哈希表中的插入。

S14:利用生成的哈希表替换原哈希表,并利用生成的哈希函数替换原哈希表对应的哈希函数。

利用新的哈希表替换原哈希表,利用新的哈希函数替换原哈希表对应的哈希函数(本申请实施例中可以称之为原哈希函数),从而基于用户访问记录的历史数据实现动态哈希。

本申请公开的技术方案中,基于用户历史上访问原哈希表中记录的数据确定出用户历史上访问对应记录的频率,确定出用户最常访问的记录后,生成访问这些记录时发生哈希冲突可能性最低的哈希函数,并生成新的哈希表,将原哈希表中的记录按照哈希函插入至新的哈希表中,最终利用新的哈希函数及新的哈希表替换原哈希函数及原哈希表;从而基于不同环境下用户访问记录的情况实现哈希算法的动态更新,使得在相应环境下用户最常访问的记录在动态更新哈希算法后,实现访问时存在哈希冲突的可能性最低,提高哈希算法的效率,进而提高哈希算法所属程序的程序运行效率。

本发明实施例提供的一种动态哈希方法,按照生成的哈希函数,将原哈希表中包含的各记录均插入至生成的哈希表中,可以包括:

如果存在多个记录基于生成的哈希函数得到的哈希值相同,则确定对应于同一哈希值的多个记录属于生成的哈希表中的同一个桶,并按照频率越高在对应桶中位置越前的原则,将对应于同一哈希值的多个记录插入至哈希表的对应桶中。

本申请实施例可以为新的哈希表中每个位置设置一个桶,由此,当多个记录与新的哈希函数对应的哈希值相同,也即这多个记录在新的哈希表中的位置应相同时,可以将这些应在相同位置的记录存放在该位置的桶中,而对于在同一桶中的记录,在实现查询时是通过遍历该桶中的记录实现的,因此,在桶中记录的位置越靠前,越先被遍历查询到;基于此,本申请对于应位于同一桶中的记录,在实现这些记录向新的哈希表的插入时,可以按照频率越高则位置越靠前的方式进行记录的存放,从而进一步提高哈希算法的效率。

需要说明的是,用户侧的数据在一定时间和空间内具有较高的特征性能,例如:基于IP的哈希算法在用户侧使用的IP不是全段IP,而是特点IP段的IP数据,在一定时间与空间内哈希输入IP不会发生改变;基于游戏内部物品调度的哈希算法,当用户运行游戏游玩时,每个用户都因各自相关与偏爱对游戏内部的物品使用不同的倾向。基于此,对本申请实现哈希算法进行动态更新进行举例说明,如基于IP的哈希算法,在用户侧收集用户的历史数据以分析得到用户的网段信息,剔除网段信息中不变的网络位信,对网段信息中的主机位进行哈希,也即将最常进行通信的IP以最低冲突哈希函数对应的哈希值实现在哈希表中的存放,并且将经常进行通信的IP存放到哈希表中对应桶靠前的位置,使得用户再次哈希时大概率情况下一次命中数据,提高程序运行效率;再如基于游戏内部的哈希算法,通过记录用户的物品标识id(如编号等)分析用户经常使用的物品的物品标识id,取最常用的前50%物品的物品标识id进行低冲突哈希算法生成,并且将用户使用靠前的物品标识id的哈希优先排序,减小程序在用户常规操作的响应时间。

本发明实施例提供的一种动态哈希方法,还可以包括:

在将原哈希表中包含的各记录均插入至生成的哈希表中的过程中,如果接收到用户发送的信息请求,则在生成的哈希表中查询与信息请求对应的记录,如果查找成功,则将查找到的记录返回给用户,否则,在原哈希表中查询与信息请求对应的记录。

需要说明的是,在将原哈希表中包含的各项记录插入至新的哈希表的过程中,如果接收到用户发送的信息请求,也即为查询相应记录的请求,则优先在新的哈希表中查询与信息请求对应的记录,如果能够查询成功,则无需再查询原哈希表,如果查询失败,则由原哈希表中查询与信息请求对应的记录,在查询成功后返回给用户,并在查询失败后返回给用户查询失败的信息;可见,本申请在实现哈希动态更新的过程中,结合原哈希表及新的哈希表实现相应记录的查询,从而降低在实现哈希动态更新过程中对所属程序及对用户查询行为的影响。

本发明实施例提供的一种动态哈希方法,利用生成的哈希表替换原哈希表之后,还可以包括:

回收原哈希表,并清理原哈希表对应的缓存。

其中,在实现新的哈希表对原哈希表的替换之后,也即将原哈希表中全部记录均插入新的哈希表中之后,可以回收原哈希表,并清理原哈希表对应的缓存,从而避免已经无需使用的原哈希表对存储空间的占用。

本发明实施例提供的一种动态哈希方法,获取历史上访问待更新的原哈希表的历史数据之前,还可以包括:

监控主机CPU、内存、原哈希表的状态及原哈希表的性能,如果监控到主机CPU包含的空闲资源少于预设资源、和/或内存包含的存储空间少于预设空间、和/或原哈希表包含的记录数量大于记录阈值、和/或原哈希表的查询效率低于效率阈值,则执行获取历史上访问待更新的原哈希表的历史数据的步骤。

其中,主机CPU为哈希算法所属程序所在的主机包含的CPU,内存为该主机包含的内存,原哈希表的状态包括原哈希表中包含的记录的数量,原哈希表的性能为在指定的一段时间内的查询效率,查询效率则为在指定的一段时间内访问哈希表中的记录的总的次数,与每次访问哈希表中的记录时所用时间的平均值的商,而预设资源、预设空间、记录阈值及效率阈值均是可以根据实际设定的。由于在实现哈希算法时需要使用主机CPU、内存,因此在两者均不足或者其中任意一者不足时为了减少对其的占用,则可以实现哈希算法的更新;另外,如果原哈希表中包含的记录过多和/或原哈希表的查询效率过低,则为了避免无法存在更多的记录以及提高原哈希表的查询效率,则可以实现哈希算法的更新。

另外,还可以在用户的环境发生变化时,则实现哈希算法的动态更新。需要说明的是,由于在收集用户的历史数据的过程会消耗部分存储空间,进行历史数据分析时也会占用一定的主机CPU与内存,因此在实现哈希动态更新的过程时也需要主机CPU的空闲资源及内存的存储空间均不过低(不低于相应的最低阈值)。

本发明实施例提供的一种动态哈希方法,还可以包括:

定时收集当前时刻之前预设时间段内访问待更新的原哈希表的历史数据,并将收集的历史数据存储到内存或者文件中,以供获取。

需要说明的是,本申请实施例可以每经过一定的时间间隔则收集当前时刻之前该时间间隔内用户的历史数据,具体可以包括源数据及目的数据,其中,源数据为需要实现记录查询时所用的关键值,或者称之为输入数据,而目的数据则为哈希完成后输出的数据,也即记录;将历史数据存储到内存或者文件中,再监控主机CPU、内存、hash表状态和hash表性能,从而在适当的时间获取最后一次收集的历史数据,再基于获取的历史数据实现哈希算法的动态更新。从而通过历史数据的定时收集,保证需要时能够快速获取到所需的历史数据,提高哈希算法动态更新的效率。

本发明实施例提供的一种动态哈希方法,回收原哈希表之前还可以包括:

输出是否回收原哈希表的选项,如果接收外界基于选项输入的回收指令,则执行回收原哈希表的步骤,否则,将原哈希表转移至指定位置保存。

其中,指定位置可以根据实际需要确定;需要说明的是,考虑到用户可能需要获取历史上每版哈希表的情况,本申请实施例还可以通过输出选项,在用户基于选项输入回收指令后,基于该回收指令确定是否需要实现原哈希表的回收,进一步提升了用户的用户体验。

在一种具体应用场景中,本发明实施例提供的一种动态哈希方法可以基于历史数据记录模块、哈希算法生成模块及哈希替换模块实现,这三个模块分别完成数据收集、数据分析、哈希替换三个功能,这三个模块联动从而产生基于用户侧数据的哈希算法的动态更新;其实现过程如图2所示,其中用户数据为用户历史数据。

如图3所示,历史记录模块收集包括源数据与目的数据的历史数据,整理历史数据的数据格式后,将历史数据记录到内存或文件,并监控当前主机cpu、内存、哈希表状态和哈希表性能(还可以包括硬盘灯),以在在适当的时间唤醒哈希算法生成模块。

如图4所示,哈希算法生成模块也可以称为分析模块,其是动态更新哈希算法的核心模块,通过分析用户的历史数据与哈希表性能,从而产生新的哈希算法(包括哈希函数及哈希表)。

如图5所示,哈希替换模块生成新的哈希函数及哈希表后,需要实现原哈希表(即图5中的老哈希表)及新的哈希表之间的替换;而根据新的哈希算法替换原有哈希算法,在替换过程中需要维护两个哈希表项,通过遍历老哈希表将节点插入到新的哈希表;用户在程序替换过程中优先查询新哈希表,当查询的节点(即记录)不存在时在查询老的哈希表,从而降低在替换过程中对程序的影响;替换完成后回收老哈希表并清理缓存。

本发明提供了一种解决不同环境同一种哈希算法效率不同从而影响程序运行效率问题的方法,其中的动态哈希是一种基于自优化编程思想的哈希算法,具体来说,当用户侧环境发生变换时,通过自动收集用户的历史数据并且在条件合适的情况下分析历史数据产生新的哈希算法替换原有哈希算法,从而基于历史数据动态更新哈希算法,无需人工干预,且能够较高匹配用户侧数据提高程序运行效率。

本发明实施例还提供了一种动态哈希装置,如图6所示,可以包括:

获取模块11,用于:获取历史上访问待更新的原哈希表的历史数据,并基于历史数据确定历史上访问位于原哈希表中相应记录的频率;

生成模块12,用于:基于高于频率阈值的频率对应记录生成相应哈希函数,以基于生成的哈希函数访问频率高于频率阈值的记录时发生哈希冲突的可能性最低;

创建模块13,用于:创建与生成的哈希函数对应的哈希表,并按照生成的哈希函数,将原哈希表中包含的各记录均插入至生成的哈希表中;

替换模块14,用于:利用生成的哈希表替换原哈希表,并利用生成的哈希函数替换原哈希表对应的哈希函数。

本发明实施例提供的一种动态哈希装置,创建模块可以包括:

插入单元,用于:如果存在多个记录基于生成的哈希函数得到的哈希值相同,则确定对应于同一哈希值的多个记录属于生成的哈希表中的同一个桶,并按照频率越高在对应桶中位置越前的原则,将对应于同一哈希值的多个记录插入至哈希表的对应桶中。

本发明实施例提供的一种动态哈希装置,还可以包括:

查询模块,用于:在将原哈希表中包含的各记录均插入至生成的哈希表中的过程中,如果接收到用户发送的信息请求,则在生成的哈希表中查询与信息请求对应的记录,如果查找成功,则将查找到的记录返回给用户,否则,在原哈希表中查询与信息请求对应的记录。

本发明实施例提供的一种动态哈希装置,还可以包括:

回收模块,用于:利用生成的哈希表替换原哈希表之后,回收原哈希表,并清理原哈希表对应的缓存。

本发明实施例提供的一种动态哈希装置,还可以包括:

监控模块,用于:获取历史上访问待更新的原哈希表的历史数据之前,监控主机CPU、内存、原哈希表的状态及原哈希表的性能,如果监控到主机CPU包含的空闲资源少于预设资源、和/或内存包含的存储空间少于预设空间、和/或原哈希表包含的记录数量大于记录阈值、和/或原哈希表的查询效率低于效率阈值,则执行获取历史上访问待更新的原哈希表的历史数据的步骤。

本发明实施例提供的一种动态哈希装置,还可以包括:

存储模块,用于:定时收集当前时刻之前预设时间段内访问待更新的原哈希表的历史数据,并将收集的历史数据存储到内存或者文件中,以供获取。

并将收集的历史数据记录到内存或者文件中,还可以包括:

输出模块,用于:回收原哈希表之前,输出是否回收原哈希表的选项,如果接收外界基于选项输入的回收指令,则执行回收原哈希表的步骤,否则,将原哈希表转移至指定位置保存。

本发明实施例还提供了一种动态哈希设备,可以包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如上任一项动态哈希方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可以实现如上任一项动态哈希方法的步骤。

需要说明的是,本发明实施例提供的一种动态哈希装置、设备及存储介质中相关部分的说明请参见本发明实施例提供的一种动态哈希方法中对应部分的详细说明,在此不再赘述。另外本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

相关技术
  • 一种动态哈希方法、装置、设备及存储介质
  • 面向区块链的动态哈希计算方法、装置、节点及存储介质
技术分类

06120112437327