CN116680275A - 基于跳跃表的数据读写方法、系统、设备及存储介质 - Google Patents

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

Info

Publication number
CN116680275A
CN116680275A CN202310755146.6A CN202310755146A CN116680275A CN 116680275 A CN116680275 A CN 116680275A CN 202310755146 A CN202310755146 A CN 202310755146A CN 116680275 A CN116680275 A CN 116680275A
Authority
CN
China
Prior art keywords
node
compared
key
characteristic value
target key
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.)
Pending
Application number
CN202310755146.6A
Other languages
English (en)
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.)
Hangzhou Alibaba Feitian Information Technology Co ltd
Original Assignee
Hangzhou Alibaba Feitian Information Technology Co ltd
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 Hangzhou Alibaba Feitian Information Technology Co ltd filed Critical Hangzhou Alibaba Feitian Information Technology Co ltd
Priority to CN202310755146.6A priority Critical patent/CN116680275A/zh
Publication of CN116680275A publication Critical patent/CN116680275A/zh
Pending legal-status Critical Current

Links

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/2282Tablespace storage structures; Management thereof
    • 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/24Querying
    • G06F16/245Query processing
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

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

Description

基于跳跃表的数据读写方法、系统、设备及存储介质
技术领域
本说明书一个或多个实施例涉及数据读写技术领域,尤其涉及一种基于跳跃表的数据读写方法、存储系统、电子设备及计算机可读存储介质。
背景技术
跳跃表(SkipList)是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。在数据增删查改的过程中,不可避免的步骤是将待增删查改的元组的键(也即Key-Value(键值对)存储方式中的key)与跳跃表的节点存储的键进行比较,从而定位出增删查改位置。
比如在查找过程中,需要将待查找元素的键与跳表的节点中的键进行比较,以定位待查找节点,从而以待查找节点的键为索引读取待查找元素的具体内容;但是,在键较长的情况下,比较操作所需的运行资源开销较大。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种基于跳跃表的数据读写方法、存储系统、电子设备及计算机可读存储介质。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种基于跳跃表的数据读写方法,所述跳跃表包括多个索引层,所述跳跃表中的节点用于存储键以及第一特征值,所述第一特征值用于记录本节点的键相对于前驱节点的键的分叉位置、以及本节点的键自分叉位置后的至少部分值;所述方法包括:
获取待读写元素的目标键;
若所述目标键不同于所述跳跃表的首个节点的键,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:
将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;其中,所述第二特征值用于记录所述目标键相对于待比较节点的前驱节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值;
若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点;
若满足预设条件,根据最后一次循环过程中的待比较节点进行所述待读写元素的读写操作。
根据本说明书一个或多个实施例的第二方面,提出了一种存储系统,包括数据读写装置和跳跃表;所述跳跃表包括多个索引层,所述跳跃表中的节点用于存储键、以及本节点相对于前驱节点的第一特征值,所述第一特征值用于记录本节点的键与前驱节点的键的分叉位置信息以及自分叉位置后的至少部分值;
所述数据读写装置用于执行第一方面任意一项所述的方法。
根据本公开实施例的第三方面,提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器执行所述可执行指令时,用于实现第一方面所述的方法。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
本公开的实施例提供的技术方案可以包括以下有益效果:
本公开实施例中,通过获得跳跃表中的节点的第一特征值和目标键的第二特征值,将目标键的第二特征值与待比较节点的第一特征值进行,实现省略掉公共部分的重复比较过程,有效节省比较开销,实现读写性能优化。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
图1是一示例性实施例提供的一种有序链表及特征值的示意图。
图2是一示例性实施例提供的一种跳跃表及第一特征值的示意图。
图3是一示例性实施例提供的一种基于跳跃表的数据读写方法的示意图。
图4是一示例性实施例提供的一种复合键的第一特征值的示意图。
图5是一示例性实施例提供的另一种复合键的第一特征值的示意图。
图6是一示例性实施例提供的一种存储系统的示意图。
图7是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
数据库是按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
键值对存储,即Key-Value存储,简称KV存储,是NoSQL(Not Only SQL,非关系型的数据库)存储的一种方式。它的数据按照键值对的形式进行组织,索引和存储。键值对存储非常适合不涉及过多数据关系的数据存储,比数据库存储拥有更好的读写性能。
数据库和键值对存储的存储空间普遍很大,所以必须按照一定的设计进行存放,否则对数据进行查找、删除、插入操作的效率会很低。其中一种用于存储数据的数据结构就是LSM-Tree(Log Structured Merge Tree,日志结构合并树),LSM-Tree是一种分层,有序,面向磁盘的数据结构,核心思想是通过将所有的随机写转化成顺序写来提高写性能。它的主要流程为所有的写请求都先追加写入日志文件(WAL文件)中,然后再插入内存中的MemTable中,当内存达到一定限制时,会将数据文件顺序写入到磁盘中形成内部有序的磁盘文件。读取数据时,采用多路归并的方式,分别从内存文件和磁盘文件中读取。
其中,WAL是指预写日志(Write Ahead Log),是KV存储/数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。通常,磁盘I/O操作是KV存储/数据库效率的一大瓶颈。在相同的数据量下,采用WAL日志在事务提交时,可以降低I/O数据量,并且把随机写转换为顺序写,从而提高了系统性能。
MemTable(内存表)是WAL文件内容在内存中的存储结构,通常用跳跃表(SkipList)来实现,提供了键值对数据的写入、删除以及读取的操作接口。
跳跃表(SkipList)是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。在数据增删查改的过程中,不可避免的步骤是将待增删查改的元组的键(也即Key-Value(键值对)存储方式中的key)与跳跃表的节点存储的键进行比较,从而定位出增删查改位置。
比如在查找过程中,需要将待查找元素的键与跳表的节点中的键进行比较,以定位待查找节点,从而以待查找节点的键为索引读取待查找元素的具体内容;但是,在键较长的情况下,比较操作所需的运行资源开销较大。举个例子,例如请参阅图1所示的排序链表(以单级索引为例进行说明),该排序列表包括{a,b,c,d,e}5个节点,假设链表中(图1中的灰色部分)存储键,键的数据类型为字符串类型,如果要定位出链表中是否存在某个节点的字符串等于待查找的字符串S,相关技术中的做法是逐个进行全字符串比较,直到定位出某个节点的字符串大于等于字符串S,在字符串较长的情况下,比较操作开销较大。
针对于相关技术中的问题,本说明书实施例引入特征值概念,通过特征值比较来降低比较开销。这里对特征值进行举例说明,请参阅图1,发明人考虑到排序链表是存在某些公共前缀的,为了降低重复低效的操作,实现额外记录每个节点和前驱节点的公共前缀结束的位置,另外为了更有效的使用内存,还记录了各个节点和前驱节点分叉后的节点特异性的至少部分数据。
请参阅图1,(1)节点a没有前驱节点,预设分叉位置的下标为0,组成特征值(0,ABC);(2)节点b的前驱节点a,公共前缀为ABCD,组成特征值(4,XYZ);(3)节点c的前驱节点b,公共前缀为ABCDX,组成特征值(5,ZZZ);(4)节点d的前驱节点c,公共前缀为ABC,组成特征值(3,OXY);(5)节点e的前驱节点d,公共前缀为ABCOX,组成特征值(5,ZMN)。
针对于相关技术中的问题,本说明书实施例实现在跳跃表创建的过程中生成每个节点相对于前驱节点的第一特征值,并记录在跳跃表的节点中。所述跳跃表包括多个索引层,所述跳跃表跳跃表中的节点用于存储键以及第一特征值,所述第一特征值用于记录本节点的键相对于前驱节点的键的分叉位置、以及本节点的键自分叉位置后的至少部分值。其中,所述分叉位置指的是本节点的键的值相对于前驱节点的键的值差异化开始的位置。
举个例子,请参阅图2所示的跳跃表,节点中存储的键的数据类型为字符串类型,每个节点包括至少一个第一特征值。示例性的,每个节点的第一特征值的数量等于该节点对应的索引层的数量,换句话说,跳跃表中除首个节点之外的每个节点对应有N个索引层,则有N个前驱节点,则对应有N个第一特征值,N为大于0的整数;其中,跳跃表中的首个节点没有前驱节点,可以假定分叉位置为0。
请参阅图2,假设记录节点相对于前驱节点的公共前缀的长度以及分叉后的3个字符,则有:
(1)节点a没有前驱节点,预设分叉位置的下标为0,对应最高、次高和最低3个索引层,则有3个第一特征值,均为(0,ABC);
(2)节点b对应最低的索引层,在最低的索引层的前驱节点是a,节点a和节点b的公共前缀为ABCD,组成第一特征值(4,XYZ);
(3)节点c对应次高和最低2个索引层,在次高的索引层的前驱节点是a,节点a和节点c的公共前缀为ABCD,组成第一特征值(4,XZZ);在最低的索引层的前驱节点b,节点b和节点c的公共前缀为ABCDX,组成第一特征值(5,ZZZ);
(4)节点d对应最低的索引层,在最低的索引层的前驱节点是c,两者的公共前缀为ABC,组成第一特征值(3,OXY);
(5)节点e对应最高、次高和最低3个索引层,在最高索引层的前驱节点是a,两者的公共前缀为ABC,组成第一特征值(3,OXZ);在次高的索引层的前驱节点是c,两者的公共前缀是ABC,组成第一特征值(3,OXZ);在最低的索引层的前驱节点是d,两者的公共前缀为ABCOX,组成第一特征值(5,ZMN)。
针对于相关技术中的问题,请参阅图3,本说明书实施例提供了一种基于跳跃表的数据读写方法,所述方法可以由数据读写装置来执行,所述方法包括:
在S101中,获取待读写元素的目标键。
在S102中,若所述目标键不同于所述跳跃表的首个节点的键,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;其中,所述第二特征值用于记录所述目标键相对于待比较节点的前驱节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值;若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点。
在S103中,若满足预设条件,根据最后一次循环过程中的待比较节点进行所述待读写元素的读写操作。
本实施例实现将待读写元素的目标键和跳跃表中的节点的键之间的比较过程,转换为目标键的第二特征值与待比较节点的第一特征值的比较过程,实现省略掉公共部分的重复比较过程,有效节省比较开销,实现性能优化。
在一些实施例中,所述待读写元素包括待读元素和待写元素。
若是待读元素,所述预设条件包括:所述目标键与所述待比较节点的键相同。在满足预设条件的情况下,可以将最后一次循环过程中的待比较节点确定所述目标键在跳跃表中对应的读节点,以该读节点中的键为索引从对应存储位置读取待读元素的具体内容。在一种可能的情况中,如果确定跳跃表中的所有节点的键都与待读元素的目标键不同,则可以输出未存储待读元素的内容的提示信息。
若是待写元素,则包含有两种情况,一种是对已存储的元素的内容进行修改,另一种是写入新的元素。
针对于第一种情况,所述预设条件包括:所述目标键与所述待比较节点的键相同;在满足预设条件的情况下,可以将最后一次循环过程中的待比较节点确定所述目标键在跳跃表中对应的写节点,以该写节点中的键为索引修改对应存储位置的待写元素的具体内容。
针对于第二种情况,所述预设条件包括:无下一个待比较节点;即通过比较过程已经确定了跳跃表中的所有节点的键与待写元素的键之间的大小关系,无需再进行比较。则在满足预设条件的情况下,可以根据最后一次循环过程中的待比较节点确定所述待写元素对应的节点的插入位置,以实现所述待写元素的写操作。举个例子,假设该跳跃表是从小到大排序的,如果最后一次循环过程中的待比较节点大于待写元素的目标键,则将最后一次循环过程中的待比较节点的前面一个位置确定为插入位置;如果最后一次循环过程中的待比较节点小于待写元素的目标键,则将最后一次循环过程中的待比较节点的后面一个位置确定为插入位置。
在一些实施例中,如果目标键与跳跃表的首个节点的键相同,则无需进行接下来的比较过程。如果是待读元素,则以首个节点中的键为索引从对应存储位置读取待读元素的具体内容。如果是待写元素、且是上述第一种情况,则以首个节点中的键为索引修改对应存储位置的待写元素的具体内容。
在一些实施例中,跳跃表中的节点是可以按照键从小到大排序,也可以按照键从大到小排序,排序关系不同,则比较结果也有所不同。
如果跳跃表中的节点是按照键从小到大排序,则在目标键大于所述跳跃表的首个节点的键的情况下,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;其中,所述第二特征值用于记录所述目标键相对于待比较节点的前驱节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值;如果比较结果指示目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;如果比较结果指示所述目标键大于所述待比较节点的键,将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
如果跳跃表中的节点是按照键从大到小排序,则在目标键小于所述跳跃表的首个节点的键的情况下,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;其中,所述第二特征值用于记录所述目标键相对于待比较节点的前驱节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值;如果比较结果指示目标键大于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;如果比较结果指示所述目标键小于所述待比较节点的键,将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在一些实施例中,所述跳跃表中的任一节点存储的键的数据类型可以为字符串类型。则请参阅图2,任一节点的第一特征值包括:该节点的键与前驱节点的键之间的公共前缀的第一长度、以及该节点的键自公共前缀后的至少部分字符。所述目标键的第二特征值包括:所述目标键与所述待比较节点的前驱节点的键之间的公共前缀的第二长度、以及所述目标键自公共前缀后的至少部分字符。
可以理解的是,第一特征值和第二特征值中自公共前缀后的至少部分字符的数量可依据实际应用场景进行具体设置,比如图2中的第一特征值中包括该节点的键相对于前驱节点的键自公共前缀后的3个字符,也可以是2、4个或者剩余全部字符,本实施例对此不做任何限制。字符串的大小比较过程是按照字符对应的ASCII代码值逐个字符进行比较。比如对于字符串ABC和字符串ACD,首先第一个字符相同,第二字符B小于C,则字符串ABC小于字符串ACD。
由于跳跃表的多级索引特性,则除首个节点之外的任意一个节点对应有至少一个索引层,则具有至少一个前驱节点,除首个节点之外的任意一个节点对应有N个索引层,则有N个前驱节点,则对应有N个第一特征值,N为大于0的整数。
接下来以跳跃表中的节点是按照键从小到大排序为例,对比较过程进行示例性说明:
首先将目标键与所述跳跃表的首个节点的键进行比较,若目标键与所述跳跃表的首个节点的键相同,确定匹配节点,则无需进行以下操作,根据匹配节点进行接下来的读写操作;若所述目标键不同于所述跳跃表的首个节点的键,具体来说,(1)如果目标键小于所述跳跃表的首个节点的键,说明目标键不存在于所述跳跃表中;针对于待写元素且是写入新元素的情况,则可以在首个节点之前确定插入位置以实现待写元素的写操作;针对于其他情况,目标键不存在于所述跳跃表中,则可以输出报错信息。
(2)如果目标键大于所述跳跃表的首个节点的键,则需要继续比较,生成所述目标键相对于所述首个节点的第二特征值,所述第二特征值用于所述目标键相对于所述首个节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值,并且确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点。
可以理解的是,进行比较的所述目标键的第二特征值与所述待比较节点的第一特征值是相对于同一个前驱节点生成的。在第一种情况中,若所述第二长度大于所述第一长度,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第二种情况中,若所述第二长度小于所述第一长度,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第三种情况中,若所述第二长度等于所述第一长度、且所述第二特征值中的字符小于所述第一特征值中的字符,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第四种情况中,若所述第二长度等于所述第一长度、且所述第二特征值中的字符大于所述第一特征值中的字符,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
举个例子,请参阅图2,假设存在目标键S(假设为******),为了节省比较步骤,在没有前驱节点的情况下,假设分叉位置为0,则可以生成目标键S的特征值(0,***)先和头节点a的最高索引层的第一特征值(0,ABC)比较,同时生成目标键S相对于头节点a的第二特征值,假设为(α,β)。
如果目标键S小于头节点a,则目标键S在跳跃表中不存在,退出查找;举个例子,假设目标键S为ABADAB,头节点没有前驱节点,假设分叉位置为0,则可以生成目标键S的特征值(0,ABA)先和头节点a的最高索引层的第一特征值(0,ABC)比较,ABA小于ABC,则目标键S小于头节点a。
如果目标键S大于头节点a,确定头节点a在最高索引层指向的下一个节点e为待比较节点;举个例子,假设目标键S为ABDDAB,头节点没有前驱节点,假设分叉位置为0,则可以生成目标键S的特征值(0,ABD)先和头节点a的最高索引层的第一特征值(0,ABC)比较,ABD大于ABC,则目标键S大于头节点a。
目标键S的第二特征值(假设为(α,β))与待比较节点e的最高索引层的第一特征值(3,OXZ)进行比较,存在以下几种情况:
(1)α>3,说明目标键S和节点a有更长的公共前缀,节点e比目标键S大,不需要比较内容,下一个待比较节点为节点a在次高索引层指向的下一个节点c。举个例子,假设目标键S为ABCDABC,则目标键S相对于头节点a的第二特征值(α,β)即为(4,ABC);待比较节点e的第一长度为3,表示节点e的第4个位置的字符“O”比节点a的第4个位置的字符“D”大,而目标键的第一长度为4,表示目标键S的第4个位置的字符“D”与节点a的第4个位置的字符“D”相同,那显然节点e的第4个位置的字符“O”比目标键S的第4个位置的字符“D”大,节点e比目标键S大。
(2)α<3,说明目标键S和节点a有更短的公共前缀,目标键S比节点a大,说明目标键S也比节点e也大,生成目标键S相对于节点e的第二特征值,下一个待比较节点为节点e在最高索引层指向的下一个节点。举个例子,假设目标键S为ABXXABC,则目标键S相对于头节点a的第二特征值(α,β)即为(2,XXA);待比较节点e的第一长度为3,表示节点e的第3个位置的字符与节点a的第3个位置的字符相同,而目标键的第一长度为2,表示目标键S的第3个位置的字符大于节点a的第三个位置的字符,那显然目标键S的第3个位置的字符大于节点e的第3个位置的字符,即目标键S大于节点e。
(3)α=3,说明分叉的位置是相同的,则进行接下来的字符比较过程,如果目标键S中β小于节点e中的OXZ,说明目标键S小于节点e,下一个待比较节点为节点a在次高索引层指向的下一个节点c。
(4)α=3,说明分叉的位置是相同的,则进行接下来的字符比较过程,如果目标键S中β大于节点e中的OXZ,说明目标键S大于节点e,生成目标键S相对于节点e的第二特征值,下一个待比较节点为节点e在最高索引层指向的下一个节点。
在一种可能的实现方式中,如果所述第一特征值中的字符和所述第二特征值中的字符非自公共前缀后的剩余全部字符,并且第二特征值与所述第一特征值相同,可以将所述目标键自公共前缀后的剩余字符和所述待比较节点自公共前缀后的剩余字符进行比较。
举个例子,假设有键A(ABCDEF)、键B(ABCEDFJE)和键C(ABCEDFGF);键B相对于键A,公共前缀是ABC,保存分叉位置后的3个字符,也即(3,EDF);键C相对于键A,公共前缀是ABC,保存分叉位置后的3个字符,也是(3,EDF);公共前缀相同、保存的3个字符也是相同的,但是保存的字符不是分叉位置后的剩余全部字符,因此比较最后剩余的部分,也是键B中的“JE”和键C中的“GF”比较。
在第一种情况中,若前者大于后者,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第二种情况中,若前者小于后者,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第三种情况中,若所述目标键中的剩余值等于所述待比较节点的键中的剩余值,表征所述目标键与所述待比较节点的键相同,则结束循环。
沿用上述例子,请参阅图2,在目标键S的第二特征值(假设为(α,β))与待比较节点e的最高索引层的第一特征值(3,OXZ)进行比较的过程中,如果两者相同,即分叉位置相同,且自分叉位置后的部分字符也相同,则比较分叉位置后的剩余字符,比较目标键S和节点e从第6个字符以后的字符串内容。如果目标键S大于节点e,生成目标键S相对于节点e的第二特征值,下一个待比较节点为节点e在最高索引层指向的下一个节点。如果目标键S小于节点e,下一个待比较节点为节点a在次高索引层指向的下一个节点c。
本领域技术人员可以理解的是,以上以跳跃表中的节点是按照键从小到大排序进行示例性说明,跳跃表中的节点是按照键从大到小排序也适用于本方案,在此不做赘述。
本实施例中,对于键的数据类型为字符串类型,通过生成上述的第一特征值和第二特征值,并进行两者之间的比较,避免了公共前缀部分的比较过程,降低了比较开销,也提高了比较效率。
在另一些实施例中,所述跳跃表中的任一节点存储的键为复合键,复合键是由两个或多个唯一标识表中任何记录的属性组成的键,复合键中的不同键的数据类型可以是字符串类型也可以是整数类型。
这里对复合键形式对应的第一特征值和第二特征值进行示例性说明:
请参阅图4所示的第一特征值的数据结构,第一特征值包含分叉的键的索引。如果分叉的键的数据类型为字符串类型,则第一特征值还包括该节点的分叉的键与前驱节点的分叉的键之间的公共前缀的第一长度、以及该节点的分叉的键相对于前驱节点的分叉的键自公共前缀后的至少部分字符。如果分叉的键的数据类型为整数类型且位数为N位,则所述第一特征值还包括所述节点的分叉的键的N位整数中的高M位,M≤N。
换句话说,如果分叉的键的数据类型为字符串类型,则第一特征值中的分叉位置信息包括分叉的键的索引和第一长度;如果分叉的键的数据类型为整数类型,则第二特征值中的分叉位置信息包括分叉的键的索引。
同理,第二特征值包括所述目标键与待比较节点的前驱节点分叉的键的索引。如果分叉的键的数据类型为字符串类型,则第二特征值还包括所述目标键中分叉的键与待比较节点的前驱节点的分叉的键之间的公共前缀的第二长度、以及所述目标键中分叉的键相对于待比较节点的前驱节点的分叉的键自公共前缀后的至少部分字符。如果分叉的键的数据类型为整数类型且位数为N位,则所述第二特征值还包括所述目标键中的分叉的键的N位整数中的高M位;M≤N。
换句话说,如果分叉的键的数据类型为字符串类型,则第二特征值中的分叉位置信息包括分叉的键的索引和第二长度;如果分叉的键的数据类型为整数类型,则第二特征值中的分叉位置信息包括分叉的键的索引。
举个例子,对于如下的表1,复合键可以包括年级、班级和名字,其中,年级和班级的数据类型为整数类型,名字的数据类型为字符串类型。
表1
年级 班级 名字 成绩
1 3 张三 95
2 4 李四 80
3 3 张三 88
4 2 王五 65
5 1 李四 78
示例性的,复合键中的不同键的索引的数据类型可以为整数类型,比如可以按照复合键中不同键从左到右递增的顺序,设置第一个键的索引为0,第二个键的索引为1,第三个键的索引为2,第四个键的索引为3,依此类推。沿用上例,则第一个键“年级”的索引为0,第二个键“班级”的索引为1,第三个键“名字”的索引为2。
示例性的,复合键中的不同键的索引的数据类型也可以是字符类型,比如可以按照复合键中不同键从左到右递增的顺序,设置第一个键的索引为a,第二个键的索引为b,第三个键的索引为c,第四个键的索引为d,依此类推。
其中,如果分叉的键的数据类型为整数类型且为有符号整数,还需要先将有符号整数转换为无符号整数,再取高M位;避免符号带来的影响,保证比较结果的准确性。
举个例子,假设M取值为33,如果分叉的键的数据类型为整数类型且为有符号整数,需要预处理,如果分叉的键为64位有符号整数,则先加0x8000000000000000转成可比较的64位无符号正整数,如果分叉的键为32位及以下有符号整数,则先加0x80000000转成可比较的32位无符号正整数;在转换为无符号正整数之后,选取高33位,舍弃低位。如果分叉的键的数据类型为整数类型且为无符号整数,如果分叉的键为32位以内的无符号整数,直接使用原值,否则选取高33位,舍弃低位。
接下来以跳跃表中的节点是按照键从小到大排序的、且复合键中的不同键的索引按照复合键中不同键从左到右索引值依次递增为例,对比较过程进行示例性说明:
首先将目标键与所述跳跃表的首个节点的键进行比较,若所述目标键大于所述跳跃表的首个节点的键,生成所述目标键相对于所述首个节点的第二特征值,所述第二特征值包括所述目标键相对于所述首个节点分叉的键的索引,并且确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点。
在第一种情况中,若第二特征值中的索引大于所述第一特征值中的索引,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第二种情况中,若第二特征值中的索引小于所述第一特征值中的索引,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第三种情况中,若第二特征值中的索引等于所述第一特征值中的索引,表明目标键和待比较节点分叉的键相同,则根据所述第二特征值的剩余内容和所述第一特征值的剩余内容所指示的所述目标键与所述待比较节点的键之间的大小关系,确定下一次循环过程中的待比较节点。
在一种可能的实现方式中,如果分叉的键的数据类型为整数类型,则目标键的第二特征值还包括分叉的键的N位整数中的高M位;M≤N。所述待比较节点的第一特征值还包括:分叉的键的N位整数中的高M位;M≤N。
在第一种情况中,若所述第二特征值中的整数小于所述第一特征值中的整数,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第二种情况中,若所述第二特征值中的整数大于所述第一特征值中的整数,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第三种情况中,若所述第二特征值中的整数等于所述第一特征值中的整数,则继续将目标键中剩余内容和所述待比较节点中的剩余内容进行比较。
在另一种可能的实现方式中,如果分叉的键的数据类型为字符串类型,则待比较节点的第一特征值还包括该节点的分叉的键与前驱节点的分叉的键之间的公共前缀的第一长度、以及该节点的分叉的键自公共前缀后的至少部分字符;目标键的第二特征值还包括所述目标键中分叉的键与待比较节点的前驱节点的分叉的键之间的公共前缀的第二长度、以及所述目标键中分叉的键自公共前缀后的至少部分字符。
在第一种情况中,若所述第二长度大于所述第一长度,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第二种情况中,若所述第二长度小于所述第一长度,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第三种情况中,若所述第二长度等于所述第一长度、且所述第二特征值中的字符小于所述第一特征值中的字符,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
在第四种情况中,若所述第二长度等于所述第一长度、且所述第二特征值中的字符大于所述第一特征值中的字符,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
对于分叉的键的数据类型为字符串类型,相关比较过程可参见键的数据类型为字符串类型的描述过程,此处不再赘述。
本领域技术人员可以理解的是,以上以跳跃表中的节点是按照键从小到大排序进行示例性说明,跳跃表中的节点是按照键从大到小排序也适用于本方案,在此不做赘述。
本实施例中,对于复合键,通过生成上述的第一特征值和第二特征值,并进行两者之间的比较,跳过了相同的键的比较,而从分叉的键开始比较,降低了比较开销,也提高了比较效率。
在一些实施例中,考虑到动态插入/删除场景中,有可能在查询时,在相邻节点X和Y间插入节点M,如果使用X->M->Y的路径搜索,比较节点Y时,使用的是待查键相对于M的特征值,而当前节点Y记录的可能还是节点Y相对于节点X的第一特征值,还没有更新,错配的比较可能导致比较结果错误。因此,请参阅图5,所述第一特征值还包括前驱节点的第一标识。所述第二特征值还包括待比较节点的前驱节点的第二标识。在将所述目标键的第二特征值与待比较节点的第一特征值进行比较的过程中,首先将待比较节点的第一特征值中的第一标识与所述目标键的第二特征值中的第二标识进行比较,如果两者相同,表示待比较节点和目标键的前驱节点相同,则可以继续将所述目标键的第二特征值中的其他内容与待比较节点的第一特征值的其他内容进行比较,相关比较过程可参见上述描述,此处不在赘述。
如果若待比较节点的第一特征值中的第一标识与所述目标键的第二特征值中的第二标识不同,则将所述目标键与所述待比较节点的键进行比较,即将所述目标键的全部内容与所述待比较节点的键的全部内容进行比较,以避免错配的比较可能导致比较结果错误,保证比较的准确性。
可以理解的是,本实施例对于第一特征值和第二特征值的位数不做任何限制,可依据实际应用场景进行具体设置。在一个例子中,第一特征值和第二特征值的位数可以是64位。在另一个例子中,第一特征值和第二特征值的位数可以是128位。本说明书实施例对此不做任何限制。
举个例子,结合图5,以第一特征值的位数是64位为例进行示例性说明,图5示出了第一特征值中的不同部分的位数,如前驱节点的第一标识的位数可以是28位,分叉的键的索引可以是3位;如果分叉的键为整数类型,则图5中的M为33位;如果分叉的键为字符串类型,第一长度为9位,自公共前缀后的字符位数为24位。
在一些实施例中,所述跳跃表中的节点用于存储键、指向下一节点的指针和第一特征值;其中,第一特征值和指针可以存储在同一个缓存行(cacheline)中,从而降低比较过程中的缓存缺失(cachemiss)概率。以上实施方式中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述,因此上述实施方式中的各种技术特征的任意进行组合也属于本说明书公开的范围。
在一些实施例中,请参阅图6,本说明书实施例还提供了一种存储系统,包括数据读写装置和跳跃表;所述包括多个索引层,所述跳跃表跳跃表中的节点用于存储键、以及本节点相对于前驱节点的第一特征值,所述第一特征值用于记录本节点的键与前驱节点的键的分叉位置信息以及自分叉位置后的至少部分值;所述数据读写装置用于执行上述任意一项所述的方法。
示例性的,所述数据读写装置包括目标键获取模块,比较模块和读写模块。
所述目标键获取模块,用于获取待读写元素的目标键。
所述比较模块,用于若所述目标键不同于所述跳跃表的首个节点的键,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;其中,所述第二特征值用于记录所述目标键相对于待比较节点的前驱节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值;若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点;
所述读写模块,用于若满足预设条件,根据最后一次循环过程中的待比较节点进行所述待读写元素的读写操作。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
在一些实施例中,图7是一示例性实施例提供的一种设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
其中,图6所示的数据读写装置可以应用于如图7所示的设备中,以实现本说明书的技术方案。
在一些实施例中,本说明书实施例还提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器通过运行所述可执行指令以实现上述中任一项所述的方法。
在一些实施例中,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
在一些实施例中,所述电子设备集成一计算机程序产品,该电子设备执行该计算机程序产品时实现本说明书实施例提供的数据读写方法。
需要说明的是,本说明书所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (14)

