应用于跳跃表重复索引数据的范围查询方法及装置制造方法及图纸

技术编号:37466090 阅读:12 留言:0更新日期:2023-05-06 09:40
本发明专利技术公开了应用于跳跃表重复索引数据的范围查询方法,包括:在存储数据中的同一个Key值进行多次修改操作时,针对每次修改操作按序分配修改序号seq,生成操作记录(key,seq);将操作记录(key,seq)写入到跳跃表中,在生成节点时,针对相同key值的操作记录赋值起始指针f i rst和结束指针l ast,起始指针f i rst指向相同key值操作记录(key,seq)中修改序号seq最小的节点,结束指针l ast指向相同key值操作记录(key,seq)中修改序号seq最大的节点;在进行范围查询时,根据查询key值在跳跃表中查找对应的节点,基于起始指针f i rst和结束指针l ast定位到查询key值的查询范围。本发明专利技术提出了起始指针f i rst和结束指针l ast解决重复索引key值内部的管理方案,优化了传统跳跃表在大量重复索引key值的范围查询的性能。能。能。

【技术实现步骤摘要】
应用于跳跃表重复索引数据的范围查询方法及装置


[0001]本专利技术存储
,具体的涉及应用于跳跃表重复索引数据的范围查询方法及装置。

技术介绍

[0002]存储领域中,LSM树是一种存储引擎技术,LSM树:LSM树全称是Log Structured Merge Tree,是一种分层、有序、面向磁盘的数据结构。LSM树把增量的修改操作全部记录下来,等到一定大小后,将这些修改操作批量应用到磁盘中。这些增量的修改操作,先是记录在内存中,之后增长到某个设定值后才会应用到磁盘。跳跃表是LSM树中常用的一种内存索引,这些增量的修改操作填充到跳跃表中,可提供基于key值的查询和范围操作。实际应用中有一种这样的场景,对同一个key值大量的set/incr操作,这些修改操作会全部记录到内存中。当调用范围查询时,会在第L0层进行前向/后向指针的遍历,当同一个key值有很多的记录时,这些记录条目的遍历是相当耗时的。
[0003]具体地,LSM树存储引擎会为每一个修改操作分配一个修改序号seq,来区分对同一个key值的多次操作。分配的策略是从1开始顺序增大,每一个修改操作都会使用新的修改序号seq。LSM树存储引擎会首先将这些修改操作记录到内存,通常用的是跳跃表,记录的格式如图1所示,跳跃表的基础数据结构:{prev,next},保存的是前向指针/后向指针。
[0004]a,写入流程:写入时,顺序将这些修改操作(key,seq)应用到跳跃表中,查找节点(该节点比该key+seq小,该节点的next节点比该key+seq大),将修改操作(key,seq)加入所查找节点之后,修改前向节点的后向指针和后向节点的前向指针,修改本节点的前向指针、后向指针;
[0005]b,范围查询流程;指定查询key值,通过跳跃表二分查找到该key值对应的节点,使用前向指针或者后向指针依次遍历所有的节点,直到查到不满足查询条件的节点,停止查询。
[0006]在范围查询中,同一个key值可能会有很多不同的修改序号seq,从而导致同一个key值的节点有成千上万,甚至更多,那么依次遍历在此种场景下是非常耗时的操作。
[0007]因此,本专利技术解决的是跳跃表存储了大量的重复索引数据范围查询耗时较长,对检索性能有严重影响的问题。
[0008]有鉴于此,特提出本专利技术专利。

技术实现思路

[0009]针对以上阐述的问题,本专利技术提出了一种应用于跳跃表重复索引数据的范围查询方法,在重复key很多的时候性能更优,具体地,采用了如下技术方案:
[0010]应用于跳跃表重复索引数据的范围查询方法,包括:
[0011]在存储数据中的同一个Key值进行多次修改操作时,针对每次修改操作按序分配修改序号seq,生成操作记录(key,seq);
[0012]将所述操作记录(key,seq)写入到跳跃表中,在生成节点时,针对相同key值的操作记录赋值起始指针first和结束指针last,起始指针first指向相同key值操作记录(key,seq)中修改序号seq最小的节点,结束指针last指向相同key值操作记录(key,seq)中修改序号seq最大的节点;
[0013]在进行范围查询时,根据查询key值在所述跳跃表中查找对应的节点,基于起始指针first和结束指针last定位到查询key值的查询范围。
[0014]作为本专利技术的可选实施方式,本专利技术的应用于跳跃表重复索引数据的范围查询方法中,将所述操作记录(key,seq)写入到跳跃表中,在生成节点时,针对相同key值的操作记录赋值起始指针first和结束指针last包括:
[0015]根据修改序号seq将所述操作记录(key,seq)写入到跳跃表中,新生成节点;
[0016]检查当前新生成节点的key值与前向节点的key值是否相同;
[0017]若不相同,则忽略起始指针first和结束指针last的赋值;
[0018]若相同,则获取前向节点的起始指针first,赋值为当前新生成节点的起始指针first,获取起始指针first指向的起始节点,将起始节点的结束指针last修改为当前新生成节点。
[0019]作为本专利技术的可选实施方式,本专利技术的应用于跳跃表重复索引数据的范围查询方法,包括:
[0020]起始节点(key,seq1)新生成时,跳跃表不进行起始指针first和结束指针last的赋值;
[0021]当新生成节点(key,seq2)的key值与起始节点的key值相同,且新生成节点(key,seq2)的前向指针指向起始节点(key,seq1);
[0022]则向新生成节点(key,seq2)赋值起始指针first,所述起始指针first指向起始节点(key,seq1),向起始节点(key,seq1)赋值结束指针last,所述的结束指针last指向新生成节点(key,seq2)。
[0023]作为本专利技术的可选实施方式,本专利技术的应用于跳跃表重复索引数据的范围查询方法,包括:
[0024]当新生成节点(key,seqn)的key值与起始节点的key值相同,新生成节点(key,seqn)与起始节点(key,seq1)之间具有中间节点(key,seq2),

,(key,seqn

1),且新生成节点(key,seqn)的前向指标指向中间节点(key,seqn

1),后一中间节点的前向指标指向前一中间节点;
[0025]则向新生成节点(key,seqn)赋值起始指针first,所述起始指针first指向起始节点(key,seq1),修改起始节点(key,seq1)的结束指针last指向新生成节点(key,seqn)。
[0026]作为本专利技术的可选实施方式,本专利技术的应用于跳跃表重复索引数据的范围查询方法中,所述在进行范围查询时,根据查询key值在所述跳跃表中查找对应的节点,基于起始指针first和结束指针last定位到查询key值的查询范围包括:
[0027]根据查询key值,按照从小到大进行范围查询时;
[0028]在所述跳跃表中根据查询key值查找key值相同且修改序号seq最小的节点(key,seqmin),根据该节点的结束指针last的指向确定key值相同且修改序号seq最大的节点(key,seqmax);
[0029]根据所述修改序号seq最小的节点(key,seqmin)和修改序号seq最大的节点(key,seqmax)确定查询key值从小到大范围查询的最小边界节点和最大边界节点。
[0030]作为本专利技术的可选实施方式,本专利技术的应用于跳跃表重复索引数据的范围查询方法中,所述在进行范围查询时,根据查询key值在所述跳跃表中查找对应的节点,基于起始指针first和结束指针last定位到查询key值的查询范围包括:
[0031]根据查询key值,按照从大到小进行范围查询时;
[0032]在所本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.应用于跳跃表重复索引数据的范围查询方法,其特征在于,包括:在存储数据中的同一个Key值进行多次修改操作时,针对每次修改操作按序分配修改序号seq,生成操作记录(key,seq);将所述操作记录(key,seq)写入到跳跃表中,在生成节点时,针对相同key值的操作记录赋值起始指针first和结束指针last,起始指针first指向相同key值操作记录(key,seq)中修改序号seq最小的节点,结束指针last指向相同key值操作记录(key,seq)中修改序号seq最大的节点;在进行范围查询时,根据查询key值在所述跳跃表中查找对应的节点,基于起始指针first和结束指针last定位到查询key值的查询范围。2.根据权利要求1所述的应用于跳跃表重复索引数据的范围查询方法,其特征在于,将所述操作记录(key,seq)写入到跳跃表中,在生成节点时,针对相同key值的操作记录赋值起始指针first和结束指针last包括:根据修改序号seq将所述操作记录(key,seq)写入到跳跃表中,新生成节点;检查当前新生成节点的key值与前向节点的key值是否相同;若不相同,则忽略起始指针first和结束指针last的赋值;若相同,则获取前向节点的起始指针first,赋值为当前新生成节点的起始指针first,获取起始指针first指向的起始节点,将起始节点的结束指针last修改为当前新生成节点。3.根据权利要求2所述的应用于跳跃表重复索引数据的范围查询方法,其特征在于,包括:起始节点(key,seq1)新生成时,跳跃表不进行起始指针first和结束指针last的赋值;当新生成节点(key,seq2)的key值与起始节点的key值相同,且新生成节点(key,seq2)的前向指针指向起始节点(key,seq1);则向新生成节点(key,seq2)赋值起始指针first,所述起始指针first指向起始节点(key,seq1),向起始节点(key,seq1)赋值结束指针last,所述的结束指针last指向新生成节点(key,seq2)。4.根据权利要求3所述的应用于跳跃表重复索引数据的范围查询方法,其特征在于,包括:当新生成节点(key,seqn)的key值与起始节点的key值相同,新生成节点(key,seqn)与起始节点(key,seq1)之间具有中间节点(key,seq2),

,(key,seqn

1),且新生成节点(key,seqn)的前向指标指向中间节点(key,seqn

1),后一中间节点的前向指标指向前一中间节点;则向新生成节点(key,seqn)赋值起始指针first,所述起始指针first指向起始节点(key,seq1),修改起始节点(key,seq1)的结束指针last指向新生成节点(key,seqn)。5.根据权利要求1所述的应用于跳跃表重复索引数据的范围查询方法,其特征在于,所述在进行范围查询时,根据查询key值在所述跳跃表中查找对应的节点,基于起始指针first和结束指针last定位到查询key值的查询范围包括:根据查询ke...

【专利技术属性】
技术研发人员:徐锐波幸福卢文伟刘方
申请(专利权)人:北京云思智学科技有限公司
类型:发明
国别省市:

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

1