CN110888886A - 一种索引结构及构建方法、键值存储系统及请求处理方法 - Google Patents

一种索引结构及构建方法、键值存储系统及请求处理方法 Download PDF

Info

Publication number
CN110888886A
CN110888886A CN201911212016.8A CN201911212016A CN110888886A CN 110888886 A CN110888886 A CN 110888886A CN 201911212016 A CN201911212016 A CN 201911212016A CN 110888886 A CN110888886 A CN 110888886A
Authority
CN
China
Prior art keywords
key
layer
tree
lightweight
index structure
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.)
Granted
Application number
CN201911212016.8A
Other languages
English (en)
Other versions
CN110888886B (zh
Inventor
万继光
姚婷
张艺文
刘志文
谢长生
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN201911212016.8A priority Critical patent/CN110888886B/zh
Publication of CN110888886A publication Critical patent/CN110888886A/zh
Application granted granted Critical
Publication of CN110888886B publication Critical patent/CN110888886B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种索引结构及构建方法、键值存储系统及请求处理方法,属于信息存储领域。设计了三层组合的树结构,包括:第三层是多个轻量级B+树结构,每棵B+树存储小范围内的所有key和对应的value地址;第二层是key有序数组,每个数组元素存储一个key、以及该key和下一个key范围内的key所对应的B+树的根节点地址;第一层是静态数组,每个数组元素存储第二层某个区间内的第一个key相对于key有序数组的起始地址的偏移地址,区间是根据第二层key的累积分布函数划分得到。索引结构的第一层加速了定位,第二层使全局key整体有序,加速定位又保证范围查找性能,第三层保证查找性能,使其既有hash的单点访问性能又有B+树的范围查找性能。

Description

一种索引结构及构建方法、键值存储系统及请求处理方法
技术领域
本发明属于信息存储技术领域,更具体地,涉及一种索引结构及构建方法、键值存储系统及请求处理方法。
背景技术
过去几十年传统的计算机存储结构都是通过内存总线访问易失的DRAM然后通过块接口访问非易失的存储介质,因此磁盘与内存之间存在巨大的交互开销。另外,DRAM受到存储密度和供电的限制很难继续支持持续增长的主存系统的容量需求。目前,非易失性存储技术(NVM)是最有可能解决以上问题的方案。NVM存储容量大,工作耗能小,字节可寻址,具有接近DRAM的性能和块设备一样的非易失性,能够同时替代DRAM和块设备构建未来的单层持久性内存系统。
存储架构的改变和持久性内存的特性为优化索引结构带来了机遇和挑战。索引结构是现代数据库的核心构件,在大数据时代索引结构的操作效率(增、删、单点查找、范围查找)尤为重要。然而,现有的两种基本索引类型(基于树的索引和基于哈希的索引)在不同操作上效率差异很大。具体地,跳表、B-tree、B+树在增加、删除、单点查找操作上性能比基于哈希的索引结构差,但是哈希表的key空间无序,因此不支持范围查找。另外NVM作为主存存储容量增加,现有索引结构需要考虑到性能随容量扩展的情况。具体地,跳表、B-tree、B+树的写性能随数据量增加而降低,哈希表虽然能维持比较稳定的写性能,但是在发生哈希冲突和重构哈希表时,写性能将会严重降低。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了一种索引结构及构建方法、键值存储系统及请求处理方法,其目的在于保留了传统基于树的索引结构和基于hash的索引结构的优点并规避了它们的不足之处,解决传统索引结构不能为不同请求类型提供全面的高效服务的问题,传统索引结构随数据量增加,性能下降或者在索引结构扩展时阻塞前台请求的问题。
为实现上述目的,按照本发明的第一方面,提供了一种内存的索引结构,该索引结构包括以下三层结构:
第三层是多个轻量级B+树结构,每棵B+树存储小范围内的所有key和对应的value地址;
第二层是key有序数组,每个数组元素存储key及其指向value的地址或key范围对应的轻量级B+树的根节点地址,每两个相邻的key组成一个小范围,末尾key是大于该key的范围;
第一层是静态数组,每个数组元素存储第二层某个区间内的第一个key和该key相对于key有序数组的起始地址的偏移地址,所述区间是根据第二层的所有key的累积分布函数CDF划分得到。
具体地,第三层中所述轻量级B+树的节点包含:
节点头部为16bytes,第一个8bytes存储节点类型、节点大小和X个标记,X表示这个节点中key值数据项的个数;第二个8bytes存储这个节点内全部key的前缀和前缀长度;
节点头部之后是追加的键值数据项,其中,key只存后缀。
为实现上述目的,按照本发明的第二方面,提供了一种第一方面所述的索引结构的构建方法,该方法包括以下步骤:
S1.写请求到来至索引结构内的数据量低于阈值期间,将写请求的value写入到存储设备,将写请求的key和value写入的地址插入B+树;
S2.当索引结构内的数据量达到阈值,把B+树的所有叶子节点中的key和该key对应的value的地址读出,按照key值大小顺序写到一个有序数组中,每个数组元素存储一个key和该key的value地址,将原有B+树删除;
S3.第二层构建完成后,计算第二层每个key的CDF值及其在静态数组中的数组元素i,并将key和它在第二层的偏移地址记录在静态数组第i个数组元素中;
S4.当第三层数量达到第二层数据量的K倍时,索引结构执行不影响前台请求的后台扩展操作。
具体地,所述计算第二层每个key的CDF值及其在静态数组中的数组元素i,具体如下:
Figure BDA0002295017100000031
Figure BDA0002295017100000032
其中,span代表静态数组元素个数占key有序数组元素个数的比例系数,N代表key有序数组的元素个数,CDF(key)代表key在key有序数组中的相对位置,keymax、keymin分别代表key有序数组的最大key和最小key。
具体地,所述索引结构执行不影响前台请求的后台扩展操作,包括以下步骤:
(1)后台扩展线程从原索引结构第二层有序数组的第一个key开始,依次将每个key对应的第三层轻量级B+树的叶子节点中上层或全部key写入到一个新的有序数组,确保扩展完成后第三层的树高度基本一致;
(2)在写入过程中删除无效数据;
(3)如果在扩展时出现前台请求,大于当前扩展有序数组的key的请求,在原索引结构中处理;小于当前扩展有序数组的key的请求,在新索引结构中处理;等于当前扩展有序数组的key的请求,需要等待当前key扩展完;
(4)新的有序数组即新索引结构的第二层,第二层全部生成后,依据步骤S3构建新索引结构的第一层;
(5)扩展完成,此后全部请求都由新索引结构服务。
具体地,轻量级B+树的生成过程如下:
(1)轻量级B+树只有单个key时,索引结构第二层有序数组中的指针都指向自己key对应的value;
(2)当索引结构第二层中的一个key范围插入键值数据项时,开始为相邻四个轻量级B+树分配一个共享的存储节点;
(3)当某个轻量级B+树写入的数据量超出容量,则迁移数据块中一半的数据,变成两个轻量级B+树共享一个存储节点;
(4)当某个轻量级B+树的数据量继续超出容量,继续迁移数据块中一半的数据,形成每个轻量级B+树独占一个完整的存储节点;
(5)当完整存储节点写满时,轻量级B+树回归传统B+树的增长方法,进行节点分类,产生父节点。
为实现上述目的,按照本发明的第三方面,提供了一种键值存储系统,所述键值存储系统采用第一方面所述的索引结构。
为实现上述目的,按照本发明的第四方面,提供了一种如第三方面所述的键值存储系统的请求处理方法,该方法包括以下步骤:
S1.请求的key经过第一层静态数组,通过该key的CDF值,定位该key在第二层的所在范围;
S2.在第二层的所在范围内二分查找,找到key在第二层的最小范围;
S3.在第二层定位的最小范围里内查找第三层的轻量级B+树;
S4.各请求在第三层的处理方式如下:
①对于写请求/插入请求,将写请求的value写入到存储设备,将写请求的key和value写入的地址插入B+树;
②对于读请求/单点查找请求,在轻量级B+树中查找;
③对于删除请求,在轻量级B+树中删除键值数据项;
④对于范围查找请求,首先找该key范围的轻量级B+树,然后找下一key范围的轻量级B+树,直到达到查找结束的key值;
具体地,步骤S1包括以下步骤:
S11.计算请求的key的CDF值以及在CDF数组中的元素i;
S12.请求的key与元素i中的keyi比较大小,如果key>keyi,那么key在元素i和i+1形成的key范围之间;如果key<keyi,那么key在元素i-1和i形成的key范围之间;
S13.根据第一层两个元素中的key及其在第二层中偏移,请求处理移动到第二层的有序数组;
S14.第一层两个元素所指向的有序数组中的两个key即请求的key所在第二层的范围。
为实现上述目的,按照本发明的第五方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第二方面所述的索引结构的构建方法,或者,如第四方面所述的请求处理方法。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)针对传统基于树的索引结构和基于hash的索引结构不能为不同请求类型提供全面的高效服务的问题,本发明采用三层结构:1)索引结构的第一层加速了定位;2)索引结构的第二层使全局key整体有序,既加速了定位又保证了范围查找性能;3)第三层的轻量级B+树数据量小、层数浅,保证了查找性能,使其既有hash的单点访问性能又有B+树的范围查找性能。
(2)针对传统索引结构随数据量增加,性能下降或者在索引结构扩展时阻塞前台请求的问题,本发明采用了不影响前台操作的后台索引结构扩展算法,能够在数据量增加,数据结构扩展的情况下仍然维持同样高效的访问性能。
(3)本发明通过轻量级B+树设计以及节点内部的前缀压缩,索引节构还能提升空间利用率降低空间浪费。
附图说明
图1为本发明实施例提供的一种内存的索引结构示意图;
图2为本发明实施例提供的Combo-tree第二层有序数组示意图;
图3为本发明实施例提供的依据第二层有序数组生成Combo-tree第一层CDF数组示例图;
图4为本发明实施例提供的Combo-tree第三层轻量级B+树生成及扩展示意图;
图5为本发明实施例提供的轻量级B+树内部节点数据组织示意图;
图6为本发明实施例提供的Combo-tree数据结构扩展示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明结合数据库存储系统的发展趋势和非易失性存储器件NVM的特点,设计了一种新的三层索引结构,Combo-tree。该结构的设计目标主要有两点,(1)解决传统索引结构(两类,基于树的索引结构和基于hash的索引结构)不能为不同请求类型提供全面的高效服务的问题,Combo-tree同时提供良好的单点访问和范围查找性能;(2)解决传统索引结构随数据量增加,性能下降或者在索引结构扩展时阻塞前台请求的问题,Combo-tree在数据量增加和索引结构扩展时维持稳定的访问性能。
下面将结合实施例及附图,具体说明本发明构造和使用索引结构Combo-tree的方法,该索引结构适用于NVM和DRAM。
如图1所示,第一层是CDF数组,数组元素i是key通过CDF函数计算求得,数组元素i的内容是key及其在第二层中的偏移地址;图中第二层是key有序的数组,每个数组元素存储key及其指向value或对应轻量级B+树的指针,每两个相邻的key组成一个狭小的key范围;图中第三层是一组轻量级B+树,一个轻量级B+树的key范围即第二层两个相邻key形成的狭小key范围。
该结构的构造和写入方法具体包括以下步骤:
(1)当索引结构中插入的数据量低于阈值时,为初始化阶段,该阶段的键值数据项(key-value)插入传统B+树,该步骤属于传统B+树的查找和插入操作;
(2)当传统B+树插入的数据量达到一定阈值时,B+树所有叶子节点中的键值数据项按照key排序并重新存储到一个key有序的数组中,生成Combo-tree的第二层;
(3)基于步骤(2)生成的Combo-tree第二层(key有序的数组),构造基于CDF值的数组,生成Combo-tree的第一层,用于加速前台请求定位到第二层;
(4)Combo-tree的第一层及第二层生成后,初始化完成;
(5)后续插入的键值数据项,首先经过第一层CDF加速定位到第二层有序数组的一个key范围;
(6)然后在经缩小的、第二层的key范围内,使用二分查找,定位到有序数组的相邻两个key之间(keyi<key<keyi+1);
(7)插入的键值数据项写到第二层两个相邻key之间对应的轻量级B+树,构成Combo-tree的第三层。每个轻量级B+树的key范围是第二层两个相邻key构成的key范围,一个轻量级B+树只存储它key范围内的数据。
(8)随着插入的数据量增加,当Combo-tree的第三层数据量达到第二层数据量的K倍时(K是可配置的常数,例如,4、8),开始扩展Combo-tree;
(9)扩展完成后Combo-tree继续服务前台请求。
优选地,步骤(2)中所生成的Combo-tree第二层结构如图2所示。第二层为有序数组,该有序数组中每个数组元素保存了一对key指针,指针指向这个key的value。每两个相邻的key构成一个小的key range。
优选地,步骤(3)中Combo-tree第一层的CDF数组构造示例如图3所示。
(3-1)对于Combo-tree第二层的有序数组中的key,本发明通过公式(1)求得key的CDF值。公式(1)中keymin表示有序数组(第二层)中最小的key,keymax表示有序数组中最大的key。因此,CDF(key)表示key在有序数组中的相对位置。
Figure BDA0002295017100000081
(3-2)对于每一个key的CDF值,本发明通过公式(2)求得它在第一层CDF数组中应该被存储的位置,即数组元素i。公式(2)中CDF(key)是公式(1)的结果,N表示Combo-tree第二层有序数组的元素个数,Span是一个可配置的常数参数,用于决定第一层CDF数组最终的元素个数,span越大,CDF数组越小;反之,span越小,CDF数组元素越多。
Figure BDA0002295017100000082
(3-3)由于多个大小相近的key可能求得同一个i,本发明取得到i的第一个key存储到第一层的CDF数组元素i中,并记录这个key在第二层有序数组中的偏移地址。
对于四项基本请求,如插入、单点查找、删除、范围查找,处理方式如下:
(1)请求的key通过公式(1)(2),计算CDF值以及在CDF数组中的元素i;
(2)请求的key与元素i中的keyi比较大小;
(3)如果key>keyi,那么key在元素i和i+1形成的key范围之间;
(4)如果key<keyi,那么key在元素i-1和i形成的key范围之间;
(5)根据第一层两个元素中的key及其在第二层中偏移,请求处理移动到第二层的有序数组;
(6)第一层两个元素所指向的有序数组中的两个key即请求的key所在第二层的范围;
(7)在第二层的这个key范围内做二分查找,定位到第二层两个相邻的key,k1和k2,请求的key满足k1<key<k2;
(8)根据第二层的指针,请求处理移动到第三层,k1、k2之间的轻量级B+树;
(9)各个请求在第三层的处理方式如下:
a.对于插入请求,键值数据项插入轻量级B+tree;
b.对于单点查找请求,在轻量级B+树中查找;
c.对于删除请求,在轻量级B+树中删除键值数据项;
d.对于范围查找请求,首先找该key范围的轻量级B+树,然后找下一key范围的轻量级B+树,直到达到查找结束的key值。
对于到达第三层一个轻量级B+树的插入请求,在轻量级B+树的节点扩展到256-byte前,追加写入键值数据项到这个唯一节点,并依照节点的增长方式移动数据;在轻量级B+树扩展到256-byte之后,通过传统B+树的定位方法找到节点,追加写入键值数据项到节点,并依照传统B+树的增长和收缩方式处理轻量级B+树。在一个节点内追加写入一个键值数据项的步骤如下:
(1)写键值数据项的value到内存空间;
(2)将键值数据项的key和指向value的指针追加的写到轻量级B+树的节点;
(3)通过8byte的原子写修改节点头部8byte中的标记位。
对于到达第三层一个轻量级B+树的单点查找请求,通过传统B+树的定位方法找到节点,然后在节点内遍历全部key;如果找到请求需要的键值数据项则返回数据,否则返回查找失败。
对于到达第三层一个轻量级B+树的删除请求,通过传统B+树的定位方法找到节点,然后通过8-byte的原子写修改节点头部的标记位,将对应key的标记位置为无效,‘0’。
对于到达第三层一个轻量级B+树的范围查找请求,首先与单点查找一样,找到该范围的第一个key,然后顺次查找同一棵轻量级B+树上的键值数据项;如果没有达到结束的key值,返回第二层,接着查找下一棵相邻的轻量级B+树。
如图4所示,数组中每个元素是一组key指针,其中,指针指向该key的value或者一棵轻量级B+树。整个有序数组将key空间分成很多狭窄的子空间,每两个相邻的数组元素中的key组成一个小的key范围。指针指向的轻量级B+树的key范围就是两个相邻的key形成的范围。例如k1的指针指向k1的value,对应key范围是k1≤key<k2,如果更多这一范围的键值数据项插入,那么在这一范围生成轻量级B+树。
对于第二层的key有序数组,为每一个key计算CDF值和它应该在CDF中存储的元素位置i,公式(1)和(2)。去第一个求得i的key,存入第一层CDF数组中的元素i中,同时存储这个key在第二层的偏移地址。在这个图3中,第二层有序数组有10个元素,span=2,第一层CDF数组元素个数为6;首先算出有序数组中10个元素分别对应的i值,然候取第一个求得i的key及其在第二层中的偏移地址存储到CDF数组中,生成Combo-tree的第一层。
第三层轻量级B+树的生长过程如下:
(7-1)对于第二层有序数组中的连续四个key(如图4所示,k1,k2,k3,k4),本发明在同一个NVM或DRAM数据块(256bytes)上为每一个key分配一个64-byte的空间,用于追加写入数据;
(7-2)第二层有序数组元素中的指针更新,由指向value更新为指向一个64-byte的节点。
(7-3)当64-byte的节点写满时,迁移k3和k4所指向的数据到NVM或DRAM数据块2,此时每个节点的空间大小为128bytes;
(7-4)当128-byte的节点写满时(如k3),迁移所在NVM或DRAM数据块的其他数据到新的数据块,如k4指向的数据到数据块3,此时对应节点增长到256bytes;
(7-5)256bytes节点写满后,轻量级B+树回归传统B+树的增长方法,进行节点分类,产生父节点;
在Combo-tree第三层轻量级B+树的生成过程中,每次迁移一半数据能扩展一倍节点空间。这样做有效避免了因为数据稀疏造成的节点空间浪费(节点空间大,存储数据量少)。
如图5所示,节点分为元数据部分和数据部分,元数据部分是16bytes的两个头部,数据部分是追加写的键值数据项。第一个8bytes的元数据存储节点类型、节点大小、标记位。标记位用于标记每个键值数据项是否有效,同时用于保证每次修改的一致性。第二个8byte存储全部key的公共前缀和长度。键值数据项只需要存储不同的后缀和指向value的指针。通过这种前缀压缩的方式,一个节点能够存储更多的键值数据项,提升空间利用率。
如图6所示,当Combo-tree第三层的数据量达到阈值时,需要扩展Combo-tree以维持高效的访问性能。Combo-tree使用后台线程扩展,具体地:
(1)从Combo-tree第二层有序数组的第一个key开始,合并第二层的key和其指向的轻量级B+树;
(2)删除无效的键值数据项;
(3)将有效的键值数据项有序的写到新的有序数组中;
(4)用一个标记记录当前扩展到的key值;
(5)如果前台请求的key小于该值,说明请求的key所在位置已经扩展完成,需要在新的Combo-tree上处理请求:
a.通过二分查找新的有序数组;
b.定位到两个相邻的key;
c.进入第三层,或生成轻量级B+树,或在已有的轻量级B+树上处理请求。
(6)如果前台请求的key大于扩展位置的key,说明请求的key还没有被扩展,需要在旧的Combo-tree上处理请求:
a.在第一层通过CDF定位到两个相邻元素;
b.在第二层对应的key范围里做二分查找,定位第二层两个相邻元素;
c.在第三层对应的轻量级B+树中处理请求。
以上步骤为Combo-tree构造和扩展的全过程。当Combo-tree处于既不初始化也不扩展的普通状态时,读写请求服务步骤为(5)、(6)、(7)。读写操作都需要经过步骤(5)、(6)定位到Combo-tree的第三层的一棵轻量级B+树上,然后在B+树上完成读写操作。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种内存的索引结构,其特征在于,该索引结构包括以下三层结构:
第三层是多个轻量级B+树结构,每棵B+树存储小范围内的所有key和对应的value地址;
第二层是key有序数组,每个数组元素存储key及其指向value的地址或key范围对应的轻量级B+树的根节点地址,每两个相邻的key组成一个小范围,末尾key是大于该key的范围;
第一层是静态数组,每个数组元素存储第二层某个区间内的第一个key和该key相对于key有序数组的起始地址的偏移地址,所述区间是根据第二层的所有key的累积分布函数CDF划分得到。
2.如权利要求1所述的索引结构,其特征在于,第三层中所述轻量级B+树的节点包含:
节点头部为16bytes,第一个8bytes存储节点类型、节点大小和X个标记,X表示这个节点中key值数据项的个数;第二个8bytes存储这个节点内全部key的前缀和前缀长度;
节点头部之后是追加的键值数据项,其中,key只存后缀。
3.一种权利要求1或2所述的索引结构的构建方法,其特征在于,该方法包括以下步骤:
S1.写请求到来至索引结构内的数据量低于阈值期间,将写请求的value写入到存储设备,将写请求的key和value写入的地址插入B+树;
S2.当索引结构内的数据量达到阈值,把B+树的所有叶子节点中的key和该key对应的value的地址读出,按照key值大小顺序写到一个有序数组中,每个数组元素存储一个key和该key的value地址,将原有B+树删除;
S3.第二层构建完成后,计算第二层每个key的CDF值及其在静态数组中的数组元素i,并将key和它在第二层的偏移地址记录在静态数组第i个数组元素中;
S4.当第三层数量达到第二层数据量的K倍时,索引结构执行不影响前台请求的后台扩展操作。
4.如权利要求3所述的方法,其特征在于,所述计算第二层每个key的CDF值及其在静态数组中的数组元素i,具体如下:
Figure FDA0002295017090000021
Figure FDA0002295017090000022
其中,span代表静态数组元素个数占key有序数组元素个数的比例系数,N代表key有序数组的元素个数,CDF(key)代表key在key有序数组中的相对位置,keymax、keymin分别代表key有序数组的最大key和最小key。
5.如权利要求3所述的方法,其特征在于,所述索引结构执行不影响前台请求的后台扩展操作,包括以下步骤:
(1)后台扩展线程从原索引结构第二层有序数组的第一个key开始,依次将每个key对应的第三层轻量级B+树的叶子节点中上层或全部key写入到一个新的有序数组,确保扩展完成后第三层的树高度基本一致;
(2)在写入过程中删除无效数据;
(3)如果在扩展时出现前台请求,大于当前扩展有序数组的key的请求,在原索引结构中处理;小于当前扩展有序数组的key的请求,在新索引结构中处理;等于当前扩展有序数组的key的请求,需要等待当前key扩展完;
(4)新的有序数组即新索引结构的第二层,第二层全部生成后,依据步骤S3构建新索引结构的第一层;
(5)扩展完成,此后全部请求都由新索引结构服务。
6.如权利要求5所述的方法,其特征在于,轻量级B+树的生成过程如下:
(1)轻量级B+树只有单个key时,索引结构第二层有序数组中的指针都指向自己key对应的value;
(2)当索引结构第二层中的一个key范围插入键值数据项时,开始为相邻四个轻量级B+树分配一个共享的存储节点;
(3)当某个轻量级B+树写入的数据量超出容量,则迁移数据块中一半的数据,变成两个轻量级B+树共享一个存储节点;
(4)当某个轻量级B+树的数据量继续超出容量,继续迁移数据块中一半的数据,形成每个轻量级B+树独占一个完整的存储节点;
(5)当完整存储节点写满时,轻量级B+树回归传统B+树的增长方法,进行节点分类,产生父节点。
7.一种键值存储系统,其特征在于,所述键值存储系统采用如权利要求1或2所述的索引结构。
8.一种如权利要求7所述的键值存储系统的请求处理方法,其特征在于,该方法包括以下步骤:
S1.请求的key经过第一层静态数组,通过该key的CDF值,定位该key在第二层的所在范围;
S2.在第二层的所在范围内二分查找,找到key在第二层的最小范围;
S3.在第二层定位的最小范围里内查找第三层的轻量级B+树;
S4.各请求在第三层的处理方式如下:
①对于写请求/插入请求,将写请求的value写入到存储设备,将写请求的key和value写入的地址插入B+树;
②对于读请求/单点查找请求,在轻量级B+树中查找;
③对于删除请求,在轻量级B+树中删除键值数据项;
④对于范围查找请求,首先找该key范围的轻量级B+树,然后找下一key范围的轻量级B+树,直到达到查找结束的key值。
9.如权利要求8所述的方法,其特征在于,步骤S1包括以下步骤:
S11.计算请求的key的CDF值以及在CDF数组中的元素i;
S12.请求的key与元素i中的keyi比较大小,如果key>keyi,那么key在元素i和i+1形成的key范围之间;如果key<keyi,那么key在元素i-1和i形成的key范围之间;
S13.根据第一层两个元素中的key及其在第二层中偏移,请求处理移动到第二层的有序数组;
S14.第一层两个元素所指向的有序数组中的两个key即请求的key所在第二层的范围。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求3至6任一项所述的索引结构的构建方法,或者,如权利要求8至9任一项所述的请求处理方法。
CN201911212016.8A 2019-11-29 2019-11-29 一种索引结构及构建方法、键值存储系统及请求处理方法 Active CN110888886B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911212016.8A CN110888886B (zh) 2019-11-29 2019-11-29 一种索引结构及构建方法、键值存储系统及请求处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911212016.8A CN110888886B (zh) 2019-11-29 2019-11-29 一种索引结构及构建方法、键值存储系统及请求处理方法