1.一种基于跳跃表的数据读写方法,其特征在于,所述跳跃表包括多个索引层,所述跳跃表中的节点用于存储键以及第一特征值,所述第一特征值用于记录本节点的键相对于前驱节点的键的分叉位置、以及本节点的键自分叉位置后的至少部分值;所述方法包括:
获取待读写元素的目标键;
若所述目标键不同于所述跳跃表的首个节点的键,确定首个节点在最高索引层指向的下一个节点为待比较节点,循环执行以下过程直到满足预设条件:
将所述目标键的第二特征值与所述待比较节点的第一特征值进行比较;其中,所述第二特征值用于记录所述目标键相对于待比较节点的前驱节点的键的分叉位置、以及所述目标键自分叉位置后的至少部分值;
若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点;
若满足预设条件,根据最后一次循环过程中的待比较节点进行所述待读写元素的读写操作。
2.根据权利要求1所述的方法,其特征在于,所述待读写元素包括待读元素和待写元素;
若是待读元素,所述预设条件包括:所述目标键与所述待比较节点的键相同;
若是待写元素,所述预设条件包括:所述目标键与所述待比较节点的键相同或者无下一个待比较节点。
3.根据权利要求1所述的方法,其特征在于,所述根据比较结果指示的大小关系确定下一次循环过程中的待比较节点,包括:
若跳跃表中的节点是按照键从小到大排序,如果比较结果指示目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;如果比较结果指示所述目标键大于所述待比较节点的键,将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若跳跃表中的节点是按照键从大到小排序,如果比较结果指示目标键大于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;如果比较结果指示所述目标键小于所述待比较节点的键,将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述跳跃表中的任一节点存储的键的数据类型为字符串类型;
任一节点的第一特征值包括:该节点的键与前驱节点的键之间的公共前缀的第一长度、以及该节点的键自公共前缀后的至少部分字符;
所述目标键的第二特征值包括:所述目标键与所述待比较节点的前驱节点的键之间的公共前缀的第二长度、以及所述目标键自公共前缀后的至少部分字符。
5.根据权利要求4所述的方法,其特征在于,
所述方法还包括:
若所述目标键不同于所述跳跃表的首个节点的键,生成所述目标键相对于所述首个节点的第二特征值;
若所述跳跃表中的节点是按照键从小到大排序的,所述若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点,包括:
若所述第二长度大于所述第一长度,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若所述第二长度小于所述第一长度,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若所述第二长度等于所述第一长度、且所述第二特征值中的字符小于所述第一特征值中的字符,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若所述第二长度等于所述第一长度、且所述第二特征值中的字符大于所述第一特征值中的字符,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
6.根据权利要求5所述的方法,其特征在于,在所述第一特征值中的字符和所述第二特征值中的字符非自公共前缀后的剩余全部字符的情况下,还包括:
若所述第二特征值与所述第一特征值相同,将所述目标键中自公共前缀后的剩余字符和所述待比较节点自公共前缀后的剩余字符进行比较;
若前者大于后者,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若前者小于后者,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若前者等于后者,表征所述目标键与所述待比较节点的键相同,结束循环。
7.根据权利要求1至3任意一项所述的方法,其特征在于,所述跳跃表中的任一节点存储的键为复合键,且复合键中的不同键的数据类型包括字符串类型或整数类型;
任一节点的第一特征值包含该节点与前驱节点分叉的键的索引;如果分叉的键的数据类型为字符串类型,则所述第一特征值还包括该节点的分叉的键与前驱节点的分叉的键之间的公共前缀的第一长度、以及该节点的分叉的键自公共前缀后的至少部分字符;如果分叉的键的数据类型为整数类型且位数为N位,则所述第一特征值还包括所述节点的分叉的键的N位整数中的高M位,M≤N;
第二特征值包括所述目标键与待比较节点的前驱节点分叉的键的索引;如果分叉的键的数据类型为字符串类型,则所述第二特征值还包括所述目标键中分叉的键与待比较节点的前驱节点的分叉的键之间的公共前缀的第二长度、以及所述目标键中分叉的键自公共前缀后的至少部分字符;如果分叉的键的数据类型为整数类型且位数为N位,则所述第二特征值还包括所述目标键中的分叉的键的N位整数中的高M位;M≤N。
8.根据权利要求7所述的方法,其特征在于,
所述方法还包括:
若所述目标键不同于所述跳跃表的首个节点的键,生成所述目标键相对于所述首个节点的第二特征值;
若所述跳跃表中的节点是按照键从小到大排序的,所述若两者不同,根据比较结果指示的大小关系确定下一次循环过程中的待比较节点,包括:
若第二特征值中的索引大于所述第一特征值中的索引,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若第二特征值中的索引小于所述第一特征值中的索引,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若第二特征值中的索引等于所述第一特征值中的索引,根据所述第二特征值的剩余内容和所述第一特征值的剩余内容所指示的所述目标键与所述待比较节点的键之间的大小关系,确定下一次循环过程中的待比较节点。
9.根据权利要求8所述的方法,其特征在于,在分叉的键的数据类型为整数类型的情况下,所述根据所述第二特征值的剩余内容和所述第一特征值的剩余内容所指示的所述目标键与所述待比较节点的键之间的大小关系,确定下一次循环过程中的待比较节点,包括:
若所述第二特征值中的整数小于所述第一特征值中的整数,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若所述第二特征值中的整数大于所述第一特征值中的整数,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
10.根据权利要求8所述的方法,其特征在于,在分叉的键的数据类型为字符串类型的情况下,所述根据所述第二特征值的剩余内容和所述第一特征值的剩余内容所指示的所述目标键与所述待比较节点的键之间的大小关系,确定下一次循环过程中的待比较节点,包括:
若所述第二长度大于所述第一长度,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若所述第二长度小于所述第一长度,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若所述第二长度等于所述第一长度、且所述第二特征值中的字符小于所述第一特征值中的字符,指示所述目标键小于所述待比较节点的键,将所述待比较节点的前驱节点在下一索引层指向的下一个节点确定为下一次循环过程中的待比较节点;
若所述第二长度等于所述第一长度、且所述第二特征值中的字符大于所述第一特征值中的字符,指示所述目标键大于所述待比较节点的键,生成所述目标键相对于所述待比较节点的第二特征值,以及将所述待比较节点在本索引层指向的下一个节点确定为下一次循环过程中的待比较节点。
11.根据权利要求1所述的方法,其特征在于,所述第一特征值还包括前驱节点的第一标识;所述第二特征值还包括待比较节点的前驱节点的第二标识;
所述将所述目标键的第二特征值与待比较节点的第一特征值进行比较,包括:
若待比较节点的第一特征值中的第一标识与所述目标键的第二特征值中的第二标识相同,将所述目标键的第二特征值中的其他内容与待比较节点的第一特征值的其他内容进行比较;
所述方法还包括:
若待比较节点的第一特征值中的第一标识与所述目标键的第二特征值中的第二标识不同,将所述目标键与所述待比较节点的键进行比较。
12.一种存储系统,其特征在于,包括数据读写装置和跳跃表;所述跳跃表中的节点用于存储键、以及本节点相对于前驱节点的第一特征值,所述第一特征值用于记录本节点的键与前驱节点的键的分叉位置信息以及自分叉位置后的至少部分值;
所述数据读写装置用于执行权利要求1至11任意一项所述的方法。
13.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至11中任一项所述的方法。
14.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1至11中任一项所述方法的步骤。
CN202310755146.6A 2023-06-25 2023-06-25 基于跳跃表的数据读写方法、系统、设备及存储介质 Pending CN116680275A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310755146.6A CN116680275A (zh) 2023-06-25 2023-06-25 基于跳跃表的数据读写方法、系统、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310755146.6A CN116680275A (zh) 2023-06-25 2023-06-25 基于跳跃表的数据读写方法、系统、设备及存储介质

