基于跳跃表的数据读写方法、系统、设备及存储介质技术方案

技术编号:38705195 阅读:10 留言:0更新日期:2023-09-08 14:45
本说明书一个或多个实施例提供一种基于跳跃表的数据读写方法、系统、设备及存储介质。跳跃表中的节点用于存储键及第一特征值,第一特征值用于记录本节点的键相对于前驱节点的键的分叉位置、以及本节点的键自分叉位置后的至少部分值。方法包括:获取待读写元素的目标键;若目标键不同于跳跃表的首个节点的键,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:将目标键的第二特征值与待比较节点的第一特征值进行比较;若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点;若满足预设条件,根据最后一次循环过程中的待比较节点进行待读写元素的读写操作。有利于降低比较开销。利于降低比较开销。利于降低比较开销。

【技术实现步骤摘要】
基于跳跃表的数据读写方法、系统、设备及存储介质


[0001]本说明书一个或多个实施例涉及数据读写
,尤其涉及一种基于跳跃表的数据读写方法、存储系统、电子设备及计算机可读存储介质。

技术介绍

[0002]跳跃表(SkipList)是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。在数据增删查改的过程中,不可避免的步骤是将待增删查改的元组的键(也即Key

Value(键值对)存储方式中的key)与跳跃表的节点存储的键进行比较,从而定位出增删查改位置。
[0003]比如在查找过程中,需要将待查找元素的键与跳表的节点中的键进行比较,以定位待查找节点,从而以待查找节点的键为索引读取待查找元素的具体内容;但是,在键较长的情况下,比较操作所需的运行资源开销较大。

技术实现思路

[0004]有鉴于此,本说明书一个或多个实施例提供一种基于跳跃表的数据读写方法、存储系统、电子设备及计算机可读存储介质。
[0005]为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
[0006]根据本说明书一个或多个实施例的第一方面,提出了一种基于跳跃表的数据读写方法,所述跳跃表包括多个索引层,所述跳跃表中的节点用于存储键以及第一特征值,所述第一特征值用于记录本节点的键相对于前驱节点的键的分叉位置、以及本节点的键自分叉位置后的至少部分值;所述方法包括:
[0007]获取待读写元素的目标键;
[0008]若所述目标键不同于所述跳跃表的首个节点的键,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:
[0009]将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;其中,所述第二特征值用于记录所述目标键相对于待比较节点的前驱节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值;
[0010]若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点;
[0011]若满足预设条件,根据最后一次循环过程中的待比较节点进行所述待读写元素的读写操作。
[0012]根据本说明书一个或多个实施例的第二方面,提出了一种存储系统,包括数据读写装置和跳跃表;所述跳跃表包括多个索引层,所述跳跃表中的节点用于存储键、以及本节点相对于前驱节点的第一特征值,所述第一特征值用于记录本节点的键与前驱节点的键的分叉位置信息以及自分叉位置后的至少部分值;
[0013]所述数据读写装置用于执行第一方面任意一项所述的方法。
[0014]根据本公开实施例的第三方面,提供一种电子设备,包括:
[0015]处理器;
[0016]用于存储处理器可执行指令的存储器;
[0017]其中,所述处理器执行所述可执行指令时,用于实现第一方面所述的方法。
[0018]根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
[0019]本公开的实施例提供的技术方案可以包括以下有益效果:
[0020]本公开实施例中,通过获得跳跃表中的节点的第一特征值和目标键的第二特征值,将目标键的第二特征值与待比较节点的第一特征值进行,实现省略掉公共部分的重复比较过程,有效节省比较开销,实现读写性能优化。
[0021]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
[0022]图1是一示例性实施例提供的一种有序链表及特征值的示意图。
[0023]图2是一示例性实施例提供的一种跳跃表及第一特征值的示意图。
[0024]图3是一示例性实施例提供的一种基于跳跃表的数据读写方法的示意图。
[0025]图4是一示例性实施例提供的一种复合键的第一特征值的示意图。
[0026]图5是一示例性实施例提供的另一种复合键的第一特征值的示意图。
[0027]图6是一示例性实施例提供的一种存储系统的示意图。
[0028]图7是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
[0029]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
[0030]需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
[0031]数据库是按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
[0032]键值对存储,即Key

Value存储,简称KV存储,是NoSQL(Not Only SQL,非关系型的数据库)存储的一种方式。它的数据按照键值对的形式进行组织,索引和存储。键值对存储非常适合不涉及过多数据关系的数据存储,比数据库存储拥有更好的读写性能。
[0033]数据库和键值对存储的存储空间普遍很大,所以必须按照一定的设计进行存放,否则对数据进行查找、删除、插入操作的效率会很低。其中一种用于存储数据的数据结构就是LSM