Publications (2)

Publication Number Publication Date
CN110888886A true CN110888886A (zh) 2020-03-17
CN110888886B CN110888886B (zh) 2022-11-11

Family

ID=69749920

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911212016.8A Active CN110888886B (zh) 2019-11-29 2019-11-29 一种索引结构及构建方法、键值存储系统及请求处理方法

Country Status (1)

Country Link
CN (1) CN110888886B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111597403A (zh) * 2020-05-21 2020-08-28 北京字节跳动网络技术有限公司 一种构建图索引的方法、装置、电子设备及存储介质
CN111651455A (zh) * 2020-05-26 2020-09-11 上海交通大学 基于机器学习的高效并发索引数据结构
CN111966678A (zh) * 2020-07-06 2020-11-20 复旦大学 一种有效提升gpu上b+树检索效率的优化方法
CN113626433A (zh) * 2021-08-03 2021-11-09 浪潮云信息技术股份公司 一种基于两层art树的数据存储方法
WO2022089560A1 (zh) * 2020-10-29 2022-05-05 第四范式(北京)技术有限公司 一种模型参数的存储方法和系统以及一种参数服务器集群
CN117131012A (zh) * 2023-08-28 2023-11-28 中国科学院软件研究所 一种可持久化和可扩展的轻量级多版本有序键值存储系统
US11954345B2 (en) 2021-12-03 2024-04-09 Samsung Electronics Co., Ltd. Two-level indexing for key-value persistent storage device
CN117573703B (zh) * 2024-01-16 2024-04-09 科来网络技术股份有限公司 时序数据的通用检索方法、系统、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1786962A (zh) * 2005-12-21 2006-06-14 中国科学院计算技术研究所 完美双数组trie树词典管理与检索方法
US20130226966A1 (en) * 2012-02-27 2013-08-29 Technion Research & Development Foundation Limited Processing a hierarchical structure to respond to a query
CN105975587A (zh) * 2016-05-05 2016-09-28 诸葛晴凤 一种高性能的内存数据库索引组织与访问方法
CN109407978A (zh) * 2018-09-27 2019-03-01 清华大学 高并发索引b+链表数据结构的设计与实现方法
CN109977111A (zh) * 2017-12-28 2019-07-05 英特尔公司 采用基于散列和基于树的键-值数据结构的数据管理系统
CN109977078A (zh) * 2019-03-26 2019-07-05 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN110083601A (zh) * 2019-04-04 2019-08-02 中国科学院计算技术研究所 面向键值存储系统的索引树构建方法及系统

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1786962A (zh) * 2005-12-21 2006-06-14 中国科学院计算技术研究所 完美双数组trie树词典管理与检索方法
US20130226966A1 (en) * 2012-02-27 2013-08-29 Technion Research & Development Foundation Limited Processing a hierarchical structure to respond to a query
CN105975587A (zh) * 2016-05-05 2016-09-28 诸葛晴凤 一种高性能的内存数据库索引组织与访问方法
CN109977111A (zh) * 2017-12-28 2019-07-05 英特尔公司 采用基于散列和基于树的键-值数据结构的数据管理系统
CN109407978A (zh) * 2018-09-27 2019-03-01 清华大学 高并发索引b+链表数据结构的设计与实现方法
CN109977078A (zh) * 2019-03-26 2019-07-05 广州荔支网络技术有限公司 一种数据的处理方法、装置、计算机设备和存储介质
CN110083601A (zh) * 2019-04-04 2019-08-02 中国科学院计算技术研究所 面向键值存储系统的索引树构建方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
TIM KRASKA等: "The Case for Learned Index Structures", 《SIGMOD’18》 *
ZHONGHUA WANG等: "ComboTree: A Persistent Indexing Structure With Universal Operational Efficiency and Scalability", 《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》 *
姚婷: "基于新型存储器件的键值存储系统性能优化研究", 《中国博士学位论文全文数据库 信息科技辑》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111597403A (zh) * 2020-05-21 2020-08-28 北京字节跳动网络技术有限公司 一种构建图索引的方法、装置、电子设备及存储介质
CN111651455A (zh) * 2020-05-26 2020-09-11 上海交通大学 基于机器学习的高效并发索引数据结构
CN111966678A (zh) * 2020-07-06 2020-11-20 复旦大学 一种有效提升gpu上b+树检索效率的优化方法
WO2022089560A1 (zh) * 2020-10-29 2022-05-05 第四范式(北京)技术有限公司 一种模型参数的存储方法和系统以及一种参数服务器集群
CN113626433A (zh) * 2021-08-03 2021-11-09 浪潮云信息技术股份公司 一种基于两层art树的数据存储方法
CN113626433B (zh) * 2021-08-03 2024-01-19 上海沄熹科技有限公司 一种基于两层art树的数据存储方法
US11954345B2 (en) 2021-12-03 2024-04-09 Samsung Electronics Co., Ltd. Two-level indexing for key-value persistent storage device
CN117131012A (zh) * 2023-08-28 2023-11-28 中国科学院软件研究所 一种可持久化和可扩展的轻量级多版本有序键值存储系统
CN117131012B (zh) * 2023-08-28 2024-04-16 中国科学院软件研究所 一种可持久化和可扩展的轻量级多版本有序键值存储系统
CN117573703B (zh) * 2024-01-16 2024-04-09 科来网络技术股份有限公司 时序数据的通用检索方法、系统、设备及存储介质

Also Published As

Publication number Publication date
CN110888886B (zh) 2022-11-11

Similar Documents

Publication Publication Date Title
CN110888886B (zh) 一种索引结构及构建方法、键值存储系统及请求处理方法
CN110825748B (zh) 利用差异化索引机制的高性能和易扩展的键值存储方法
JP5996088B2 (ja) 暗号ハッシュ・データベース
US9047301B2 (en) Method for optimizing the memory usage and performance of data deduplication storage systems
CN107463447B (zh) 一种基于远程直接非易失内存访问的b+树管理方法
CN107153707B (zh) 一种针对非易失内存的哈希表构建方法及系统
CN105975587B (zh) 一种高性能的内存数据库索引组织与访问方法
JP6764359B2 (ja) 重複除去dramメモリモジュール及びそのメモリ重複除去方法
US7831626B1 (en) Integrated search engine devices having a plurality of multi-way trees of search keys therein that share a common root node
CN109376156B (zh) 读取具有存储感知的混合索引的方法
US8086641B1 (en) Integrated search engine devices that utilize SPM-linked bit maps to reduce handle memory duplication and methods of operating same
WO2021208239A1 (zh) 一种低延迟的文件系统地址空间管理方法、系统及介质
CN105389135A (zh) 一种固态盘内部缓存管理方法
CN106055679A (zh) 一种多层次缓存感知型索引方法
CN113590612A (zh) Dram-nvm混合索引结构的构建方法及操作方法
CN113704217A (zh) 一种分布式持久性内存文件系统中元数据及数据组织架构方法
US7987205B1 (en) Integrated search engine devices having pipelined node maintenance sub-engines therein that support database flush operations
CN115718819A (zh) 一种索引构建方法、数据读取方法及索引构建装置
CN106909323B (zh) 适用于dram/pram混合主存架构的页缓存方法及混合主存架构系统
WO2022205544A1 (zh) 基于Cuckoo哈希的文件系统目录管理方法及系统
CN107273443B (zh) 一种基于大数据模型元数据的混合索引方法
CN111611246B (zh) 一种基于持久性存储器优化b+树索引性能的方法和系统
US7953721B1 (en) Integrated search engine devices that support database key dumping and methods of operating same
Jensen et al. Optimality in external memory hashing
CN116719813A (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