基于Cuckoo哈希计算的数据存储优化方法及系统与流程

文档序号:11514655阅读:199来源:国知局
基于Cuckoo哈希计算的数据存储优化方法及系统与流程

本发明属于计算机存储技术领域,更具体地,涉及一种基于cuckoo哈希计算的数据存储优化方法及系统。



背景技术:

随着近年来互联网、云计算、物联网、社交媒体以及其他信息技术的迅速发展,各行各业积累的数据都呈现出爆炸式增长趋势。例如,facebook每天处理的数据超过500tb,阿里巴巴拥有的数据量超过100pb,新浪微博用户数超过5亿,每天产生的微博数超过1亿条等,许多商业公司通常每天要处理tb级甚至pb级的数据。根据国际数据公司(internationaldatacorporation,idc)2014年的报告,全球产生的数据总量每两年翻一番,在2020年将达到44zb。

大数据时代的到来给海量数据的管理带来了新的挑战和契机。其中,大数据(尤其是非结构化数据)的快速检索作为一个非常关键的问题亟待解决。在云计算系统中,大量资源被用于支持查询相关的操作,例如计算资源、存储资源以及网络资源,然而对于查询请求如何快速返回精确结果仍然是一个巨大的挑战。为了提高系统性能和整体效率,目前也有许多改进工作,例如对加密云数据的多关键字查询,对并行数据处理的查询优化,利用分层bloomfilter索引加速查询,利用持续监控过程优化查询,对云数据的近似成员查询,文件系统中的近似查询,对云数据的分类查询检索,查询服务的自动管理等等。但是由于这些方法具有空间效率不高以及高复杂度的分层寻址的缺点,它们都无法满足实时查询的需求。

基于哈希的数据结构具有常数级寻址复杂度和快速查询响应的特性,它在查询的实时性和准确性方面优势显著,成为为解决大数据管理的关键技术之一。

cuckoo哈希是多选择哈希机制的一个有效变体。在cuckoo哈希机制中,每一个元素能够被放置在哈希表中多个备选哈希桶的任一位置。当多个备选位置都被其他元素占据(不为空)时,该元素任意踢出某一个桶中存在的元素,而不是直接返回插入失败或者通过链表存储。被踢出的元素接着执行相同操作,直到所有的元素都找到存储的位置。相比于传统哈希表中只使用一个哈希函数的情况,cuckoo哈希这种机制能够确保数据的均匀分布。由于这种常数级复杂度的扁平化寻址的特性,在查询操作中只需要探测哈希表一次就可以得到查询结果。在最坏情况下,每次至多探测被查询元素的所有候选位置,因此确保了常数级的查询时间复杂度。

然而在索引表构建过程中,传统的cuckoo哈希方法中在元素的候选位置中随机选择一个位置进行插入与移动。当元素所有候选位置都被占据时,这种随机选择更加剧了哈希寻址的不确定性。在踢出操作中,这种随机选择方案可能会造成踢出路径的重复甚至无限循环,产生大量无效的踢出操作,这将导致元素插入操作中的高时延。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明的目的在于提供了一种基于cuckoo哈希计算的数据存储优化方法及系统,由此解决现有的云存储系统中构建基于cuckoo哈希索引表时元素插入所导致的踢出路径无限循环的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种基于cuckoo哈希计算的数据存储优化方法,包括以下步骤:

s1、根据元素属性随机选择两个相互独立的哈希函数计算得到元素在索引表中对应的两个候选哈希桶;

s2、根据元素所对应的两个候选哈希桶是否属于cuckoo图,对元素进行分类,其中,v+0类表示元素所对应的两个候选哈希桶都在cuckoo图中,插入元素不会造成cuckoo图节点数增加;v+1类表示元素所对应的两个候选哈希桶只有一个存在于cuckoo图中,插入元素会使cuckoo图节点数加1;v+2类表示元素所对应的两个候选桶之前都没有被加入cuckoo图中,插入元素会使cuckoo图节点数加2;

s3、对于cuckoo图中的每个子图,若插入元素后子图中的边数等于节点数,则该子图有且只有一个回路,并将该子图称为满载子图;若插入元素后子图中的边数不等于节点数,则将该子图称为非满载子图,其中,在cuckoo图中,将索引表中每个桶看作是图的一个节点,将索引表中每个元素看作是图的一条边;

s4、若元素的两个候选哈希桶对应的两个节点所属的子图为满载子图,则在子图中元素插入导致的踢出路径会形成回路导致无限循环,预测插入操作一定失败;若元素的两个候选哈希桶对应的两个节点所属的子图中有非满载子图,则在非满载子图中一定存在一个空位,经过有限次踢出操作时,所有元素都将插入索引表中,预测插入操作一定成功,其中,两个候选哈希桶对应的两个节点属于相同子图或者两个候选哈希桶对应的两个节点属于不同子图;

s5、若预测插入操作失败,则将元素存入临时空间,不进行任何踢出操作;若预测插入操作成功,则根据cuckoo哈希机制执行元素插入操作。

优选地,步骤s2具体包括以下子步骤:

s2.1、判断两个候选哈希桶是否都已经存在于cuckoo图中,若都存在,则该元素属于v+0类,否则执行步骤s2.2;

s2.2、判断是否有一个候选哈希桶存在于cuckoo图中,若是,则该元素属于v+1类,否则该元素属于v+2类。

优选地,步骤s4具体包括以下子步骤:

s4.1、判断两个候选哈希桶是否属于同一子图,若是则执行步骤s4.2;否则执行步骤s4.3;

s4.2、判断该子图是否为满载子图,若是满载子图,则预测插入一定失败,若是非满载子图,则预测插入一定成功;

s4.3、判断两个子图是否都满载,若两个子图均是满载子图,则预测插入一定失败,否则预测插入一定成功。

优选地,步骤s5具体包括以下子步骤:

s5.1、判断元素是否属于v+0类,若是则任选一个对应非满载子图的候选哈希桶,然后执行步骤s5.2,否则执行步骤s5.4;

s5.2、判断该候选哈希桶是否被其他元素占据,若没有则将该元素直接插入该候选哈希桶,并将该候选哈希桶对应子图的边数加1;若有元素占据,则执行步骤s5.3;

s5.3、哈希计算得到该位置所占据元素的另一个候选哈希桶,再将待插入元素插入该候选哈希桶,将原有元素踢出成为待插入元素,并返回步骤s5.2继续执行;

s5.4、判断该元素是否属于v+1类,若是则将该元素插入对应子图新增节点所对应的哈希桶中,并将对应子图的节点数加1以及对应子图的边数加1;否则,该元素属于v+2类型,分配一个新的子图号,直接将元素插入任一新增节点的对应桶中,再设置新子图的节点数为2,边数为1。

按照本发明的另一方面,提供了一种基于cuckoo哈希计算的数据存储优化系统,包括:

哈希值计算模块,用于根据元素属性随机选择两个相互独立的哈希函数计算得到元素在索引表中对应的两个候选哈希桶;

元素分类模块,用于根据元素所对应的两个候选哈希桶是否属于cuckoo图,对元素进行分类,其中,v+0类表示元素所对应的两个候选哈希桶都在cuckoo图中,插入元素不会造成cuckoo图节点数增加;v+1类表示元素所对应的两个候选哈希桶只有一个存在于cuckoo图中,插入元素会使cuckoo图节点数加1;v+2类表示元素所对应的两个候选桶之前都没有被加入cuckoo图中,插入元素会使cuckoo图节点数加2;

子图判断模块,用于对于cuckoo图中的每个子图,若插入元素后子图中的边数等于节点数,则该子图有且只有一个回路,并将该子图称为满载子图;若插入元素后子图中的边数不等于节点数,则将该子图称为非满载子图,其中,在cuckoo图中,将索引表中每个桶看作是图的一个节点,将索引表中每个元素看作是图的一条边;

