基于字典树的索引结构、数据查询优化方法、主存管理器技术

技术编号:22330051 阅读:15 留言:0更新日期:2019-10-19 12:16
本发明专利技术公开了基于字典树的索引结构、数据查询优化方法、主存管理器,属于数据存储领域。索引结构由容器组成,容器存储T节点和S节点,完整键被划分为部分键,T节点存储部分键的前m/2位,S节点存储部分键的后m/2位,从字典树的根节点到某一节点路径上经过的部分键连接起来,形成完整键。索引结构更为紧凑,从而提高主存空间利用率。使用跳后继将T节点直接跳转到后续兄弟节点,从而减少比较次数,提升查找性能;使用T节点跳表将T节点跳转到S节点,使用容器跳表将S节点跳转到T节点,直接跳到最近的目标,从而跳过大量不必要的条目,提升的找性能。由主存管理器解析出的包含各个层次结构ID的指针P,将索引结构与主存地址完全解耦。

【技术实现步骤摘要】
基于字典树的索引结构、数据查询优化方法、主存管理器
本专利技术属于数据存储
,更具体地,涉及基于字典树的索引结构、数据查询优化方法、主存管理器。
技术介绍
现阶段,由于摩尔定律的推动,数据与磁盘容量都增长快速,而DRAM(DynamicRandomAccessMemory,动态随机存取存储器,以下统称为“主存”)的容量相对来说增长缓慢。面对海量数据,DRAM已成为系统性能瓶颈,提升DRAM的存储容量空间利用率对提升系统的整体性能至关重要。主存容量限制,使得海量索引不能完整地放入主存,常常部分存放在二级存储设备,如磁盘或固态盘,但上述二级存储设备I/O延迟高,使系统索引性能低下。对于数据库系统、文件系统等应用,构建高效的索引非常重要。数据爆炸式增长,对大数据存储提出了更高的I/O访问需求,虽然围绕提升主存利用率的相关技术在不断完善,如将数据压缩后放在主存,性能高效的索引结构层出不穷,如:二叉搜索树(BST)、平衡二叉搜索树(AVL树)、红黑树(RB树)、B-Tree等,但上述索引结构都是存储的完整的键(key),大多数键都是冗余的,这不可避免的会占用许多内存空间。现有一些技术,如:英特尔公司针对SIMD(单指令流多数据流)提出的SSE(StreamSIMDExtensions)技术,其他的如缓存行(cacheline)或者矢量单元(vectorunit)对齐等技术,能够尽可能提升现有索引机构的访问性能,但上述技术对主存空间的利用率低下。其他的索引结构,如哈希表(hash),会导致稀疏数据分布而致使对主存的利用率低下。字典树(或称为“Trie树”),如Judy、HAT、ART、HOT等,是一种快速、节省主存空间的存储结构。前缀树结构优化了它们的内部对齐,以提高缓存和向量单元的效率。虽然这些措施通常会显著提高性能,但主存利用率仍有改进空间,如:Judy、ART虽然提升了查找速度,但对存储密度有一定的负面影响。
技术实现思路
针对现有技术的缺陷,本专利技术的目的在于解决现有技术中索引结构对主存空间利用率低的技术问题。为实现上述目的,第一方面,本专利技术实施例提供了一种基于字典树的索引结构,该索引结构由多个容器组成,每个容器存储T节点和S节点,完整键按照从前往后、依次取m位的方式被划分为多个部分键,对于每个部分键,一个T节点存储部分键的前m/2位,当该部分键存在后m/2位时,一个S节点存储部分键的后m/2位,从字典树的根节点到某一节点路径上经过的部分键连接起来,形成完整键,m为偶数。具体地,容器包括标头和有效负载,该标头用于存储该容器的各种标识,该有效负载用于按照前序遍历的方式存储T节点和S节点。具体地,T节点包括标识域和值域,该标识域包括以下字段:节点类型标志t、部分键索引k、增量编码标志d、跳后继标志js及T节点跳表标志jt,该值域存储部分键的前m/2位;S节点包括标识域和值域,该标识域包括以下字段:节点类型标志t、部分键索引k、增量编码标志d及子容器标志c,该值域存储部分键的后m/2位。具体地,节点类型标志t,用于区分该节点的类型是内部节点、无效节点、没有值的叶子节点还是有值的叶子节点;部分键索引k,用于区分该节点是T节点还是S节点;增量编码标志d,用于表示该节点相对于最左兄弟节点的增量编码的偏移量;跳后继标志js,用于区分该T节点是否采用跳后继方式;T节点跳表标志jt,用于区分该T节点是否采用跳表方式;子容器标志c,用于表示该S节点是否存在子容器、子容器类型及是否进行路径压缩。具体地,容器的标头包括以下字段:容器的大小Size,用于表示该容器的存储容量;空闲位Free,用作其他功能的预留;容器跳表标志符J,用于表示该容器选择哪个跳表进行匹配跳转,容器分离标识符S,用于表示对容器进行哪种分离。具体地,容器的产生机制包括以下几种:1)索引结构初始化时,创建一个新的容器;2)完整键划分得到的部分键个数≥2时,每超出1个部分键创建一个新的容器,并在当前容器中该完整键的部分键对应的S节点的值域之后追加指针P,该指针P由当前容器指向新容器,表明新容器是当前容器的子容器,并修改该S节点的子容器标志c。具体地,当父容器的剩余容量大于等于子容器的大小时,将该子容器嵌入到父容器中,并将该子容器的标头替换为只包含容器的大小size,并修改嵌入到的父容器对应S节点的子容器标志c。第二方面,本专利技术实施例提供了一种基于第一方面所述的索引结构数据查询优化方法,索引结构的查找操作过程中,使用跳后继将T节点直接跳转到该T节点的后续兄弟节点,所述跳后继存储后续兄弟节点的地址,和/或,使用T节点跳表将T节点跳转到S节点,所述T节点跳表的条目指向存储该T节点的儿子S节点,和/或,使用容器跳表将S节点跳转到T节点,所述容器跳表的条目指向存储该S节点的儿子T节点。第三方面,本专利技术实施例提供了一种基于第一方面所述的索引结构的主存管理器,所述主存管理器的数据结构自顶向下包括:第一层为多个Superbins,其中,SB0处理大于L字节的所有请求,采用堆分配;其他Superbins处理小于等于L字节的所有请求,采用栈分配,第二层中,每个Superbin拥有多个Metabins;第三层中,每个Metabin拥有多个Bins;第四层中每个Bin有多个Chunks,各个层次结构的ID共同构成指针P,L为设定阈值。第四方面,本专利技术实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述第二方面所述的基于索引结构数据查询的优化方法。总体而言,通过本专利技术所构思的以上技术方案与现有技术相比,具有以下有益效果:1.本专利技术提出的索引结构由多个容器组成,每个容器存储T节点和S节点,完整键按照从前往后、依次取m位的方式被划分为多个部分键,对于每个部分键,一个T节点存储部分键的前m/2位,当该部分键存在后m/2位时,一个S节点存储部分键的后m/2位,从字典树的根节点到某一节点路径上经过的部分键连接起来,形成完整键,m为偶数,结构更为紧凑,提升了数据密度,从而提高主存空间利用率,每太字节的主存能存近万亿。2.本专利技术使用跳后继将T节点直接跳转到该T节点的后续兄弟节点,从而减少比较次数,提升索引结构的查找性能;使用T节点跳表将T节点跳转到S节点,所述T节点跳表的条目指向存储该T节点的儿子S节点,使用容器跳表将S节点跳转到T节点,所述容器跳表的条目指向存储该S节点的儿子T节点,直接跳到最近的目标,从而跳过大量不必要的条目,减少索引对主存的占用,提升索引结构的查找性能。3.本专利技术中主存管理器使用层次数据结构来有效地管理和分配空闲段,由主存管理器解析出的包含各个层次结构ID的指针P,取代了原始8字节的指针,进一步增加信息密度,并该指针将索引结构与主存地址完全解耦,方便随意重新组织和移动块。4.本专利技术中主存管理器,采用堆分配和栈分配混用,对于小内存分配采用栈分配,对于大内存分配采用堆分配,从而减少主存分配和回收带来的时间开销和过多的内存碎片。附图说明图1为本专利技术实施例提供的英语单词的字典树示意图;图2为本专利技术实施例提供的T节点与S节点的位结构示意图;图3为本专利技术实施例提供的容器位结构示意图;图4为本专利技术实施例提供的添加键“be”容器布本文档来自技高网
...