Tree(Log Structured Merge Tree,日志结构合并树),LSM

Tree是一种分层,有序,面向磁盘的数据结构,核心思想是通过将所有的随机写转化成顺序写来提高写性能。它的主要流程为所有的写请求都先追加写入日志文件(WAL文件)中,然后再插入内存中的MemTable中,当内存达到一定限制时,会将数据文件顺序写入到磁盘中形成内部有序的磁盘文件。读取数据时,采用多路归并的方式,分别从内存文件和磁盘文件中读取。
[0034]其中,WAL是指预写日志(Write Ahead Log),是KV存储/数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。通常,磁盘I/O操作是KV存储/数据库效率的一大瓶颈。在相同的数据量下,采用WAL日志在事务提交时,可以降低I/O数据量,并且把随机写转换为顺序写,从而提高了系统性能。
[0035]MemTable(内存表)是WAL文件内容在内存中的存储结构,通常用跳跃表(SkipList)来实现,提供了键值对数据的写入、删除以及读取的操作接口。...

【技术保护点】

【技术特征摘要】
1.一种基于跳跃表的数据读写方法,其特征在于,所述跳跃表包括多个索引层,所述跳跃表中的节点用于存储键以及第一特征值,所述第一特征值用于记录本节点的键相对于前驱节点的键的分叉位置、以及本节点的键自分叉位置后的至少部分值;所述方法包括:获取待读写元素的目标键;若所述目标键不同于所述跳跃表的首个节点的键,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;其中,所述第二特征值用于记录所述目标键相对于待比较节点的前驱节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值;若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点;若满足预设条件,根据最后一次循环过程中的待比较节点进行所述待读写元素的读写操作。2.根据权利要求1所述的方法,其特征在于,所述待读写元素包括待读元素和待写元素;若是待读元素,所述预设条件包括:所述目标键与所述待比较节点的键相同;若是待写元素,所述预设条件包括:所述目标键与所述待比较节点的键相同或者无下一个待比较节点。3.根据权利要求1所述的方法,其特征在于,所述根据比较结果指示的大小关系确定下一次循环过程中的待比较节点,包括:若跳跃表中的节点是按照键从小到大排序,如果比较结果指示目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;如果比较结果指示所述目标键大于所述待比较节点的键,将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点;若跳跃表中的节点是按照键从大到小排序,如果比较结果指示目标键大于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;如果比较结果指示所述目标键小于所述待比较节点的键,将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。4.根据权利要求1至3任意一项所述的方法,其特征在于,所述跳跃表中的任一节点存储的键的数据类型为字符串类型;任一节点的第一特征值包括:该节点的键与前驱节点的键之间的公共前缀的第一长度、以及该节点的键自公共前缀后的至少部分字符;所述目标键的第二特征值包括:所述目标键与所述待比较节点的前驱节点的键之间的公共前缀的第二长度、以及所述目标键自公共前缀后的至少部分字符。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:若所述目标键不同于所述跳跃表的首个节点的键,生成所述目标键相对于所述首个节点的第二特征值;若所述跳跃表中的节点是按照键从小到大排序的,所述若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点,包括:
若所述第二长度大于所述第一长度,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;若所述第二长度小于所述第一长度,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点;若所述第二长度等于所述第一长度、且所述第二特征值中的字符小于所述第一特征值中的字符,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;若所述第二长度等于所述第一长度、且所述第二特征值中的字符大于所述第一特征值中的字符,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。6.根据权利要求5所述的方法,其特征在于,在所述第一特征值中的字符和所述第二特征值中的字符非自公共前缀后的剩余全部字符的情况下,还包括:若所述第二特征值与所述第一特征值相同,将所述目标键中自公共前缀后的剩余字符和所述待比较节点自公共前缀后的剩余字符进行比较;若前者大于后者,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点;若前者小于后者,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;若前者等于后者,表征所述目标键与所述待比较节点的键相同,结束循环。7.根据权利要求1至3任意一项所述的方法,其特征在于,所述跳跃表中的任一节点存储的键为复合键,且复合键中的不同键的数据类型包括字符串类型或整数类型;任一节点的第一特征值包含该节点与前驱节点分叉的键的索引;如果分叉的键的数据类型为字符串类型,则所述第一特征值还包括该节点的分叉的键与前驱节点的分叉的键之间的公共前缀的第一长度、以及该节点的分叉的键自公共前缀后的至少部分字符;如果分叉的键的数据类型为...

【专利技术属性】
技术研发人员:赵树起
申请(专利权)人:杭州阿里巴巴飞天信息技术有限公司
类型:发明
国别省市:

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

1