结果预测模块,用于在元素的两个候选哈希桶对应的两个节点所属的子图为满载子图时,则在子图中元素插入导致的踢出路径会形成回路导致无限循环,预测插入操作一定失败;若元素的两个候选哈希桶对应的两个节点所属的子图中有非满载子图,则在非满载子图中一定存在一个空位,经过有限次踢出操作时,所有元素都将插入索引表中,预测插入操作一定成功,其中,两个候选哈希桶对应的两个节点属于相同子图或者两个候选哈希桶对应的两个节点属于不同子图;

操作执行模块,用于在预测插入操作失败时,则将元素存入临时空间,不进行任何踢出操作;若预测插入操作成功,则根据cuckoo哈希机制执行元素插入操作。

优选地,所述元素分类模块包括:

第一判断模块,用于判断两个候选哈希桶是否都已经存在于cuckoo图中;

第一元素分类模块,用于在两个候选哈希桶都已经存在于cuckoo图中时,确定该元素属于v+0类;

第二判断模块,用于在两个候选哈希桶不是都已经存在于cuckoo图中时,判断是否有一个候选哈希桶存在于cuckoo图中;

第二元素分类模块,用于在有一个哈希桶存在于cuckoo图中时,确定该元素属于v+1类,否则确定该元素属于v+2类。

优选地,所述结果预测模块包括:

第三判断模块,用于判断两个候选哈希桶是否属于同一子图;

第一预测模块,用于在两个候选哈希桶属于同一子图时,判断该子图是否为满载子图,若是满载子图,则预测插入一定失败,若是非满载子图,则预测插入一定成功;

第二预测模块,用于在两个候选哈希桶不是属于同一子图时,判断两个子图是否都满载,若两个子图均是满载子图,则预测插入一定失败,否则预测插入一定成功。

优选地,所述操作执行模块包括:

第四判断模块,用于判断元素是否属于v+0类;

第一操作执行模块,用于在元素属于v+0类时,任选一个对应非满载子图的候选哈希桶,判断该候选哈希桶是否被其他元素占据,若没有则将该元素直接插入该候选哈希桶,并将该候选哈希桶对应子图的边数加1;

第二操作执行模块,用于在任选的候选哈希桶被其他元素占据时,哈希计算得到该位置所占据元素的另一个候选哈希桶,再将待插入元素插入该候选哈希桶,将原有元素踢出成为待插入元素,并返回继续执行所述第一操作执行模块的操作;

第三操作执行模块,用于在元素不是属于v+0类时,判断该元素是否属于v+1类,若是则将该元素插入对应子图新增节点所对应的哈希桶中,并将对应子图的节点数加1以及对应子图的边数加1;否则,该元素属于v+2类型,分配一个新的子图号,直接将元素插入任一新增节点的对应桶中,再设置新子图的节点数为2,边数为1。

总体而言,本发明方法与现有技术方案相比,能够取得下列有益效果:

解决云存储系统中构建基于cuckoo哈希的索引表的无限循环问题,其通过在元素实际插入前通过哈希计算识别其所属的一个或两个子图;再根据子图状态预测插入结果;最后根据预测结果执行插入操作或者直接存入临时空间,可以避免无效的踢出操作,提高了数据存储效率。

本发明利用cuckoo哈希机制将海量数据扁平化哈希到整个索引表中,利用索引表来维护元素位置,记录并通过对元素分类精确预测是否会产生无限循环,满足快速查询需求的同时提高索引构建性能。

附图说明

图1为本发明实施例公开的一种基于cuckoo哈希计算的数据存储优化方法的流程示意图;

图2为本发明实施例公开的一种元素分类方法的流程示意图;

图3为本发明实施例公开的一种结果预测的方法流程示意图;

图4为本发明实施例公开的一种操作执行的方法流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

本发明为云存储系统中基于cuckoo哈希计算的海量数据存储优化方法,其利用有向图来维护元素位置记录并通过对元素分类精确预测是否会产生无限循环,满足快速查询需求的同时提高索引构建性能。

如图1所示为本发明实施例公开的一种基于cuckoo哈希计算的数据存储优化方法的流程示意图,在图1所示的方法中包括以下步骤:

s1、计算哈希值:根据元素属性随机选择两个相互独立的哈希函数计算得到元素在索引表中对应的两个候选哈希桶;

s2、元素分类:根据元素所对应的两个候选哈希桶是否属于cuckoo图,对元素进行分类,其中,v+0类表示元素所对应的两个候选哈希桶都在cuckoo图中,插入元素不会造成cuckoo图节点数增加;v+1类表示元素所对应的两个候选哈希桶只有一个存在于cuckoo图中,插入元素会使cuckoo图节点数加1;v+2类表示元素所对应的两个候选桶之前都没有被加入cuckoo图中,插入元素会使cuckoo图节点数加2;

优选地,如图2所示为本发明实施例公开的一种如何实现元素分类的流程示意图,具体包括以下子步骤:

s2.1、判断两个候选哈希桶是否都已经存在于cuckoo图中,若都存在,则该元素属于v+0类,否则执行步骤s2.2;

s2.2、判断是否有一个候选哈希桶存在于cuckoo图中,若是,则该元素属于v+1类,否则该元素属于v+2类。

s3、子图判断:若插入元素后,则cuckoo图的总边数加1,若元素属于v+0类,则cuckoo图的总节点数不变,若元素属于v+1类,则cuckoo图的总节点数增加1,若元素属于v+2类,则cuckoo图的总节点数增加2,因此,cuckoo图中每个子图至多存在一个回路;若子图中的边数等于节点数,则该子图有且只有一个回路,并将该子图称为满载子图;若子图边数不等于节点数,则将该子图称为非满载子图,其中,在cuckoo图中,将索引表中每个桶看作是图的一个节点,将索引表中每个元素看作是图的一条边;

s4、结果预测:若元素的两个候选哈希桶对应的两个节点所属的子图为满载子图,则在子图中元素插入导致的踢出路径会形成回路导致无限循环,预测插入操作一定失败;若元素的两个候选哈希桶对应的两个节点所属的子图中有非满载子图,则子图中一定存在一个空位,经过有限次踢出操作时,所有元素都将插入索引表中,预测插入操作一定成功,其中,两个候选哈希桶对应的两个节点属于相同子图或者两个候选哈希桶对应的两个节点属于不同子图;

优选地,如图3所示为本发明实施例公开的一种如何实现结果预测的方法流程示意图;具体包括以下子步骤:

s4.1、判断两个候选哈希桶是否属于同一子图,若是则执行步骤s4.2;否则执行步骤s4.3;

s4.2、判断该子图是否为满载子图,若是满载子图,则预测插入一定失败,若是非满载子图,则预测插入一定成功;

s4.3、判断两个子图是否都满载,若两个子图均是满载子图,则预测插入一定失败,否则预测插入一定成功。

s5、操作执行:若预测插入操作失败,则将元素存入临时空间,不进行任何踢出操作;若预测插入操作成功,则根据cuckoo哈希机制执行元素插入操作。

优选地,如图4所示为本发明实施例公开的一种如何实现操作执行的方法流程示意图;具体包括以下子步骤:

s5.1、判断元素是否属于v+0类,若是则任选一个对应非满载子图的候选哈希桶,然后执行步骤s5.2,否则执行步骤s5.4;

s5.2、判断该候选哈希桶是否被其他元素占据,若没有则将该元素直接插入该候选哈希桶,并将该候选哈希桶对应子图的边数加1;若有元素占据,则执行步骤s5.3;

s5.3、哈希计算得到该位置所占据元素的另一个候选哈希桶,再将待插入元素插入该候选哈希桶,将原有元素踢出成为待插入元素,并返回步骤s5.2继续执行;

s5.4、判断该元素是否属于v+1类,若是则将该元素插入对应子图新增节点所对应的哈希桶中,并将对应子图的节点数加1以及对应子图的边数加1;否则,该元素属于v+2类型,分配一个新的子图号,直接将元素插入任一新增节点的对应桶中,再设置新子图的节点数为2,边数为1。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1