【技术保护点】
1.一种基于字典树的索引结构,其特征在于,该索引结构由多个容器组成,每个容器存储T节点和S节点,完整键按照从前往后、依次取m位的方式被划分为多个部分键,对于每个部分键,一个T节点存储部分键的前m/2位,当该部分键存在后m/2位时,一个S节点存储部分键的后m/2位,从字典树的根节点到某一节点路径上经过的部分键连接起来,形成完整键,m为偶数。

【技术特征摘要】
1.一种基于字典树的索引结构,其特征在于,该索引结构由多个容器组成,每个容器存储T节点和S节点,完整键按照从前往后、依次取m位的方式被划分为多个部分键,对于每个部分键,一个T节点存储部分键的前m/2位,当该部分键存在后m/2位时,一个S节点存储部分键的后m/2位,从字典树的根节点到某一节点路径上经过的部分键连接起来,形成完整键,m为偶数。2.如权利要求1所述的索引结构,其特征在于,容器包括标头和有效负载,该标头用于存储该容器的各种标识,该有效负载用于按照前序遍历的方式存储T节点和S节点。3.如权利要求1或2所述的索引结构,其特征在于,T节点包括标识域和值域,该标识域包括以下字段:节点类型标志t、部分键索引k、增量编码标志d、跳后继标志js及T节点跳表标志jt,该值域存储部分键的前m/2位;S节点包括标识域和值域,该标识域包括以下字段:节点类型标志t、部分键索引k、增量编码标志d及子容器标志c,该值域存储部分键的后m/2位。4.如权利要求3所述的索引结构,其特征在于,节点类型标志t,用于区分该节点的类型是内部节点、无效节点、没有值的叶子节点还是有值的叶子节点;部分键索引k,用于区分该节点是T节点还是S节点;增量编码标志d,用于表示该节点相对于最左兄弟节点的增量编码的偏移量;跳后继标志js,用于区分该T节点是否采用跳后继方式;T节点跳表标志jt,用于区分该T节点是否采用跳表方式;子容器标志c,用于表示该S节点是否存在子容器、子容器类型及是否进行路径压缩。5.如权利要求2所述的索引结构,其特征在于,容器的标头包括以下字段:容器的大小Size,用于表示该容器的存储容量;空闲位Free,用作其他功能的预留;容器跳表标志符J,用于表示该容器选择哪个跳表进行匹配跳转,容器分离标识符S,用于表示对容器进行哪种分...

【专利技术属性】
技术研发人员:曾令仿程稳
申请(专利权)人:华中科技大学
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1