一种基于动态HASH的数据存储方法、装置及存储介质与流程

文档序号:32518680发布日期:2022-12-13 17:55阅读:20来源:国知局
一种基于动态HASH的数据存储方法、装置及存储介质与流程
一种基于动态hash的数据存储方法、装置及存储介质
技术领域
1.本发明涉及数据库技术领域,特别是涉及一种基于动态hash的数据存储方法、装置及存储介质。


背景技术:

2.随着互联网的发展,越来越多的大型信息系统被应用在各行各业,这些大型的应用会使用各种类型的数据库,同时会产生规模庞大的数据,数据库在对这些数据进行分类存储的时候,需要一种快速插入快速查询的方式,提升数据库的存储性能。目前数据存储主要采用b树组织数据库数据、采用b树分裂、b树重组来插入数据、二分查找来查询数据等一系列数据库数据存储相关的技术。现有这些主流的数据库存储技术都是基于b树进行组织数据。当一个b树需要存储海量数据的时候,由于b树的特性,即一张表就对应一个统一的b树根节点,随着插入数据量增长,b树根节点需要先分裂,然后衍生出更多的叶子节点和页内节点,b树的深度增加,数据库在维护b树的组织架构代价就越大,性能瓶颈就越明显。b树内部节点需要通过不断的分裂或者增加内节点来保持b树的稳定性,在分裂的时候需要对整个b树进行上锁,此时只有持有锁的线程可以操作b树,其它线程只能挂起等待,降低了数据存储的并发度,影响了数据存储性能。
3.鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
4.发明数据
5.本发明要解决的技术问题是:在数据量巨大的情况下,如何解决现有技术数据插入带来的分裂次数增加,导致数据并发插入性能降低的问题。
6.本发明采用如下技术方案:
7.第一方面,本发明提出了一种基于动态hash的数据存储方法,包括:
8.根据预设方法设定各级的hash运算规则,以便于确保数据通过各级的hash运算规则获取不同的hash值;
9.在数据库内创建第一级hash表page页,利用第一级hash运算规则,获取数据对应第一级hash运算规则的hash值,并根据第一级hash运算规则的hash值获取数据对应hash表page页的桶;
10.根据数据所对应的桶的地址指针类型和指向对象,确定预存储page页;
11.根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页,并执行数据存储操作。
12.优选的,所述根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页,具体包括:
13.若所述预存储page页的空间足以保存数据,且所述预存储page页内不包含所述目标数据,则将当前插入数据存入所述预存储page页内。
14.优选的,所述根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页还包括:
15.若所述预存储page页的空间不足以保存数据,则将所述预存储page页内的数据重归于数据表中;
16.创建第二级hash表page页,并将所述预存储page页所对应的桶的地址指针指向所述第二级hash表page页;
17.通过第二级hash运算规则,获取数据表中未插入的数据的hash值,根据该hash值获取数据对应hash表page页的桶,并将该桶的地址指针指向所述目标存储page页;
18.将数据存储在所述目标存储page页内。
19.优选的,所述根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页还包括:
20.若所述预存储page页内包含所述目标数据,则在当前级hash表之下创建目标存储page页;
21.将当前插入数据以及目标数据存储在目标存储page页内;
22.在所述预存储page页中,将存放目标数据的位置修改为指向所述目标存储page页的地址指针。
23.优选的,所述根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页还包括:
24.若所述预存储page页的空间足以保存数据;且所述预存储page页内不包含所述目标数据;
25.则判断所述预存储page页内是否存储有地址指针;
26.如果所述预存储page页内存储有地址指针,则获取该地址指针所指向的第一存储page页内所存储的数据,判断该数据是否与所述当前插入数据相同;
27.若相同,则将当前插入数据存入所述第一存储page页;
28.若不相同,则将当前插入数据存入所述预存储page页。
29.优选的,所述将当前插入数据存入所述第一存储page页包括:
30.判断所述第一存储page页是否有空闲空间;
31.若所述第一存储page页有空闲空间,则将当前插入数据存入所述第一存储page页;
32.若所述第一存储page页没有空闲空间,则新建第二存储page页,并将所述第一存储page页与所述第二存储page页建立关联,形成链表,以用于存储相同的数据;
33.将当前插入数据存入所述第二存储page页。
34.优选的,所述根据第一级hash运算规则的hash值获取数据对应hash表page页的桶,具体包括:
35.通过各级的hash运算规则获取第一级hash算法,并利用第一级hash算法计算出数据的第一级hash值;
36.将第一级hash值作为数据的第一级key值,通过所述第一级key值对第一级hash表page页的桶数量进行取余计算,获取数据对应的hash表page页的桶。
37.优选的,所述根据数据所对应的桶的地址指针类型和指向对象,确定预存储page页,具体包括:
38.若所述地址指针为空指针,则创建第一级hash表page页对应的数据page页,并将
所述数据page页作为预存储page页;
39.若所述地址指针为非空指针,并且所述地址指针指向本级hash表的数据page页,则将所述数据page页作为预存储page页;
40.若所述地址指针为非空指针,并且所述地址指针指向下一级hash表page页,则获取地址指针指向的下一级hash表page页;
41.在下一级hash表page页中,以下一级hash表所对应的hash运算规则计算数据的hash值,以该hash值确定下一级hash表page页的桶,并以所述下一级hash表page页的桶指向的数据page页作为预存储page页。
42.第二方面,本发明还提供了一种基于动态hash的数据存储装置,用于实现第一方面所述的基于动态hash的数据存储方法,所述装置包括:
43.至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的基于动态hash的数据存储方法。
44.第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的基于动态hash的数据存储方法。
45.本发明采用了动态hash存储方式来组织数据,虽然存储基本单元(page页)没有变化,但是在存储海量数据的时候,不会有分裂操作,只会动态的扩展多级hash表,并且仅仅对上一级hash表的一个桶进行上锁操作,不影响其他桶的操作,提升了数据的并发度;其次,本发明对相同数据的存储采用了page页链表组织,当page页空间不足时新建一个page页,并且把新建的page页放入链表,这样就避免了page页进行重组和分裂操作。
附图说明
46.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
47.图1是本发明实施例提供的一种基于动态hash的数据存储方法的方法流程图;
48.图2是本发明实施例提供的一种基于动态hash的数据存储方法的方法流程图;
49.图3是本发明实施例提供的一种基于动态hash的数据存储方法的框架流程示意图;
50.图4是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景的数据结构化表;
51.图5是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景通过第一级hash算法获取带有数据hash值的数据结构化表;
52.图6是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景的第一级hash表page页h1的内存结构图;
53.图7是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景插入数据的存储结构示意图;
54.图8是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景插入数据的存储结构示意图;
55.图9是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景通过第二级hash算法获取带有数据hash值的数据结构化表;
56.图10是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景插入数据的存储结构示意图;
57.图11是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景插入数据的存储结构示意图;
58.图12是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景插入数据的存储结构示意图;
59.图13是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景插入数据的存储结构示意图;
60.图14是本发明实施例提供的一种基于动态hash的数据存储方法的具体应用场景插入数据的存储结构示意图;
61.图15是本发明实施例提供的一种基于动态hash的数据存储装置的结构示意图。
具体实施方式
62.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
63.在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
64.此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
65.实施例1:
66.本发明提供了一种基于动态hash的数据存储方法,其特征在于,包括:
67.根据预设方法设定各级的hash运算规则,以便于确保数据通过各级的hash运算规则获取不同的hash值;
68.在数据库内创建第一级hash表page页,利用第一级hash运算规则,获取数据对应第一级hash运算规则的hash值,并根据第一级hash运算规则的hash值获取数据对应hash表page页的桶;根据数据所对应的桶的地址指针类型和指向对象,确定预存储page页;根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页,并执行数据存储操作。
69.所述根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页,具体包括:若所述预存储page页的空间足以保存数据,且所述预存储page页内不包含所述目标数据,则将当前插入数据存入所述预存储page页内。
70.所述根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同
的目标数据,确定目标存储page页还包括:若所述预存储page页的空间不足以保存数据,则将所述预存储page页内的数据重归于数据表中;创建第二级hash表page页,并将所述预存储page页所对应的桶的地址指针指向所述第二级hash表page页;通过第二级hash运算规则,获取数据表中未插入的数据的hash值,根据该hash值获取数据对应hash表page页的桶,并将该桶的地址指针指向所述目标存储page页;将数据存储在所述目标存储page页内。
71.所述根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页还包括:若所述预存储page页内包含所述目标数据,则在当前级hash表之下创建目标存储page页;将当前插入数据以及目标数据存储在目标存储page页内;在所述预存储page页中,将存放目标数据的位置修改为指向所述目标存储page页的地址指针。
72.所述根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页还包括:若所述预存储page页的空间足以保存数据;且所述预存储page页内不包含所述目标数据;则判断所述预存储page页内是否存储有地址指针;如果所述预存储page页内存储有地址指针,则获取该地址指针所指向的第一存储page页内所存储的数据,判断该数据是否与所述当前插入数据相同;若相同,则将当前插入数据存入所述第一存储page页;若不相同,则将当前插入数据存入所述预存储page页。
73.所述将当前插入数据存入所述第一存储page页包括:判断所述第一存储page页是否有空闲空间;若所述第一存储page页有空闲空间,则将当前插入数据存入所述第一存储page页;若所述第一存储page页没有空闲空间,则新建第二存储page页,并将所述第一存储page页与所述第二存储page页建立关联,形成链表,以用于存储相同的数据;将当前插入数据存入所述第二存储page页。
74.所述根据第一级hash运算规则的hash值获取数据对应hash表page页的桶,具体包括:通过各级的hash运算规则获取第一级hash算法,并利用第一级hash算法计算出数据的第一级hash值;将第一级hash值作为数据的第一级key值,通过所述第一级key值对第一级hash表page页的桶数量进行取余计算,获取数据对应的hash表page页的桶。
75.所述根据数据所对应的桶的地址指针类型和指向对象,确定预存储page页,具体包括:若所述地址指针为空指针,则创建第一级hash表page页对应的数据page页,并将所述数据page页作为预存储page页;若所述地址指针为非空指针,并且所述地址指针指向本级hash表的数据page页,则将所述数据page页作为预存储page页;若所述地址指针为非空指针,并且所述地址指针指向下一级hash表page页,则获取地址指针指向的下一级hash表page页;在下一级hash表page页中,以下一级hash表所对应的hash运算规则计算数据的hash值,以该hash值确定下一级hash表page页的桶,并以所述下一级hash表page页的桶指向的数据page页作为预存储page页。
76.本发明采用了动态hash存储方式来组织数据,虽然存储基本单元(page页)没有变化,但是在存储海量数据的时候,不会有分裂操作,只会动态的扩展多级hash表,并且仅仅对上一级hash表的一个桶进行上锁操作,不影响其他桶的操作,提升了数据的并发度;其次,本发明对相同数据的存储采用了page页链表组织,当page页空间不足时新建一个page页,并且把新建的page页放入链表,避免了page页进行重组和分裂操作。
77.实施例2:
78.本发明实施例2主要对于实施例1中的内容做详细的解释,实施例2提供了一种基于动态hash的数据存储方法,如图1所示,包括:
79.步骤201:根据预设方法设定各级的hash运算规则,以便于确保数据通过各级的hash运算规则获取不同的hash值。
80.其中,本发明实施例采取一边存储(插入)数据一边对hash表进行动态扩展的方式实现数据的存储。page页作为数据库数据在内存里存储的基础单元,page页的大小与数据库的配置有关,当数据库的配置确定后,page页的大小为固定值。page页内通常存储的是数据的元组信息,本发明实施例的page页存储的是数据记录信息(后面方案的阐述都使用数据代替数据记录信息进行描述)或hash表信息(即hash表内存结构)。
81.由于每一级hash表记录的hash表信息有限,相应对应的数据page页所能存储的数据有限,为了尽可能的存储更多的信息,本发明实施例根据预设方法设定各级的hash运算规则,使得不同的数据通过各级运算获取不同的hash值,当上一级hash表对应的目标存储page页存储满(不足以继续存储插入的数据)时,创建下一级的hash表,以及下一级的hash表对应的目标存储page页,通过不同级hash运算规则,以确保当前插入的数据和余下未插入的数据通过下一级的hash运算规则,能尽可能的均匀插入下一级hash表page页对应的目标存储page页内。
82.本发明实施例的预设方法主要根据数据库内所需要存储(插入)的数据的具体情况而定,本发明实施例所述的预设方法需确保所需要存储的数据通过各级运算规则计算出的hash值不同,并且保障当前插入的数据和余下未插入的数据通过下一级的hash运算规则,能尽可能的均匀插入下一级对应的目标存储page页内。本发明实施例通过逐级创建hash表page页和数据page页的方式进行数据存储,一边存储一边创建多级hash表和数据page页,直至全部数据都插入完成为止。
83.步骤202:在数据库内创建第一级hash表page页,利用第一级hash运算规则,获取数据对应第一级hash运算规则的hash值,并根据第一级hash运算规则的hash值获取数据对应hash表page页的桶;根据数据所对应的桶的地址指针类型和指向对象,确定预存储page页。
84.其中,本发明实施例首先创建第一级hash表page页,并将第一级hash表page页作为本发明实施例的数据库存储的第一个节点。每一级的hash表page页占用一个完整的page页存储单元。通过前面所设定的各级hash运算规则,获取第一级hash运算规则(算法),并计算出所有待插入的数据对应的第一级hash值。根据第一级hash运算规则的hash值获取数据对应的hash表page页的桶,具体为:通过各级的hash运算规则获取第一级hash算法,并利用第一级hash算法计算出数据的第一级hash值;将第一级hash值作为数据的第一级key值(由于hash运算公式计算数据对应的hash桶时,使用的是数据的key值对hash桶数量进行取余计算,此处引入key值进行说明),通过所述第一级key值(hash值)对第一级hash表page页的桶数量进行取余计算,获取数据对应的hash表page页的桶。
85.例如:数据库a的每一级hash表page页的桶数量为m,数据a通过第一级hash算法后的hash值为t,通过t/m取余数后的值为s,数据a对应的第一级hash表page页的桶标号为s。
86.对于具体数据库的hash表page页而言,假设page页的所占的内存为n,相应的hash桶中地址指针大小为r(r为定值),各级hash表page页内的桶数量为w,根据hash表page页内
的桶数量计算公式:w=n
÷
r,可知各级hash表page页内的桶数量相同(每个hash表page页内的桶数量固定,并且相等)。根据第一级hash表page页内所存放的地址指针类型和指向对象,判断数据预存储的page页。本发明实施例的地址指针主要起到一种类似桥梁的作用,在整个数据插入的过程中,地址指针连接上一级page页与下一级page页之间的关系。根据page页内的存储内容进行区分,本发明实施例中的page页主要有两种:第一种用于存储插入的数据,称为数据page页;第二种用于存储hash表信息(即hash表内存结构),称为hash表page页。基于本发明的两种page页,地址指针可能出现以下三种情况:数据page页指向数据page页、数据page页指向hash表page页,以及hash表page页指向hash表page页(hash表page页指向数据page页的原理与数据page页指向hash表page页的原理一致,算为一种情况)。
87.本发明的地址指针类型分为空指针和非空指针两种,空指针表示数据对应当前page页(hash表page页或数据page页)指向下一级page页时,没有指向目标,即下一级page页不存在,需要创建下一级page页后,才能进行指向;非空指针表示数据对应当前page页指向下一级page页时,有指向目标。
88.本发明所述根据所述地址指针类型和指向对象,判断预存储page页,具体包括:若所述地址指针为空指针,则创建第一级hash表page页对应的数据page页,并将所述数据page页作为预存储page页;若所述地址指针为非空指针,并且所述地址指针指向数据page页,则将所述数据page页作为预存储page页;若所述地址指针为非空指针,并且所述地址指针指向下一级hash表page页,则获取地址指针指向的下一级hash表page页;在下一级hash表page页中,以下一级hash表所对应的hash运算规则计算数据的hash值,以该hash值确定下一级hash表page页的桶,并以所述下一级hash表page页的桶指向的数据page页作为预存储page页。值得注意的是,本发明的数据只能存储在数据page页内,hash表page页主要用来扩展存储扩展并发插入的性能,以及记录数据插入的数据page页位置,便于进行查询。除此之外,本发明实施例所述的hash表page页对应的数据page页,实际指的是hash表page页的具体桶对应的数据page页。为了便于理解本发明的预存储page页为数据对应的hash表page页的桶所指向的数据page页,数据是否存储(插入)在预存储page页内,还需要根据具体情况做进一步判断(后面会进行说明,在此不做赘述),基于此,将该数据page页称为预存储page页。
89.步骤203:根据所述预存储page页的空闲空间大小,以及是否包含与当前插入数据相同的目标数据,确定目标存储page页,并执行数据存储操作。
90.其中,当获取预存储page页的空闲空间大小后,通过比对当前插入数据所占的空间大小,就可以判定预存储page页内的空间是否足够存储当前需要插入的数据。由于插入的数据只能存储在数据page页内,通过对预存储page页的空闲空间大小,当前插入的数据的是否与预存储page页内的数据相同,判断出预存储page页为目标存储page页,还是需要新建数据page页作为目标存储page页的方式,获取当前插入数据的目标存储page页,并将当前数据插入到目标存储page页。值得注意的是,本发明实施例步骤302对应的目标存储page页表示插入的当前插入数据最终存储的数据page页。
91.本发明在现有技术的基础上,引入hash存储方式,采用不分裂的方式进行存储,在一定程度上解决了现有技术插入时带来分裂次数增加所引起的数据并发插入性能下降的问题,提高了数据插入的效率。
92.为了阐述本发明完整的方案,接下来对本发明的具体内容细节做详细的解释。在进行数据存储的过程中,为了顺利的将插入的数据存储在相应的数据page页内,本发明通过设置预存储page页,并通过hash表page页内的地址指针将数据的存储走向逐级进行标明,当获取当前插入数据的数据page页后,通过地址指针的指向记录可以追溯数据存储的具体page页,进而达到可快速查询数据的目的。前面已经解释了预存储page页,在此不做赘述。当获取预存储page页后,根据所述预存储page页的空闲空间大小,以及该数据page页内是否包含与当前正在插入的数据相同的数据,判断目标存储page页,具体包括:
93.若所述预存储page页的空间足以保存数据,且所述预存储page页内不包含当前数据的相同数据,则将当前数据存入预存储page页内。此时预存储page页与数据最终存储的目标存储page页为一个相同page页。本发明预存储page页和数据最终存储的数据page页表示两种不同状态的page页,可以为一个相同的数据page页,也可以为不同的数据page页;当前数据表示当前正在插入的数据。
94.若所述预存储page页的空间不足以保存数据,则进入创建第二级hash表page页和第二级hash表page页的地址指针指向的数据page页步骤,将数据存储在第二级hash表page页指向的所述数据page页内,并通过第二级hash运算规则,将预存储page页内的数据插入第二级hash表page页指向的数据page页内,删除原有的预存储page页。
95.若所述预存储page页内包含与当前数据相同的数据,则创建新的数据page页,并将当前数据存储在新的数据page页内,具体包括:若所述预存储page页内包含与当前数据相同的数据,则创建新的数据page页,遍历所述预存储page页内的存储数据,将所有与当前插入数据相同的数据(包括当前数据)存入新建的数据page页内,并调整地址指针的指向。除此之外,新建的数据page页存储满了以后,本发明会进一步的新建数据page页,并将相同的数据存储在新建的数据page页内,并调整地址指针的指向。值得注意的是,本发明实施例的数据存储实际上是通过建立动态hash表,利用hash表和数据page页内的地址指针获取数据存储的数据page页,并通过地址指针指向进行关联,使得数据在存储后能进行快速高效的查询。在获取数据的数据page页,并将数据存储在相应的数据page页后,需要调整数据存储过程的地址指针的指向方向,后面将会以具体实施例进行解释整个数据存储过程,以及地址指针指向的调整过程,在此对地址指针指向的调整不做进一步的解释。
96.本发明实施例主要通过多级hash动态扩展,增加数据的并发度(并发插入性能)。进一步的,所述创建第二级hash表page页和第二级hash表page页的地址指针指向的数据page页步骤,如图2所示,具体包括:
97.步骤301:创建第二级hash表page页,并将所述预存储page页所对应的桶的地址指针指向所述第二级hash表page页,通过第二级hash运算规则,获取数据表中未插入的数据的hash值,根据该hash值获取数据对应hash表page页的桶。
98.其中,当预存储page页的空间不足以保存当前插入的数据时,则进入创建第二级hash表page页和第二级hash表page页的地址指针指向的数据page页步骤。此时可以认为预存储page页已经存满(已经不足以存储任何一个待插入的数据)。当预存储page页已经存满时,通常直接新建数据page页,将数据存储在新建的page页,当数据较多时,虽可以将数据进行存储,但在使用的过程中,很难精准快速的查询到需要使用的数据。本发明利用多级hash动态扩展的方法,在预存储page页的空间不足以保存当前插入的数据时,则创建第二
级hsah表page页,以及当前插入的数据对应第二级hash表page页的桶的地址指针指向的数据page页,并获取第二级hash运算规则,通过第二级hash算法对预存储page页内的数据和余下待插入的数据进行处理,通过第二级hash算法获取数据的hash值,并通过取余的方式获取当前插入数据对应的第二级hash表page页的桶,以及所述桶存放的地址指针,以便于后续将数据存储在第二级hash表page页的地址指针指向的数据page页内。本发明通过边存储边扩展的方式进行,当第一级hash表page页的桶(具体的桶)对应的数据page页存储满了以后,通过第二级hash扩展的方式,新建第二级hash表page页,以及当前插入数据对应第二级hash表page页的桶的地址指针指向的数据page页,将当前插入的数据进行存储,以此类推,一边存储一边扩展,直至将所有的数据存储完成为止。
99.步骤302:将根据该hash值获取数据对应hash表page页的桶的地址指针指向所述目标存储page页,并将数据存储在所述目标存储page页内。
100.其中,当创建第二级hash表page页的地址指针指向的数据page页后,将当前需要插入的数据存储在所创建的数据page页内,并调整数据存储过程的地址指针指向,以便于后续快速查询所存储的具体数据。
101.本发明实施例采用一边存储一边扩展的方式,通过多级hash动态扩展,实现对数据逐级存储。接下来阐述本发明实施例多级hash动态扩展的过程,本发明还包括采取逐级存储的方式,通过第二级hash表page页,获取第n级hash表page页,其中,n≥2(n取整数),具体包括:若数据通过第二级hash表page页的桶所指向的数据page页的空间不足以保存当前插入的数据,则进入创建第三级hash表page页和第三级hash表page页的地址指针指向的数据page页步骤;若数据通过第三级hash表page页的桶所指向的数据page页的空间不足以保存当前插入的数据,则进入创建第四级hash表page页和第四级hash表page页的地址指针指向的数据page页步骤;通过递归的方式,若数据通过第(n-1)级hash表page页的桶所指向的数据page页的空间不足以保存当前插入的数据,则进入创建第n级hash表page页和第n级hash表page页的地址指针指向的数据page页步骤。其中,n的大小主要取决于插入数据总量所占的存储。值得注意的是,在进行多级hash动态扩展时,相应的计算插入数据对应的hash表page页的桶时,相应的算法应使用根据预设方法设定的相应级的hash运算规则,通过插入数据对应级的hash运算规则,计算出插入数据对应级的hash表page页的桶。例如:当前插入数据对应级为第五级hash表page页,则利用第五级hash运算规则,计算当前插入数据的hash值和当前插入数据对应第五级hash表page页的桶,并将当前插入数据存储在当前插入数据对应第五级hash表page页的桶对应的数据page页(需保证该数据page页足以存储当前插入的数据,若不足以插入,则做下一级hash动态扩展,将数据存储在下一级hash动态扩展对应的数据page页内)内。
102.本发明采用了动态hash存储方式来组织数据,虽然存储基本单元(page页)没有变化,但是在存储海量数据的时候,不会有分裂操作,只会动态的扩展多级hash表,并且仅仅对上一级hash表的一个桶进行上锁操作,不影响其他桶的操作,提升了数据的并发度;其次,本发明对相同数据的存储采用了page页链表组织,当page页空间不足时新建一个page页,并且把新建的page页放入链表,避免了page页重组和分裂操作。
103.实施例3:
104.为了进一步阐述本发明完整的方案,实施例3结合具体的应用场景对本发明方案
做详细的解释。如图3所示,表示本发明具体应用场景的流程图。
105.首先获取需要插入的数据,并对数据进行处理,如图4所示,创建一张基于动态hash的数据库表t(区号,城市名称),以便于后续对数据进行快速的插入存储。为了简化本发明实施例的存储过程,在数据进行取余,获取数据对应hash表的桶下标时,用数据的hash值表示数据的key值进行计算。
106.假设该数据库的内存中基础存储单元page页固定长度,一个page页中只能存储4个城市名称及其区号,每条数据所对应的hash值的计算公式在每一级hash表中都有不同的算法;根据每条数据所对应的hash值查找hash表中对应的桶下标,计算公式是hash值除以桶个数后取余数,现在需要把结构化数据保存到表t中。其中,桶下标表示插入数据对应的hash表page页内具体桶的编号。
107.在内存中创建一个hash表page页p1,在p1中创建第一级hash表page页h1,根据page页大小计算出hash表page页h1所包含的桶个数,将page页分成多个桶,形成第一级hash表page页h1。本发明实施例3的第一级hash表page页h1的计算hash值算法是区号数值加上城市名称的笔画数,得到一组带有hash值得结构化数据表,如图5所示。假设第一级hash表page页h1包含5个桶,p1和h1在内存中结构如图6所示。其中,本发明实施例的hash表每个page页的桶数量都为5个。
108.保存第一行数据“010|北京”,根据计算出来的hash值23在h1中找到下标是3的桶,发现桶中地址指针是空指针,此时需要创建一个新的数据page页p2,地址指针指向p2。计算p2的空闲空间后发现,p2中可以保存该行数据,保存后内存中结构如图7所示。继续对剩下的结构化数据进行保存,在保存完“0371|郑州”之后,内存中的结构如图8所示。
109.继续保存“0311|石家庄”,发现hash值是333,在h1中的对应的桶下标是3,根据桶中地址指针直接定位到数据page页p2,计算p2的空闲空间发现该页空间已经用完(或不足以存储当前插入的数据),需要对h1进行动态扩展。
110.新建page页p5,在该页中创建下一级(第二级)hash表page页h2,h2计算hash值算法为区号数值加上两倍城市名称的笔画数(第n级hash表page页hn,hn计算hash值算法为区号数值加上n倍城市名称的笔画数),p2中已经存在的数据和当前待插入(余下)的数据重新计算hash值,数据如图9所示,即将p2中已经存在的数据与原始表t中余下的数据重新形成新的表t,按照第二级hash表的hash值计算规则计算待插入数据的hash值。
111.其中,h2中桶的数量为5,新增hash表之后的内存结构如图10所示,将h1中下标是3的桶中指针断开p2,指向p5,并且需要对数据“0311|石家庄”在h2中重新定位桶的位置,在h2中计算的hash值353,对应的桶的下标是3,由于桶中存放的指针是空,需要创建新的数据page页p6来保存数据,判断p6中的空闲空间后,发现可以保存该行数据。保存完成之后内存结构如图11所示。
112.对第一级hash表下的数据page页p2中的4个元组信息(“010|北京,023|重庆,020|广州,0755|深圳”)在h2中重新定位桶的下标,并且根据桶中指针的类型来创建新的数据page页或者是直接定位数据page页完成数据保存,保存完成后内存中结构如图12所示。继续向表t中插入“010|北京”,在插入的过程中发现在p7中已经存在了相同的数据,就需要对p7中原有的数据进行处理。创建新的数据page页p9,把新插入的数据保存在p9中,然后把p7中查询到的相同数据也保存在p9中,p7中原来存放相同数据的位置修改成存放指向p9的指
针,处理完成之后内存结构如图13所示。
113.继续向表t中插入“010|北京”,当p9中的空间不足插入该数据之后,需要继续新增数据page页p10,p10和p9构成链表,用来保存相同的数据。内存中结构如图14所示。待所有的数据存储完成以后,将剩下的数据依次按照上述流程进行保存,当事务提交时,把内存中的这些page页刷进磁盘进行持久化存储。值得说明的是,如图3所示,本发明实施例采取逐级存储的方式,第一级hash表page页至第n级hash表page页的扩展方式与本发明实施例3中的第一级hash表page页至第二级hash表page页的扩展方式相同,不同的是各级的hash运算规则不同,数据对应的hash桶下标也不同,在此不做赘述。
114.实施例4:
115.如图15所示,是本发明实施例的基于动态hash的数据存储装置的架构示意图。本实施例的基于动态hash的数据存储装置包括一个或多个处理器21以及存储器22。其中,图15中以一个处理器21为例。
116.处理器21和存储器22可以通过总线或者其他方式连接,图15中以通过总线连接为例。
117.存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的基于动态hash的数据存储方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行基于动态hash的数据存储方法。
118.存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
119.所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的基于动态hash的数据存储方法,例如,执行以上描述的图1-14所示的各个步骤。
120.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1