[发明专利]一种关键数据结构的动态重构方法在审
申请号: | 202210685649.6 | 申请日: | 2022-06-16 |
公开(公告)号: | CN115098497A | 公开(公告)日: | 2022-09-23 |
发明(设计)人: | 王俊昌;刘敦伟;肖甫;樊卫北;何昕;田臣 | 申请(专利权)人: | 南京邮电大学 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/2455 |
代理公司: | 南京经纬专利商标代理有限公司 32200 | 代理人: | 陈月菊 |
地址: | 210046*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 关键 数据结构 动态 方法 | ||
本发明公开了一种关键数据结构的动态重构方法,此方法适用于多种数据结构,以哈希表为例,首先新建一个哈希表,用于存储旧的哈希表中的节点;遍历旧哈希表中每个哈希桶的节点,对于每个节点,首先全局指针指向该节点,此时该节点进入危险期然后将该节点从旧哈希表中删除;根据新的哈希表的哈希函数,确定当前节点在新哈希表中的位置,将当前节点插入到新哈希表中,同步将全局指针设为NULL,当前节点结束危险期状态;重复上述操作,直至旧哈希表中节点数为0,删除旧哈希表。本发明通过动态改变哈希函数来重建哈希表,解决健壮性问题,使用全局指针解决了在重建哈希表的过程中由于伴随着并发的插入、删除以及查询操作所导致的数据短暂丢失的问题。
技术领域
本发明属于数据处理技术领域,具体而言涉及一种关键数据结构的动态重构方法。
背景技术
现有计算机系统中,数据结构的关键参数不能动态调整。例如,哈希表中使用的哈希函数,B+树中每个节点可容纳元素的个数等参数。程序一旦开始运行,这些关键参数通常不能再调整。现有调整方法分为两类。(1)基于锁的动态调整方法。调整时,先对要调整的数据结构实例加锁,之后,将数据结构实例中的数据转移到新的数据结构实例中。相应地,新的数据结构实例也需要加锁。使用锁,不仅会导致死锁、活锁等问题,还会降低数据结构的性能,比如延迟增加或者导致操作暂停。(2)完全暂停服务的调整方法。具体地,在调整数据结构关键参数时,首先将正在执行的操作暂停。然后,对数据结构进行调整。最后,重启之前被暂停的操作。此方法也会导致不必要的延迟,使数据结构的性能下降。
以哈希表为例,大多数现有的哈希表缺乏健壮性。即使预定义的哈希函数不能将传入数据均匀地分配到哈希表桶,也无法更改哈希函数。这个健壮性问题影响了一系列操作系统和编程语言中的哈希表的实现,包括Linux内核、PHP以及.NET。研究人员提出了各种技术来解决这个健壮性问题。研究最多的解决方案是全域哈希(universal hashing),它通过从一组精心设计的散列函数中随机选择一个散列函数,理论上可以提供良好的性能并解决上述健壮性问题。不幸的是,经验评估表明全域哈希不适合诸如Perl之类的应用程序,Perl大量用于处理通常从受限字符集中选择的字符串,因此具有意想不到的分布特性。此外,新的研究表明,攻击者有可能观察或猜测预定义散列函数的随机选择,从而使全域哈希失去作用。
动态重构哈希表的关键在于如何把旧哈希表中的每个节点分发(转移)到新的哈希表中。为了分发每个节点,重建操作必须更新两个哈希表。对一个哈希表进行插入或者删除操作可以是原子的和非阻塞的,但是没有一个非阻塞的方法能够将一个节点从旧的哈希表转移到新的哈希表中,从而造成数据的短暂丢失。比如,线程1先(1)将节点A从旧哈希表删除,然后(2)将节点A插入到新哈希表。如果有一个线程2,在线程1执行完(1)之后,执行(2)之前执行查找节点A的操作,线程2将无法在旧哈希表和新哈希表中查找到节点A。只有当线程1把节点A插入到新的哈希表后,线程2才能够查找到节点A。这就会造成节点A的短暂丢失。
因此,现在急需一种关键数据结构的动态重构的方法对哈希表进行动态重构解决健壮性问题和数据短暂丢失的问题。
发明内容
本发明针对现有技术中的不足,提供一种关键数据结构的动态重构方法,通过动态改变哈希函数来重建哈希表,解决健壮性问题,使用全局指针解决了在重建哈希表的过程中由于伴随着并发的插入、删除以及查询操作所导致的数据短暂丢失的问题。
为实现上述目的,本发明采用以下技术方案:
本发明实施例提出了一种关键数据结构的动态重构方法,所述重构方法包括以下步骤:
S1,新建一个哈希表,用于存储旧的哈希表中的节点;
S2,遍历旧哈希表中每个哈希桶的节点,对于每个哈希桶中的每个节点,全局指针指向该节点,该节点进入危险期,转入步骤S3;所述危险期是指分发节点过程中,指定节点已经从旧的哈希表中删除,但尚未存入新的哈希表的一段时间;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京邮电大学,未经南京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210685649.6/2.html,转载请声明来源钻瓜专利网。