Publications (1)

Publication Number Publication Date
CN116680275A true CN116680275A (zh) 2023-09-01

Family

ID=87785392

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310755146.6A Pending CN116680275A (zh) 2023-06-25 2023-06-25 基于跳跃表的数据读写方法、系统、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116680275A (zh)

Similar Documents

Publication Publication Date Title
CN110083601B (zh) 面向键值存储系统的索引树构建方法及系统
US10114908B2 (en) Hybrid table implementation by using buffer pool as permanent in-memory storage for memory-resident data
US10503716B2 (en) Systems and methods for generating bit matrices for hash functions using fast filtering
JP6998928B2 (ja) データを記憶およびクエリするための方法、装置、設備、および媒体
US9292554B2 (en) Thin database indexing
US10698912B2 (en) Method for processing a database query
CN112181902B (zh) 数据库的存储方法、装置及电子设备
US11989185B2 (en) In-memory efficient multistep search
CN114691721A (zh) 图数据的查询方法、装置、电子设备及存储介质
US8515976B2 (en) Bit string data sorting apparatus, sorting method, and program
Alam et al. Performance of point and range queries for in-memory databases using radix trees on GPUs
CN111026736B (zh) 数据血缘管理方法及装置、数据血缘解析方法及装置
US9292553B2 (en) Queries for thin database indexing
CN110889424B (zh) 向量索引建立方法及装置和向量检索方法及装置
CN116521733A (zh) 一种数据查询方法及装置
CN110019295B (zh) 数据库检索方法、装置、系统以及存储介质
CN116680275A (zh) 基于跳跃表的数据读写方法、系统、设备及存储介质
CN115495462A (zh) 批量数据更新方法、装置、电子设备和可读存储介质
CN114969034A (zh) LSM-Tree架构数据库有序表的查询方法和装置
JP2021501427A (ja) コンテンツ非依存のファイルインデックス化の方法及びシステム
CN110321346B (zh) 一种字符串散列表实现方法和系统
CN113553367B (zh) 一种数据导入校验方法、设备及介质
CN111949439B (zh) 基于数据库的数据文件更新方法和装置
CN112380445B (zh) 数据查询方法、装置、设备和存储介质
US20220138338A1 (en) Data replacement apparatus, data replacement method, and program

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
CB02 Change of applicant information

Address after: Room 553, 5th Floor, Building 3, No. 969 Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province, 311121

Applicant after: Hangzhou Alibaba Cloud Feitian Information Technology Co.,Ltd.

Address before: Room 553, 5th Floor, Building 3, No. 969 Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province, 311121

Applicant before: Hangzhou Alibaba Feitian Information Technology Co.,Ltd.

CB02 Change of applicant information