CN115374124B - 基于a+树数据结构存储的数据查询方法 - Google Patents
基于a+树数据结构存储的数据查询方法 Download PDFInfo
- Publication number
- CN115374124B CN115374124B CN202211045963.4A CN202211045963A CN115374124B CN 115374124 B CN115374124 B CN 115374124B CN 202211045963 A CN202211045963 A CN 202211045963A CN 115374124 B CN115374124 B CN 115374124B
- Authority
- CN
- China
- Prior art keywords
- node
- tree
- data
- array
- key value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及计算机数据结构及数据查询方法技术领域,尤其涉及基于A+树数据结构存储的数据查询方法,包括:将数据的关键字Key值进行有序分割后,获得数字排列特征序列;将序列中的数字有序的与树结构各层级节点内的数组下标进行关联,构成树形结构与数组相结合表示的链路;将数据地址或数据页地址存储至树叶子节点的数组中,非叶子节点的数组中存储次级节点地址,构建基于A+树数据结构存储的数据查询方法。相对Hash算法,通过将动、静态树节点相结合的方式,实现数据高效查询,支持数据遍历,且无Hash冲突;在外存储器中应用时,A+树通过将链路与数据页结合的方式有效降低I/O请求,相对B+树算法,提高了数据查询及应用效率。
Description
技术领域
本发明涉及计算机数据结构及数据查询技术领域,尤其涉及基于A+树数据结构存储的数据查询方法。
背景技术
目前,数据的查询算法普遍以B树、B+树、Hash算法为主。其中,Hash算法查询的时间复杂度最优,但因其数据结构的限制,存在着Hash冲突消耗,性能不够稳定的问题,且功能单一,因而其应用范围存在着局限性,通用性较低。而B树、B+树算法因其操作产生的I/O消耗低、功能完善,使其在外存储器中有着成熟、广泛的应用。但B+树算法,在数据集规模超过2000万时,性能开始明显下降,影响查询效率。随着大数据应用的不断深化,对查询算法的数据存储结构也提出了更高的要求,可见,亟需提出一种不仅能提高数据查询效率,且通用性更好的数据存储结构。
发明内容
本发明实施例提供基于A+树数据结构存储的数据查询方法,旨在提高数据查询效率的同时,具备更好的通用性。
本发明实施例提供基于A+树数据结构存储的数据查询方法,包括以下步骤:
将数据的关键字Key值按预设定的分割策略进行有序分割,获得由多个数字组成的数字排列特征序列;
将树形结构与数组结合生成A+树数据结构,基于所述A+树数据结构构建A+树,其中,所述A+树的树节点类型包括动态节点和/或静态节点;
将所述数字排列特征序列中的数字对应作为所述A+树中各层级节点的节点特征数字,有序与所述A+树中各层级节点内的数组下标进行关联,构成树形结构与数组相结合表示的链路;
将数据地址或数据页地址存储至所述A+树中叶子节点的数组中,以及将次级节点地址存储到所述A+树中非叶子节点的数组;
根据所述A+树中树节点类型的不同,通过所述链路进行数据查询,以及通过所述A+树中的所述叶子节点将所述链路与数据页结构相结合,构成A+树链路页,通过所述A+树链路页进行数据查询。
在本发明实施例中,通过将数据的关键字Key值按预设定的分割策略进行有序分割,获得由多个数字组成的数字排列特征序列;将树形结构与数组结合生成A+树数据结构,基于A+树数据结构构建A+树,其中,A+树的树节点类型包括动态节点和/或静态节点;将数字排列特征序列中的数字对应作为A+树中各层级节点的节点特征数字,有序与A+树中各层级节点内的数组下标进行关联,构成树形结构与数组相结合表示的链路;将数据地址或数据页地址存储至A+树中叶子节点的数组中,以及将次级节点地址存储到A+树中非叶子节点的数组;根据A+树中树节点类型的不同,通过链路进行数据查询,以及通过A+树中的叶子节点将链路与数据页结构相结合,构成A+树链路页,通过A+树链路页进行数据页查询。相对Hash算法,本申请通过在A+树数据结构中分为动态节点与静态节点,进行数据查询时可实现多种模式的数据查询,实现数据高效查询,支持数据遍历,且无Hash冲突;相对B+树算法,本申请通过将链路与数据页结合的方式,通过A+树链路页进行数据页查询,能有效降低I/O请求,提高数据查询及应用效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本发明实施例提供的基于A+树数据结构存储的数据查询方法的流程图;
图1b是本发明实施例提供的A+树数据结构示意图;
图2a是本发明实施例提供的A+树中树节点占用空间示意图;
图2b是本发明实施例提供的A+树中动态节点的结构示意图;
图2c是本发明实施例提供的动态节点中的链路定位流程图;
图2d是本发明实施例提供的一种A+树中链路查询的示意图;
图3是本发明实施例提供的静态节点中的链路定位流程图;
图4是本发明实施例提供的混合节点查询的结构示意图;
图5是本发明实施例提供的静态节点的索引存储空间结构示意图;
图6是本发明实施例提供的一种地址计算的示意图;
图7是本发明实施例提供的查询效率曲线对比图;
图8是本发明实施例提供A+树中动态节点***数组元素的流程图;
图9是本发明实施例提供的A+树中动态节点删除数组元素流程图;
图10是本发明实施例提供的同级节点间的单向链表的示意图;
图11是本发明实施例提供的页面信息节点的结构示意图;
图12是本发明实施例提供的在外存储器中进行数据查找的流程图;
图13是本发明实施例提供的A+树算法在外存储器中的应用示意图;
图14是本发明实施例提供的寻找相邻且有效的页面信息节点的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
请参见图1a,图1a是本发明实施例提供的基于A+树数据结构存储的数据查询方法的流程图,如图1a所示,包括以下步骤:
S1、将数据的关键字Key值按预设定的分割策略进行有序分割,获得由多个数字组成的数字排列特征序列。
在本发明实施例中,基于A+树数据结构存储的数据查询方法运行于其上的电子设备可以通过有线连接方式或者无线连接方式获取数据的关键字Key值或进行数据传输等。其中,无线连接方式可以包括但不限于3G/4G连接、WiFi(Wireless-Fidelity)连接、蓝牙连接、WiMAX(Worldwide Interoperability for Microwave Access)连接、Zigbee(低功耗局域网协议,又称紫峰协议)连接、UWB(ultra wideband)连接、以及其他现在已知或将来开发的无线连接方式。
其中,数据指的是需要进行存储的数据,数据的数据集规模可以达到42亿条。以一条数据为例,通过数据提取可以获取数据的关键字,并计算出关键字Key值,通过对关键字Key值进行有序分割可以得到对应的数字排列特征序列,其中,进行分割可以是进行任意长度分割,分割长度不同,对应分割次数也不同,例如:关键字Key值为182372时,若以每组数组的分割长度为2进行分割,关键字Key值182372分割后得到的数字排列特征序列对应的节点特征数字依次为Nf0=18,Nf1=23,Nf2=72。
S2、将树形结构与数组结合生成A+树数据结构,基于A+树数据结构构建A+树,其中,A+树的树节点类型包括动态节点和/或静态节点。
A+树(Extend Array Tree)是基于数组树(Array Tree)数据结构改进而来的一种数据结构,通过将数组与树形结构进行组合,在每一层级的每一节点中对应有一组数组。在A+树中,从根节点的某个数组元素出发至叶子节点的某个数组元素所经过的路径(节点、数组)是唯一的,依此数据结构特征,构建的A+树算法相比原数组树算法,A+算法不仅大幅提高了数据查询效率,且拥有更好的通用性。
在A+树中,树节点类型包括有动态节点以及静态节点,不同类型的节点有不同的数组结构,且在用于数据查询时,可以通过多种方式查询,同时可以满足混合查询,加快查询效率。其中,静态节点中包括头部指针以及指针数组,动态节点包括头部指针、引导数组和指针数组,其中,头部指针用于构建所A+树同层级节点间的单向有序链表,引导数组存储指针数组的下标,指针数组用于存储地址。在动态节点中,指针数组的长度按需动态扩展。而在静态节点,则是在A+树初始化时,根据对应的关键字Key的分割策略Sn,为指针数组分配固定长度的存储空间,并初始化数组元素为空值(当SL=1,空值为255;SL=2时,空值为65536,以此类推),例如:A+树中某层节点对应关键字Key值的分割长度SL=1,则数组初始化长度为10;若SL=2,则数组初始化长度为100,以此类推。
S3、将数字排列特征序列中的数字对应作为A+树中各层级节点的节点特征数字,有序与A+树中各层级节点内的数组下标进行关联,构成树形结构与数组相结合表示的链路。
其中,A+树数据结构中的层级数量与分割后的节点特征数字组数对应,即分割后得到几组节点特征数字,关键字Key值对应在A+树数据结构中便涉及几个层级,且从根节点开始对应第一组节点特征数字,依次直到叶子节点对应最后一组节点特征数字。每个节点上对应一组数组,将对应所在层级的节点特征数字作为该层级节点内数组的下标,这样,在整个A+树数据结构上的相邻层级之间,便可以通过关键字Key值的数字排列特征序列实现层级之间的关联,且每个关键字Key值在A+树中构成的链路(Link Path)唯一。其中,链路可以指数字排列特征序列在A+树数据结构中从根节点的任一个数组元素到叶子节点的任一数组元素的唯一路径,A+树数据结构示意图参考图1b所示。
S4、将数据地址或数据页地址存储至A+树中叶子节点的数组中,以及将次级节点地址存储到A+树中非叶子节点的数组。
其中,在A+树数据结构中,可以将数据的地址存储到各层级的树节点中。地址包括指向次级节点的地址、数据地址或数据页地址。在查找地址时,可以通过快速定位关键字Key值的数字排列特征序列作为节点内数组下标进行逐级节点查询。
具体的,参考图1b所示,在A+树数据结构的叶子节点内数组中可以存储数据的数据地址或者数据页地址,基于数字排列特征序列可以定位数据的数据地址或者数据页地址在A+树数据结构中所存储的位置,从而根据数字排列特征序列快速定位需要查找的数据。在非叶子节点的数组中可以存储次级节点地址,基于数字排列特征序列获取到次级节点地址后可以定位到次级节点,直到定位到叶子节点。
S5、根据A+树中树节点类型的不同,通过链路进行数据查询,以及通过A+树中的叶子节点将链路与数据页结构相结合,构成A+树链路页,通过A+树链路页进行数据查询。
具体的,当A+树中所有的树节点类型均为静态节点时,可以基于静态节点的特征进行静态模式查询。当A+树中所有的树节点类型均为动态节点时,可以基于动态节点的特征进行动态模式查询。当A+树中所有的树节点类型既包括静态节点,又包括动态节点时,可以基于动静态节点进行混合模式查询。且动态模式查询与混合模式的查询都具有更好的查询效率。
在内存储器的运用中,对于数据的查询,可以基于数字排列特征与链路的关联关系直接定位数据。在外存储中进行数据页查询时,可以通过代表页面内信息节点的叶子节点将A+树的链路与数据页相结合构成A+树链路页,通过A+树链路页进行数据页查询。
在本发明实施例中,通过将数据的关键字Key值按预设定的分割策略进行有序分割,获得由多个数字组成的数字排列特征序列;将树形结构与数组结合生成A+树数据结构,基于A+树数据结构构建包括包括动态节点和/或静态节点的A+树;将数字排列特征序列中的数字对应作为A+树中各层级节点的节点特征数字,有序与A+树中各层级节点内的数组下标进行关联,构成树形结构与数组相结合表示的链路;将数据地址或数据页地址存储至A+树中叶子节点的数组中,以及将次级节点地址存储到A+树中非叶子节点的数组;根据A+树中树节点类型的不同,通过链路进行数据查询,以及通过A+树中的叶子节点将链路与数据页结构相结合,构成A+树链路页,通过A+树链路页进行数据页查询。相对Hash算法,本申请通过在A+树数据结构中分为动态节点与静态节点,进行数据查询时可实现多种模式的数据查询,实现数据高效查询,支持数据遍历,且无Hash冲突;相对B+树算法,本申请通过将链路与数据页结合的方式,通过A+树链路页进行数据页查询,能有效降低I/O请求,提高数据查询及应用效率。
可选的,图1a中步骤S1包括具体步骤:
S11、检查数据的关键字Key值的长度是否小于分割策略中预设的Key值最大长度,其中,Key值最大长度为预设的应用数据集中最大关键字Key值位数。
S12、若小于,则基于Key值最大长度与关键字Key值的长度之间的位数差进行补位0,使关键字Key值的长度等于Key值最大长度。
S13、将补位后的关键字Key值基于分割策略中预设的分割长度进行有序分割,得到由多个数字组成的数字排列特征序列。
其中,预设定的分割策略由应用数据集Key值最大长度Lmax、分割长度数字序列组成。其中,Key值最大长度Lmax是指预先设定的应用数据集中可能出现的最大关键字Key值位数。若关键字Key值的长度Lkey小于分割策略中的Key值最大长度Lmax,则进行补位操作,即根据Lmax-Lkey的差值对关键字Key值进行补充数字0,使关键字Key值的长度Lkey等于分割策略中的Key值最大长度Lmax,例如:关键字Key=182372,其分割策略中的分割长度数字序列为S0=2、S1=2、S2=2、S3=2,应用数据集Key值最大长度Lmax=8,则表示对关键字Key值进行四次分割(St=4,从左至右或反之),对关键Key值进行补位得到关键字Key值为00182372,则按分割策略分割后得到Nf0=00、Nf1=18、Nf2=23、Nf3=72四个数字组成的数字排列特征序列,该数字排列特征序列中的每组数字即为关键字Key值的数字排列特征Nf。该数字与树形结构中各层节点中的数组下标关联,称为节点特征数字。
可选的,图1a中步骤S3包括步骤:
S31、根据当前节点的节点特征数字的位数长度,一次性申请并初始化静态节点中的指针数组以及动态节点中的引导数组对应长度的存储空间,其中,动态节点中的指针数组长度基于需求动态增减,引导数组存储同一节点内指针数组的下标,头部指针在A+树的同层级节点间形成单向有序链表。
具体的,A+树索引占用的存储空间与树节点类型、关键字Key值的长度(数据集规模)有关。在一个完整的A+树索引中,叶子节点层的数组元素对应了数据集中所有记录的关键字Key值。根据树节点内数组的结构定义,其占用存储空间(32位***为例)如图2a所示。
S32、设置根节点作为当前节点,从关键字Key值的数字排列特征序列中获取对应当前节点的节点特征数字。
S33、若A+树中树节点为动态节点,将当前节点的节点特征数字作为当前节点中的引导数组的下标定位并读取引导数组元素,将读取的引导数组元素作为当前节点中的指针数组的下标,定位指针数组元素。
具体的,当A+树数据结构中树节点均为动态节点时,可以将根节点作为当前节点。参考图2b所示,在A+树数据结构的动态节点中,从左至右依次包括头部指针Ph,引导数组G0,…,Gn,指针数组P0,…,Pn。其中,结合图2a(左)所示,以32位***为例,动态节点占用存储空间情况为头部指针4byte,引导数组1~2byte,指针数组4byte,当关键字Key值长度越长,数据规模越大,数组所占用的存储空间越大。上述动态节点结构可以通过C语言描述为:
其中,头部指针Ph:用于在A+树数据结构中同级节点间形成单向链表,既Ph是指向树中同级的、且相邻(左相邻或右相邻)有效的节点地址。
指针数组(PtArr[]):用于存储地址,在非叶子节点中,数组元素存储着次级节点地址,在叶子节点中,存储着数据地址或数据页地址。在动态节点中,指针数组PtArr[]的长度按需动态扩展。
引导数组(GdArr):用于定位指针数组下标的数组,辅助指针数组能够按需动态扩张,提高索引存储空间的利用率。
S34、基于当前节点中定位到的指针数组元素获取次级节点地址,直至定位到叶子节点,构成与关键字Key值对应的通过树形结构与数组相结合表示的链路。
结合图2c所示,对于动态节点,从根节点开始,在次级节点的寻址过程中,首先以数字排列特征序列中对应当前节点的首组节点特征数字作为根节点中引导数组下标(即GdArr[Nf])得到数组元素N。再以数组元素N作为同一数组中指针数组的下标得到根节点的次级节点的次级节点地址(PtArr[N]),基于这一寻址方式一直向A+树数据结构的次级节点进行定位,每次定位到一次级节点,便可以判断次级节点是否为叶子节点,若不是叶子节点,则将次级节点确定为当前节点,直到判断出次级节点为叶子节点,从而构建得到在动态节点下从根节点到叶子节点通过树形结构与数组相结合表示的链路。如图2d所示,图2d描述了当树节点类型为动态节点时,以关键字Key值为182372为例的链路示意图。
S35、若A+树中树节点为静态节点,则直接将对应当前节点的节点特征数字作为当前节点中的指针数组的下标,定位指针数组元素并获取次级节点地址,直至定位到叶子节点。
S36、构建从根节点到叶子节点通过树形结构与数组相结合表示的链路,构成与关键字Key值对应的通过树形结构与数组相结合表示的链路。
其中,静态节点无需动态扩张。结合图3所示,当A+树的树节点类型为静态节点时,同样,设置根节点作为当前节点。对于静态节点,在A+树初始化时,根据对应的关键字Key值的分割策略Sn,为指针数组PtArr[]分配固定长度的存储空间,并初始化数组元素为空值,因此,静态节点中没有引导数组,结合图2a(右)所示,以32位***为例,静态节点占用存储空间情况为头部指针4byte,指针数组4byte。
其中,对于静态节点,可以将对应当前的根节点的节点特征数字作为根节点的数组中指针数组的下标进行关联,直接读取指针数组内的次级节点地址,根据次级节点地址直接定位次级节点。并对次级节点进行判断,若判断出次级节点非叶子节点,则将次级节点设置为当前节点,将对应次级节点的节点特征数字作为该节点中指针数组的下标定位下一级节点,直到定位到叶子节点,构建得到在静态节点下从根节点到叶子节点通过树形结构与数组相结合表示的链路。
在本发明实施例中,针对动态节点,通过将当前节点的节点特征数字作为引导数组下标定位并读取引导数组元素,并基于引导数组元素指针数组的下标,定位指针数组元素获取次级节点地址,直至定位到叶子节点,能够构成动态节点下与关键字Key值对应的通过树形结构与数组相结合表示的链路。同样,对于静态节点,则直接将对应当前节点的节点特征数字作为指针数组的下标,定位指针数组元素并获取次级节点地址,直至定位到叶子节点,可以构成静态节点下与关键字Key值对应的通过树形结构与数组相结合表示的链路。
可选的,图1a中,步骤S5包括:
S51、当A+树中各层级节点的树节点类型为静态节点时,或A+树中各层级节点的树节点类型为动态节点时,则基于当前节点的节点特征数字定位指针数组元素,基于定位到的指针数组元素提取次级节点地址进行寻址,直至叶子节点,其中,数据查询的时间复杂度为O(Htree),Htree为A+树的高度。
具体的,当A+树中各层级节点的树节点类型为静态节点时,或A+树中各层级节点的树节点类型为动态节点时,可以进行等值查询,依据关键字Key值的数字排列特征Nf0,Nf1。。。Nfn,从根节点开始,以数字排列特征Nf作为数组下标进行快速定位到次级节点,直至叶子节点,将定位到的叶子节点的指针数组中存储的数据作为数据的查询结果。
在A+树中,当所有层节点为动态节点时,其查询的时间复杂度由树的高度H决定,而A+树的高度H则与关键字Key值的分割次数St有关。例如,关键字Key值按S0=3、S1=3、S2=3进行分割,则St=3,那么查找命中的时间复杂度为O(3)。因此,A+树算法查找的时间复杂度可以表示为:Ta=O(St)。具体的,对于动态节点,则先以节点特征数字作为引导数组的下标定位并读取引导数组元素,再以读取的引导数组元数作为指针数组的下标,定位指针数组元素,基于定位到的指针数组元素提取次级节点地址进行寻址,直至叶子节点。参考图2c所示。
当在A+树中,所有层节点为静态节点时,由于在在A+树索引初始化时,会依据关键字Key的分割策略,一次性完成树中所有节点的初始化(分配数组存储占用空间),且树中节点的横向(层内)、纵向(层间)在存储空间上连续排列。如关键字长度为6,其分割策略为S0=2、S1=2、S2=2,则树的高度为3(St=3),那么在数组树初始化时,首先会申请并初始化一个长度为100的指针数组作为根节点,之后继续申请并初始化100个长度为100的指针数组,依此完成一、二、三级静态节点初始化,其中,树节点横向、纵向在存储空间上连续。若A+树中所有节点均为静态节点时,则可在A+树中的叶子节点层,直接根据关键字Key值的分割策略Sn计算出相应的数组元素地址,根据推算得到的地址定位叶子节点,查询的时间复杂度Ta=O(1)。
S52、当A+树中各层级节点的树节点类型包括动态节点与静态节点时,则进行数据混合查询,其中,当A+树的高度为H,且从根节点至第L层为静态节点,第H-L层为动态节点,则从根节点开始到第L层节点为静态节点的数据查询,从L+1层节点至叶子节点层为动态节点的数据查询,且数据混合查询的时间复杂度为O(H-L)。
更具体的,结合图4所示,A+树中的各层树节点有静态节点,也有动态节点时,可以进行混合查询。在A+树的混合应用模式中,若A+树的高度为H,从根节点至第L层为静态节点,第H-L层为动态节点,则数据查询的时间复杂度为O(H-L)。对于根节点至第L层的静态节点可以基于静态节点的方式查询,对于第H-L层的动态节点可以基于动态节点的查询方式查询。
可选的,在基于当前节点的节点特征数字定位指针数组元素之前,包括:
若A+树中从当前节点层至根节点层均为静态节点,且在节点初始化时,当前节点层至根节点层在存储介质中横向、纵向有序排列,则采用地址推算方式,根据当前节点所在的节点层的首地址、当前节点的节点特征数字、当前节点在关键字Key值中截取的数字,计算当前节点地址,其中,地址推算公式为:
Pn=P0+Snode×Nn×10L+Nf×Sp
其中,其中,Pn为当前节点地址,P0为当前节点所在的节点层的首地址,Snode为节点占用空间,Nn为截取的数字,在关键字Key值的数列特征序列中,将当前节点之前的节点特征数字组拼合得到,L为当前节点的节点特征数字长度,Nf为当前节点的节点特征数字;Sp为数组元素占用空间。
其中,结合图5所示,由于在A+树索引初始化时,会依据关键字Key值的分割策略一次性完成树中所有节点的初始化,即分配数组存储占用空间,且树中节点的横向(同一层级内)、纵向(不同层级间)在存储空间上连续排列。例如:关键Key值长度为6,其分割策略Sn为S0=2,S1=2,S2=2,则树的高度H=St=3,即共包括3级,以长度为100的指针数组为例,会在数组树初始化时,首先会申请并初始化一个长度为100作为根节点的下一级节点,依此完成一、二、三级静态节点初始化。
更具体的,由于树节点的横向、纵向在存储空间上有序连续排列,则可以通过计算A+树中任何层级的相对节点地址(地址推算,Address calculate)进行数据查询。其中,地址推算指根据当前节点所在的节点层的首地址P0、当前节点的节点特征数字Nf、当前节点在关键字Key值中截取的数字Nn,计算出当前节点地址。
结合图6所示,以8位数的关键字Key值为例,在A+树中索引初始化时,一级节点(102个元素的数组)、二级节点(104元素的数组)、三级节点(106个的数组)。例如:Key值为73845519,则在对应树的第三层节点中的数组元素地址(32位操作***)为:
P=P0+7384×101×4×102+55×4 (1)
其中,P0为第三级节点的首地址。
在本实施例中,A+树算法在内存储器应用中,无Hash算法中的碰撞消耗,数据查询高效且稳定,且支持范围查询,适合应用于高并发实时处理***。
可选的,为了更好的体现基于A+树数据结构存储的数据查询方法的查询效率,在内存储器中运用时,以下提供了混合节点模式以及动态节点模式下,与二分算法、Hash算法的查询效率对比试验数据。
需要说明的是,试验环境为:操作***:Windows 7(x64);CPU:Intel Core i58500;内存:8G;编程工具:Delphi7;数据寻址:32位。
在50000K条记录的数据集中,分别以1K、10K、100K、1000K、10000K、50000K个随机的关键字Key值进行检索,测试各种算法的查询效率(响应时间:毫秒)。其中,测试数据集中的记录定义为:
测试的关键字Key值数据为数组,定义为:
Int KeyArr[n](n=1K、10K、100K、1000K、10000K、50000K)
(数组KeyArr[n]的元素为0至n之间的随机数)
试验前提包括以下5点:
(1)、测试中的A+树包括四层节点,关键字Key值的分割策略为S0=2、S1=2、S2=2、S3=2;树中的混合节点模式指1、2、3层节点中的节点均为静态节点,第4层为动态节点;动态节点测试模式指A+树中所有层节点均为动态节点。
(2)、在测试数据集(List链表)中,由于关键字Key值与测试数据集链表(List)序号(下标)一致,所以,二分算法检索测试是在测试数集中按序号直接进行查询的。
(3)、因Hash算法的多样性,其计算的时间复杂度不一致,本次测试的Hash算法为模拟测试,即在Hash运算时,仅对关键字Key值进行一次整数运算(平方)、一次浮点运算(保留(Key/100)的整数部分),不涉及Hash碰撞,无循环及其他运算。
(4)、为保证测试的准确性和一致性,测试中的功能代码均一致(如关键字分割、数据寻址等方法),且计时代码中,仅包括关键字Key值查询功能的实现代码
(5)、所有算法的查询响应时间取5次测试的平均值。
最终试验结果的对比数据参考如下数据对比表所示:
针对上述数据对比表,结合图7提供的查询效率对比图所示,经过测试后试验结论总结为:1、A+树算法(动态节点模式)在数据检索效率上大幅优于二分算法,且数据集规模越大,并发检索数据越多,检索的效率优势越明显。2、混合节点模式下的数据查询效率上大幅优先于动态模式,其检索效率接近于Hash算法。3、A+树算法可通过不同的节点模式,能够灵活的处理数据检索中,时间与空间的矛盾,使A+树算法的应用具有良好的适用性与通用性。
可选的,参考图8所示,方法还包括对链路进行节点***,具体步骤如下:
S6、在次级节点寻址过程中,若判断出获得的次级节点地址无效,则新建节点,并将新建节点作为当前节点继续进行次级节点寻址过程。
S7、在新建节点的过程中,若当前节点为静态节点,则直接将新建节点的地址写入当前节点所定位的指针数组元素中,若当前节点为动态节点,则将当前节点的指针数组扩展一个数组元素,并将新建节点的地址写入指针数组扩展的元素中,再将指针数组的长度写入定位的引导数组元素中。
S8、若当前节点为叶子节点,则将关键字Key值对应的数据地址或数据页地址写入当前节点中定位的指针数组元素中,实现对应关键字Key值的链路节点***。
其中,在次级节点寻址过程中,若判断出获得的次级节点地址无效,则可以新建节点(***节点),并将新建节点作为当前节点继续进行次级节点寻址过程。
在***操作时,针对树节点类型不同对应的操作方式也不同。对于静态节点,可以将新建节点的地址直接写入指针数组的下标的最后一个数组元素。具体的,由于静态节点中的指针数组在节点初始化时已申请了固定长度的空间,所以,在某个树节点***新建节点的地址PNode_New时,则只需将PNode_New写入树节点的指针数组下标为Nf的数组元素即可,即PtArr[Nf]=PNode_New。
若当前节点为动态节点,则将当前节点的指针数组扩展一个数组元素,并将新建节点的地址写入指针数组扩展的元素中,再将指针数组的长度写入定位的引导数组元素中,若当前节点为叶子节点,则将关键字Key值对应的数据地址或数据页地址写入当前节点中定位的指针数组元素中,实现对应关键字Key值的链路节点***。具体的,在A+树数据结构中的某个树节点中,***一个新增次级节点的地址PNode_New时,先将指针数组PtArr[]的长度L扩展为L+1,并将PNode_New写入指针数组PtArr[L+1]内,既PtArr[L+1]=PNode_New。然后再将指针数组PtArr的长度(L+1,指针数组的下标)写入到引导数组GdArr[Nf]内,即GdArr[Nf]=L+1。
在本实施例中,分别针对静态节点与动态节点进行A+树索引的***,可以实现对A+树索引的更新,体现了A+树更高的灵活性与实用性。
可选的,参考图9所示,方法还包括对链路进行节点删除,具体步骤如下:
S9、在A+树中,根据关键字Key值对应的链路,从叶子节点开始,以当前节点的节点特征数字定位待删除的指针数组元素。
S10、若当前节点为静态节点,则将所定位到的指针数组元素置空。
S11、若当前节点为动态节点,则先删除定位到的指针数组元素,并将指针数组发生变化的数组下标在引导数组中进行更新,其中,删除定位到的指针数组元素指将定位的数组元素之后的数组元素向前覆盖,并将指针数组长度减一个元素。
S12、在更新完当前节点内的数组数据后,若检查到当前节点中的指针数组元素为空或指针数组长度为0,则继续向父节点方向进行链路的节点删除。
S13、当在A+树中***、删除节点时,通过A+树的链路,更新节点及节点左右相邻节点的头部指针,形成同层级节点间的单向有序链表。
其中,若要删除一个关键字Key值索引,则要对关键字Key值的整个链路进行更新。通过链路回逆(Link Path Reverse),从叶节点向根节点方向对同一链路上各节点的指针数组、引导数组进行更新,包括删除空数组(节点)或置位相应数组元素为空,最终完成关键字Key值对应链路数据的更新。当然,数组元素的更新因节点的类型有所不同。
具体的,以动态节点为例,若查询到待删除的指针数组元素所在节点为叶子节点,则获取该叶子节点的数字排列特征序列Nf,根据数字排列特征序列Nf读取叶子节点的引导数组GdArr[Nf]的数组元素N,在判断数组元素N有效的情况下,将引导数组GdArr[Nf]置位为空,并删除指针数组Nf对应的数组元素PtArr[n],对引导数组的数组元素更新,直到一层一层逆向更新到根节点。若检查到当前节点中的指针数组元素为空或指针数组长度为0,则继续向父节点方向进行链路的节点删除。
更具体的,上述删除指针数组Nf对应的数组元素PtArr[n],是将指针数组下标Nf+1之后的所有数组元素复制到数组下标Nf的位置(向前移动一个位置),并将指针数组的长度减1,完成数组Nf的删除。上述引导数组GdArr[Nf]置位为空,则是将GdArr[Nf]=256、65536...。上述n无效是指n=256、65536...。同样,对静态节点中的数组元素进行删除时,则直接将所定位到的指针数组元素置空。
在本实施例中,分别针对静态节点与动态节点进行A+树数据结构索引的删除,可以实现对A+树数据结构的索引的更新,同样体现了A+树数据结构更高的灵活性与实用性。
可选的,上述步骤S13,包括:
S131、将***的节点或删除的节点作为编辑节点。
S132、通过关键字Key值对应的链路,将编辑节点的父节点作为当前节点,并以对应当前节点的节点特征数字进行指针数组定位。
S133、在当前节点中,以定位到的指针数组为中心,从左右两个方向分别查找相邻且有效的指针数组元素,其中,查找到的指针数组元素有效,表示当前节点为编辑节点在父节点方向的有效分支节点。
S134、若查找到编辑节点在父节点方向上的有效分支节点,则在同一方向以当前节点为父节点,在其次级节点的指针数组中继续查找相邻且有效的指针数组元素,直至同级节点层为止。
S135、若未查找到编辑节点在父节点方向上的有效分支节点,则继续通过关键字Key值对应的链路,以当前节点的父节点作为当前节点,查找有效分支节点,直至根节点为止。
S136、当查找至同级节点时,则更新当前编辑节点及当前编辑节点的左右相邻节点的头部指针,形成同层级节点间的单向有序链表。
其中,在A+树数据结构中,引导数组或指针数组的数组元素是按关键字Key值有序排列的。以根节点为例,根节点中的每个数组元素分别对应次级节点中每个节点,且可以是从左到右按照根节点中数组元素的顺序依次排列。而每个节点的头部指针存储了指针地址,可以使同级节点间形成单向链表,如图10所示,示出同级树节点之间的单向链接示意图。
具体的,树节点之间的单向链表包括:可以将A+树数据结构的某一级节点Node_n确定为当前节点,基于当前节点中关键字Key值的链路逆向(向根节点方向)查找最近且有效(数组元素存储的地址不为空null)的分支节点;根据分支节点正向(向叶子节点的方向查询)查找最近且有效的次级节点,直至查找到与当前节点处于同层级的树节点,将与当前节点处于同层级的树节点的地址写入当前节点Node_n的头部指针,将同级节点有序链接,得到树节点之间的单向链表。
更具体的,可以通过等值查询方式先查找到待查询关键字Key值的第一组节点特征数字在A+树数据结构中的地址所在节点,根据上述树节点之间的单向链表,便可以将所在节点作为当前节点对A+树数据结构进行遍历查询,将最终查询到的数据所在地址作为查询结果输出。其中,因树节点之间能够形成单向链表,则A+树数据结构上很容易实现数据的遍历功能(范围查询、模糊查询等),快速进行数据查找。
在本实施例中,A+树算法在内存储器应用中,无Hash算法中的碰撞消耗,数据查询高效且稳定,且支持范围查询,适合应用于高并发实时处理***。
可选的,本申请提供的基于A+树数据结构存储的数据查询方法还可以在外存储器中应用。上述步骤S5,还包括:
S53、将A+树中的叶子节点作为页面信息节点。
具体的,如图11所示,页面信息节点的数据包括前一节点地址、后一节点地址、节点内最小Key值、节点内最大Key值以及页面信息数组,其中,页面信息数组的页面信息数组元素存储着包括数据页地址和最大关键字Key值,页面信息节点间通过页面信息节点中的前一节点地址、后一节点地址形成双向链表,节点内最小Key值和节点内最大Key值组成节点Key范围。
S54、在A+树中,通过页面信息节点将A+树的链路与数据页进行关联,构成A+树链路页,通过数据页匹配查找关键字Key值对应的数据所在的数据页。
具体的,如图12所示,A+树的第四级节点为页面信息节点,其作用是在数据检索时,将关键字Key值的数字排列特征与数据页的信息相关联,并将关键字Key值对应的数据页快速载入到内存储器中,从而达到数据快速检索的目的。构成A+树链路页,可以通过数据页匹配查找关键字Key值对应的数据所在的数据页。
可选的,结合图12所示,步骤S54包括:
S541、将页面信息节点的父节点作为切换节点,其中,切换节点包括关键字Key值对应的页面信息节点地址。
A+树算法在外存储器中应用时,则是利用数组结构寻址快速的特性与数据页面信息索引相结合的方法,减少算法相关操作产生的I/O消耗,实现在外存储器中的高效应用。
具体的,为简便的描述,可以将A+树的数据结构中叶子节点的父节点作为切换节点,基于数字排列特征序列中的节点特征数字与A+树数据结构各层级节点内的数组下标的关联关系形成的链路,从根节点定位到待查询数字排列特征序列的切换节点。其中,切换节点内数组中存储有关键字Key值的数字排列特征对应的页面信息节点地址Pi。
S542、读取切换节点中的页面信息节点地址,判断页面信息节点地址是否为空。
定位到切换节点后,可以读取切换节点内数组的页面信息节点地址,判断页面信息节点地址是否为空。
S543、若页面信息节点地址不为空,则读取与页面信息节点地址对应的页面信息节点,页面信息节点内数组元素包括关键字Key值的数字排列特征序列与数据页地址的关联关系。
结合图13所示,A+树算法在外存储器中应用中,A+树的一、二、三、四级节点均常驻内存。其中,第四级节点(页面信息节点)从磁盘中载入,而一、二、三级节点则是根据页面信息节点,依照A+树的数据结构在内存储器中构建而来。
页面信息节点的结构具有如下特点:节点间有双向指针,形成节点间双向链表结构;页面信息数组元素存储着数据页地址及数据页内的最大Key值;页面信息数组长度与***数据页(数据块)的大小有关。上述页面信息节点定义为:
页面信息节点内的数组元素定义为:
S544、若判断出关键字Key值在节点Key范围内,则在页面信息节点内的指针数组中,利用二分算法查找Key值所在的数据页。
S545、当关键字Key值小于页面信息节点中最小Key值时,则利用节点间的双向链表跳转至当前页面信息节点的前一页面信息节点继续进行数据页匹配。
S546、当关键字Key值大于页面信息节点中最大Key值时,则利用节点间的双向链表跳转至当前页面信息节点的后一页面信息节点继续进行数据页匹配。
具体的,当页面信息节点地址不为空,即有效情况下,可以读取页面信息节点地址对应的页面信息节点,基于页面信息节点内数组包括的关键字Key值的数字排列特征序列与数据页地址的关联关系,判断关键字Key值的数据页地址是否匹配成功。
其中,关键字Key值的数据页地址匹配指利用页面信息节点中的Key值范围(MinKey、MaxKey)属性和页面信息数组元素中的KMax属性,寻找Key值对应的数据页的过程。此过程分两种情况:
(1)、KMax>=Key值>=KMin时,则在页面信息数组内,用二分算法找到Key值可能存在的数据页地址Pd;
(2)、当Key值<KMin时,则利用节点间的双向指针跳转至前一页面信息节点继续进行匹配,当Key>KMax时,则跳转下一页面信息节点进行匹配,依此循环。
S547、读取A+树链路页中数据页地址对应的数据页,以及查找对应关键字Key值的数据,在查找到对应关键字Key时对切换节点的数据进行更换。
具体的,为了更好的描述A+树算法在外存储器中的应用效率,以下提供一种以A+树算法的关键字Key值分割策略为S0=2,S1=3,S2=3为例的分析过程。
具体的,以A+树算法的关键字Key值分割策略为S0=2,S1=3,S2=3为例,根据A+树数据结构特点,在链路页结构中完成一个关键字Key值数据的等值查找过程中,I/O请求消耗分析如下:
(1)、根据A+树的数据机构特点,一个Key值的查询过程,可以在树的前三层节点结束,既查询未命中,则I/O请求次数为0;
(2)、当查询在数据页面中命中,则只需要一次载入数据页的I/O请求即可以完成查询操作;
若应用的数据集规模为2千万条数据,则完成一次Key值查询的I/O请求次数平均在0~1次。
可选的,在外存储器中的运用中还可以进行A+树数据结构的数据***及删除。进行数据***时,先进行待查询关键字Key值查找,当未查找到待查询关键字Key值对应的数据记录时,才会进行数据***。
当A+树算法在外存储器中执行数据***时,先进行待查询关键字Key值查找,当未查找到待查询关键字Key值对应的数据记录时,才会进行数据***。***数据操作分以下几种情况:
(1)、在载入的数据页中未查找到关键字Key值对应的数据时,则直接在该数据页中***数据记录,并同步更新磁盘中的相关数据;
(2)、当在切换层节点中,页面信息节点地址Pi为空时,则会在切换节点内、切换节点间寻找相邻且有效的页面信息节点地址Pi。
如图14所示,为寻找相邻且有效的页面信息节点示意图。通过检查切换节点内的页面信息节点地址Pi是否为空;若为空,则在切换节点内的页面信息数组中,查找相邻(左或右)且有效的页面信息节点地址Pi;若未找到,则通过Key的链路逆向(根节点方向,左或右)检查是否有相邻且有效的切换节点,找到切换节点后,再在该节点内的数组中查找相邻且有效的页面信息节点地址Pi;当找到相邻且有效的页面信息节点地址Pi后,则会按情况(1)进行数据的***操作。
其中,当A+树算法在外存储器中执行数据删除时,先进行要删除的数据的关键字Key值查找,当查找到关键字Key值对应的数据记录时,会在数据页中直接删除该数据记录,然后将相关数据页及页面信息节点数据同步更新至磁盘。数据删除操作,可能会导致数据页、页面信息节点的合并操,导致页面信息节点地址Pi可能会发生偏移。结合图12所示,为提高查询效率,在完成一个查找过程后,会根据关键字Key值在数据页匹配过程中,发生的页面跳转次数决定是否更新切换节点中的数据。如在一个关键字Key值的数据页匹配过程中,若页面跳转次数大于等于n次时(如n=2),则更新切换节点的数据。
对于A+树算法在外存储器中执行数据***、删除的效率分析如下:
具体的I/O请求分析如下:
(1)、A+树中的数据页结构与B+树类同,所以,数据页的分离、合并操作时,产生的随机I/O请求次数基本相同。
(2)、在A+树的数据结构中,一个页面信息节点占用一个磁盘页。一个页面信息元素(数组元素)占用8byte(32位***),若***数据页的大小为16Kbyte,则一个页面信息节点最大可存储约2000个页面信息元素(一个页面信息元素素占用8byte)。而在B+树的数据结构中,一个Key值元素占用14byte,则一个B+树内节点最大可存储约1000个Key值元素。显而易见,A+树的页面信息节点容量更大,那么发生节点分离、合并操作的次数更少,从而产生的随机I/O次数就少。因此,产生的I/O口消耗就越少。
(3)、由于A+树的1、2、3级节点是根据页面信息节点构建而来,并不会同步更新至磁盘,所以,1、2、3级节点数据的变化不会产生额外的I/O请求。
依据上述分析,A+树算法在数据***、删除时,其产生的随机I/O请求次数较B+树算法更少,应用效率更高。
根据上述各个实施例中,A+树数据结构的特征在内存储器与外存储器中的运用及测试结果可见,A+树算法在内存储器应用中,数据查询高效且稳定,且支持范围查询,适合应用于高并发实时处理***。而在外存储器的应用中,A+树算法操作所产生的随机磁盘I/O消耗控制理想,支持聚族索引、非聚集索引(改变数组元素结构),同样适合文件型数据库***。所以,A+树算法具有更好的通用性。
本领域普通技术人员可以理解实现实施例基于A+树数据结构存储的数据查询方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如基于A+树数据结构存储的数据查询方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存取存储器1502(Random Access Memory,简称RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (10)
1.基于A+树数据结构存储的数据查询方法,其特征在于,包括以下步骤:
将数据的关键字Key值按预设定的分割策略进行有序分割,获得由多个数字组成的数字排列特征序列;
将树形结构与数组结合生成A+树数据结构,基于所述A+树数据结构构建A+树,其中,所述A+树的树节点类型包括动态节点和/或静态节点;静态节点中包括头部指针以及指针数组,动态节点包括头部指针、引导数组和指针数组,其中,头部指针用于构建所A+树同层级节点间的单向有序链表,引导数组存储指针数组的下标,指针数组用于存储地址;在动态节点中,指针数组的长度按需动态扩展;而在静态节点,则是在A+树初始化时,根据对应的关键字Key的分割策略,为指针数组分配固定长度的存储空间,并初始化数组元素为空值;
将所述数字排列特征序列中的数字对应作为所述A+树中各层级节点的节点特征数字,有序与所述A+树中各层级节点内的数组下标进行关联,构成树形结构与数组相结合表示的链路;
将数据地址或数据页地址存储至所述A+树中叶子节点的数组中,以及将次级节点地址存储到所述A+树中非叶子节点的数组;
根据所述A+树中树节点类型的不同,通过所述链路进行数据查询,以及通过所述A+树中的所述叶子节点将所述链路与数据页结构相结合,构成A+树链路页,通过所述A+树链路页进行数据查询。
2.如权利要求1所述的方法,其特征在于,所述将数据的关键字Key值按预设定的分割策略进行有序分割,获得由多个数字组成的数字排列特征序列,包括:
检查数据的所述关键字Key值的长度是否小于所述分割策略中预设的所述Key值最大长度,其中,所述Key值最大长度为预设的应用数据集中最大关键字Key值位数;
若小于,则基于所述Key值最大长度与所述关键字Key值的长度之间的位数差进行补位0,使所述关键字Key值的长度等于所述Key值最大长度;
将补位后的所述关键字Key值基于所述分割策略中预设的分割长度进行有序分割,得到由多个数字组成的所述数字排列特征序列。
3.如权利要求1所述的方法,其特征在于,所述将所述数字排列特征序列中的数字对应作为A+树中各层级节点的节点特征数字,有序与所述A+树中各层级节点内的数组下标进行关联,构成树形结构与数组相结合表示的链路,包括:
根据当前节点的所述节点特征数字的位数长度,一次性申请并初始化所述静态节点中的所述指针数组以及所述动态节点中的所述引导数组对应长度的存储空间,其中,所述动态节点中的所述指针数组长度基于需求动态增减,所述引导数组存储同一节点内所述指针数组的下标,所述头部指针在所述A+树的同层级节点间形成单向有序链表;
设置根节点作为当前节点,从所述关键字Key值的所述数字排列特征序列中获取对应当前节点的所述节点特征数字;
若所述A+树中树节点为所述动态节点,将当前节点的所述节点特征数字作为当前节点中的所述引导数组的下标定位并读取引导数组元素,将读取的所述引导数组元素作为当前节点中的所述指针数组的下标,定位指针数组元素;
基于当前节点中定位到的指针数组元素获取次级节点地址,直至定位到所述叶子节点,构成与所述关键字Key值对应的通过树形结构与数组相结合表示的链路;
若所述A+树中树节点为所述静态节点,则直接将对应当前节点的所述节点特征数字作为当前节点中的所述指针数组的下标,定位指针数组元素并获取次级节点地址,直至定位到所述叶子节点;
构建从所述根节点到所述叶子节点通过树形结构与数组相结合表示的链路,构成与所述关键字Key值对应的通过树形结构与数组相结合表示的链路。
4.如权利要求3所述的方法,其特征在于,所述根据所述A+树中树节点类型的不同,通过所述链路进行数据查询,包括:
当所述A+树中各层级节点的树节点类型为所述静态节点时,或所述A+树中各层级节点的树节点类型为所述动态节点时,则基于当前节点的所述节点特征数字定位指针数组元素,基于定位到的指针数组元素提取次级节点地址进行寻址,直至所述叶子节点,其中,数据查询的时间复杂度为O(Htree),Htree为所述A+树的高度;
当所述A+树中各层级节点的树节点类型包括所述动态节点与所述静态节点时,则进行数据混合查询,其中,当所述A+树的高度为H,且从根节点至第L层为所述静态节点,第H-L层为所述动态节点,则从根节点开始到第L层节点为所述静态节点的数据查询,从L+1层节点至叶子节点层为所述动态节点的数据查询,且所述数据混合查询的时间复杂度为O(H-L)。
5.如权利要求4所述的方法,其特征在于,在所述基于当前节点的所述节点特征数字定位指针数组元素之前,包括:
若所述A+树中从当前节点层至根节点层均为所述静态节点,且在节点初始化时,当前节点层至根节点层在存储介质中横向、纵向有序排列,则采用地址推算方式,根据当前节点所在的节点层的首地址、当前节点的所述节点特征数字、当前节点在所述关键字Key值中截取的数字,计算当前节点地址,其中,地址推算公式为:
Pn=P0+Snode×Nn×10L+Nf×Sp
其中,Pn为当前节点地址,P0为当前节点所在的节点层的首地址,Snode为节点占用空间,Nn为截取的数字,在所述关键字Key值的数列特征序列中,将当前节点之前的节点特征数字组拼合得到,L为当前节点的所述节点特征数字长度,Nf为当前节点的所述节点特征数字;Sp为数组元素占用空间。
6.如权利要求3所述的方法,其特征在于,方法还包括对链路进行节点***,包括步骤:
在次级节点寻址过程中,若判断出获得的所述次级节点地址无效,则新建节点,并将所述新建节点作为当前节点继续进行次级节点寻址过程;
在所述新建节点的过程中,若当前节点为所述静态节点,则直接将所述新建节点的地址写入当前节点所定位的指针数组元素中,若当前节点为所述动态节点,则将当前节点的所述指针数组扩展一个数组元素,并将所述新建节点的地址写入所述指针数组扩展的元素中,再将所述指针数组的长度写入定位的所述定位的引导数组元素中;
若当前节点为所述叶子节点,则将所述关键字Key值对应的数据地址或数据页地址写入当前节点中定位的指针数组元素中,实现对应所述关键字Key值的链路节点***。
7.如权利要求6所述的方法,其特征在于,方法还包括对链路进行节点删除,包括步骤:
在所述A+树中,根据所述关键字Key值对应的链路,从叶子节点开始,以当前节点的所述节点特征数字定位待删除的指针数组元素;
若当前节点为所述静态节点,则将所定位到的指针数组元素置空;
若当前节点为所述动态节点,则先删除定位到的指针数组元素,并将所述指针数组发生变化的数组下标在所述引导数组中进行更新,其中,删除定位到的指针数组元素指将所述定位的数组元素之后的数组元素向前覆盖,并将所述指针数组长度减一个元素;
在更新完当前节点内的数组数据后,若检查到当前节点中的所述指针数组元素为空或所述指针数组长度为0,则继续向父节点方向进行所述链路的节点删除;
当在A+树中***、删除节点时,通过所述A+树的所述链路,更新所述节点及所述节点左右相邻节点的所述头部指针,形成同层级节点间的单向有序链表。
8.如权利要求7所述的方法,其特征在于,在执行所述对链路进行节点***以及所述对链路进行节点删除的步骤时,还包括:
将***的节点或删除的节点作为编辑节点;
通过关键字Key值对应的链路,将所述编辑节点的父节点作为当前节点,并以对应当前节点的所述节点特征数字进行指针数组定位;
在当前节点中,以定位到的所述指针数组为中心,从左右两个方向分别查找相邻且有效的指针数组元素,其中,查找到的指针数组元素有效,表示当前节点为所述编辑节点在父节点方向的有效分支节点;
若查找到所述编辑节点在父节点方向上的有效分支节点,则在同一方向以当前节点为父节点,在其次级节点的指针数组中继续查找相邻且有效的指针数组元素,直至同级节点层为止;
若未查找到所述编辑节点在父节点方向上的有效分支节点,则继续通过所述关键字Key值对应的链路,以当前节点的父节点作为当前节点,查找有效分支节点,直至根节点为止;
当查找至同级节点时,则更新当前所述编辑节点及当前所述编辑节点的左右相邻节点的头部指针,形成同层级节点间的所述单向有序链表。
9.如权利要求5所述的方法,其特征在于,所述通过所述A+树中的所述叶子节点将所述链路与数据页结构相结合,构成A+树链路页,通过所述A+树链路页进行数据查询,包括:
将所述A+树中的所述叶子节点作为页面信息节点,所述页面信息节点的数据包括前一节点地址、后一节点地址、节点内最小Key值、节点内最大Key值以及页面信息数组,其中,所述页面信息数组的页面信息数组元素存储着包括所述数据页地址和最大关键字Key值,所述页面信息节点间通过所述页面信息节点中的所述前一节点地址、所述后一节点地址形成双向链表,所述节点内最小Key值和所述节点内最大Key值组成节点Key范围;
在所述A+树中,通过所述页面信息节点将所述A+树的链路与数据页进行关联,构成所述A+树链路页,通过数据页匹配查找所述关键字Key值对应的数据所在的数据页。
10.如权利要求9所述的方法,其特征在于,所述通过数据页匹配查找所述关键字Key值对应的数据所在的数据页,包括:
将所述页面信息节点的父节点作为切换节点,其中,所述切换节点包括所述关键字Key值对应的页面信息节点地址;
读取所述切换节点中的所述页面信息节点地址,判断所述页面信息节点地址是否为空;
若所述页面信息节点地址不为空,则读取与所述页面信息节点地址对应的所述页面信息节点,所述页面信息节点内数组元素包括所述数据页中的最大Key值及所属数据页的存储地址;
若判断出所述关键字Key值在所述节点Key范围内,则在所述页面信息节点内的所述指针数组中,利用二分算法查找所述Key值所在的数据页;
当所述关键字Key值小于所述页面信息节点中所述最小Key值时,则利用节点间的双向链表跳转至当前所述页面信息节点的前一页面信息节点继续进行所述数据页匹配;
当所述关键字Key值大于所述页面信息节点中所述最大Key值时,则利用节点间的双向链表跳转至当前所述页面信息节点的后一页面信息节点继续进行所述数据页匹配;
读取A+树链路页中所述数据页地址对应的数据页,以及查找对应所述关键字Key值的数据,在查找到对应所述关键字Key时对所述切换节点的数据进行更换。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211045963.4A CN115374124B (zh) | 2022-08-29 | 2022-08-29 | 基于a+树数据结构存储的数据查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211045963.4A CN115374124B (zh) | 2022-08-29 | 2022-08-29 | 基于a+树数据结构存储的数据查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115374124A CN115374124A (zh) | 2022-11-22 |
CN115374124B true CN115374124B (zh) | 2023-05-12 |
Family
ID=84070473
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211045963.4A Active CN115374124B (zh) | 2022-08-29 | 2022-08-29 | 基于a+树数据结构存储的数据查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115374124B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108846133A (zh) * | 2018-07-04 | 2018-11-20 | 东北大学 | 基于b-m树的区块链存储结构、b-m树建立算法及查找算法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2117846C (en) * | 1993-10-20 | 2001-02-20 | Allen Reiter | Computer method and storage structure for storing and accessing multidimensional data |
US6266706B1 (en) * | 1997-09-15 | 2001-07-24 | Effnet Group Ab | Fast routing lookup system using complete prefix tree, bit vector, and pointers in a routing table for determining where to route IP datagrams |
JP4379894B2 (ja) * | 2006-11-28 | 2009-12-09 | 株式会社エスグランツ | カップルドノードツリーの分割/結合方法及びプログラム |
CN101515298B (zh) * | 2009-03-30 | 2013-09-25 | 华为技术有限公司 | 基于树形数据结构节点的***的方法和存储装置 |
CN111581215B (zh) * | 2020-05-07 | 2020-12-15 | 钟士平 | 数组树数据储存方法、快速查找方法及可读储存介质 |
CN113626432B (zh) * | 2021-08-03 | 2023-10-13 | 上海沄熹科技有限公司 | 一种支持任意Key值的自适应基数树的改进方法 |
-
2022
- 2022-08-29 CN CN202211045963.4A patent/CN115374124B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108846133A (zh) * | 2018-07-04 | 2018-11-20 | 东北大学 | 基于b-m树的区块链存储结构、b-m树建立算法及查找算法 |
Also Published As
Publication number | Publication date |
---|---|
CN115374124A (zh) | 2022-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110083601B (zh) | 面向键值存储***的索引树构建方法及*** | |
CN110413611B (zh) | 数据存储、查询方法及装置 | |
JP3771271B2 (ja) | コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法 | |
US4677550A (en) | Method of compacting and searching a data index | |
US5542087A (en) | Linear hashing for distributed records | |
US7697518B1 (en) | Integrated search engine devices and methods of updating same using node splitting and merging operations | |
CN105975587B (zh) | 一种高性能的内存数据库索引组织与访问方法 | |
CN110888886B (zh) | 一种索引结构及构建方法、键值存储***及请求处理方法 | |
CN111190904B (zh) | 一种图-关系数据库混合存储的方法和装置 | |
CN101655861B (zh) | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 | |
US7139765B1 (en) | Hierarchical method for storing data with improved compression | |
RU2005105582A (ru) | База данных и система управления знаниями | |
EA007209B1 (ru) | Способ управления ключами в базе данных, база данных и способ организации базы данных | |
CN111581215B (zh) | 数组树数据储存方法、快速查找方法及可读储存介质 | |
CN111126625B (zh) | 一种可扩展的学习索引方法及*** | |
CN115718819A (zh) | 一种索引构建方法、数据读取方法及索引构建装置 | |
CN113468080B (zh) | 一种全闪元数据的缓存方法、***及相关装置 | |
CN115374124B (zh) | 基于a+树数据结构存储的数据查询方法 | |
CN112434035B (zh) | 基于机器学习的并发哈希索引数据结构的索引方法及*** | |
CN112395213B (zh) | 一种基于内存面向热点数据的aceh索引结构及方法 | |
CN116701440B (zh) | 一种布谷鸟过滤器及数据***、查询、删除方法 | |
CN109325022A (zh) | 一种数据处理方法和装置 | |
CN116821127A (zh) | kv存储的分布式数据库哈希索引实现方法 | |
CN113821508B (zh) | 一种数组索引的实现方法和*** | |
CN113342706A (zh) | 一种基于非易失性内存的写优化可扩展哈希索引结构以及***、刷新和删除方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |