CN116401412A - 索引查找方法、系统、电子设备及可读存储介质 - Google Patents
索引查找方法、系统、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN116401412A CN116401412A CN202310264179.0A CN202310264179A CN116401412A CN 116401412 A CN116401412 A CN 116401412A CN 202310264179 A CN202310264179 A CN 202310264179A CN 116401412 A CN116401412 A CN 116401412A
- Authority
- CN
- China
- Prior art keywords
- index
- node
- data structure
- bits
- bit
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 239000002131 composite material Substances 0.000 claims description 34
- 230000015654 memory Effects 0.000 claims description 28
- 238000004891 communication Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- PCTMTFRHKVHKIS-BMFZQQSSSA-N (1s,3r,4e,6e,8e,10e,12e,14e,16e,18s,19r,20r,21s,25r,27r,30r,31r,33s,35r,37s,38r)-3-[(2r,3s,4s,5s,6r)-4-amino-3,5-dihydroxy-6-methyloxan-2-yl]oxy-19,25,27,30,31,33,35,37-octahydroxy-18,20,21-trimethyl-23-oxo-22,39-dioxabicyclo[33.3.1]nonatriaconta-4,6,8,10 Chemical compound C1C=C2C[C@@H](OS(O)(=O)=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H]([C@H](C)CCCC(C)C)[C@@]1(C)CC2.O[C@H]1[C@@H](N)[C@H](O)[C@@H](C)O[C@H]1O[C@H]1/C=C/C=C/C=C/C=C/C=C/C=C/C=C/[C@H](C)[C@@H](O)[C@@H](C)[C@H](C)OC(=O)C[C@H](O)C[C@H](O)CC[C@@H](O)[C@H](O)C[C@H](O)C[C@](O)(C[C@H](O)[C@H]2C(O)=O)O[C@H]2C1 PCTMTFRHKVHKIS-BMFZQQSSSA-N 0.000 description 1
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
Abstract
本申请提供一种索引查找方法、系统、电子设备及可读存储介质,所述方法包括获取包含待查找索引的目标索引序列;所述目标索引序列中的至少部分索引为字符串类型的索引;将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构,并确定编码后的所述数据结构对应的第一取值;采用二分查找的方式,将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配,以在所述二叉查找树上查找所述待查找索引。
Description
技术领域
本申请涉及数据存储技术领域,尤其涉及一种索引查找方法、装置、电子设备及可读存储介质。
背景技术
在数据存储技术领域中,K-V存储是常用的一种方式。K-V存储,即Key-Value存储,在K-V存储中,数据按照键值对的形式进行组织,利用Key做索引来实现数据的存储、修改、查询和删除功能。
在K-V存储中,增删改查都严重依赖于的索引查找的性能,为了提升基于的索引查找的性能,多种算法和数据结构被设计出来,比如二叉树、B树、B+树、Bw树等。但即便如此,索引的查找仍然是最耗时的操作,亟待进一步优化。
发明内容
本申请提供一种索引查找方法,所述方法包括:
获取包含待查找索引的目标索引序列;所述目标索引序列中的至少部分索引为字符串类型的索引;
将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构,并确定编码后的所述数据结构对应的第一取值;其中,所述目标索引序列对应的二叉查找树上的节点,分别用于存储所述目标索引序列中包含的各个索引;所述二叉查找树上的节点存储的索引的数据结构,包括用于填充与该节点存储的索引的至少部分索引内容的若干bit位,以及用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度的若干bit位;
采用二分查找的方式,将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配,以在所述二叉查找树上查找所述待查找索引。
可选的,数据库维护了用于存储数据的索引树;
所述获取包含待查找索引的目标索引序列,包括:
从数据库维护的用于存储数据的所述索引树上,采用二分查找的方式查找包含所述待查找索引的目标索引序列。
可选的,所述将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构之前,还包括:
实时构建与获取到的所述目标索引序列对应的二叉查找树;
计算所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀的长度;
基于计算出的所述公共字符前缀的长度,以及所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构。
可选的,所述数据结构中的至少一位bit位为预设的第一标志位;所述第一标志位用于标志所述数据结构中用于填充所述公共字符前缀的长度的bit位;
基于计算出的所述公共字符前缀的长度,以及所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共前缀之后部分对应的部分索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构,包括:
基于所述第一标志位确定所述数据结构中填充所述公共字符前缀的长度的bit位,并将计算出的所述公共字符前缀的长度填充至确定出的bit位;以及,将所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后的部分对应的索引内容,存储至确定出的bit位以外的剩余bit位。
可选的,所述第一标志位对应的取值包括第一取值和第二取值;其中,如果所述公共字符前缀的长度不超过预设阈值,则所述第一标志位的取值为第一取值,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为N以及所述N个bit位在所述数据结构中的位置;如果所述公共字符前缀的长度超过预设阈值,所述第一标志位的取值为第二取值,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为M以及所述M个bit位在所述数据结构中的位置;所述M的取值大于所述N的取值。
可选的,所述目标索引序列中的索引包括复合索引;所述复合索引为由包含所述字符串类型的索引在内的至少两个索引组合而成的索引。
可选的,所述数据结构中的至少两位bit位为预设的第二标志位;所述第二标志位用于标志二叉查找树上的节点存储的复合索引,相对于该节点对应的父节点存储的复合索引的公共索引的索引标识;
所述基于计算出的所述公共字符前缀的长度,以及所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构,包括:
确定所述二叉查找树上的节点存储的复合索引,相对于该节点对应的父节点存储的复合索引的公共索引的索引标识,以及至少一个非公共索引;
基于所述公共索引的索引标识,以及所述二叉查找树上的节点,相对于该节点对应的父节点的非公共索引的公共前缀长度,以及所述二叉查找树上的节点,相对于该节点对应的父节点的非公共索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构。
可选的,所述数据结构包括64位bit位;所述64位bit位中包含用于表示所述第一标志位和所述第二标志位的4个bit位;所述第一标志位对应所述4个bit位中的1个比特位;所述第二标志位对应所述4个位中的3个比特位。
可选的,所述64位bit位中的高4位或者低4位用于表示所述第一标志位和所述第二标志位。
可选的,所述预设阈值为4096;所述N的取值为12;所述M的取值为20;
其中,如果所述公共字符前缀的长度不超过4096,则所述第一标志位的取值为1,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为12,并且所述12个bit位为所述64个bit位中的低12位或者高12位;相应的,所述数据结构中用于填充非公共字符前缀对应的索引内容的bit位的数量为48,并且所述48个bit位为所述64个bit位中的低12-59位或者高12-59位;
如果所述公共字符前缀的长度超过4096,所述第一标志位的取值为0,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为20;相应的,所述数据结构中用于填充非公共字符前缀对应的索引内容的bit位的数量为40,并且所述40个bit位为所述64个bit位中的低20-59位或者高20-59位。
本申请还提供一种索引查找装置,所述装置包括:
索引序列获取单元,用于获取包含待查找索引的目标索引序列;所述目标索引序列中的至少部分索引为字符串类型的索引;
待查找索引编码单元,用于将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构,并确定编码后的所述数据结构对应的第一取值;其中,所述目标索引序列对应的二叉查找树上的节点,分别用于存储所述目标索引序列中包含的各个索引;所述二叉查找树上的节点存储的索引的数据结构,包括用于填充与该节点存储的索引的至少部分索引内容的若干bit位,以及用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度的若干bit位;
索引匹配单元,用于采用二分查找的方式,将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配,以在所述二叉查找树上查找所述待查找索引。
本申请还提供一种索引查找系统,所述索引查找系统执行实现上述方法。
本申请还提供一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述的方法。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。
在以上实施例记载的方案中,将目标索引序列中的索引内容转换为预设的数据结构,将传统的字符串匹配过程,转换为值比较的过程,不仅可以降低索引的存储开销,还可以减少索引查找的操作,提高索引查找的效率。
附图说明
图1是一示例性的实施例示出的一种索引查找方法的架构示意图。
图2是一示例性的实施例示出的一种索引查找方法的流程示意图。
图3是一示例性的实施例示出的一种目标索引序列对应的二叉查找树的示意图。
图4是一示例性的实施例示出的另一种目标索引序列对应的二叉查找树的示意图。
图5是一示例性的实施例示出的一种包含复合索引的目标索引序列对应的二叉查找树的示意图。
图6是一示例性的实施例示出的一种索引查找装置所在电子设备的硬件结构图。
图7是一示例性的实施例示出的一种索引查找装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
图1是一示例性实施例提供的一种索引查找方法的架构示意图。如图1所示,该系统可以包括网络10、服务端11、若干客户端,如台式电脑12,笔记本电脑13,手机14等。
服务器11可以为包含一独立主机的物理服务器,或者该服务器11可以为主机集群承载的虚拟服务器、云服务器等。手机12-14只是用户可以使用的一种类型的电子设备。实际上,用户显然还可以使用诸如下述类型的电子设备:平板设备、笔记本电脑、掌上电脑(PDAs,Personal Digital Assistants)、可穿戴设备(如智能眼镜、智能手表等)等,本说明书一个或多个实施例并不对此进行限制。网络10可以包括多种类型的有线或无线网络。
在一实施例中,服务器11可以与手机12-14进行配合;其中,可由手机12-14获取待查找索引以及包含所述待查找索引的目标索引序列,并将获取到的待查找索引以及包含所述待查找索引的目标索引序列通过网络10上传至服务器11,然后由服务器11基于本说明书的索引查找方法进行查找。在另一实施例中,手机12-14可以独立实现本说明书的索引查找方法;其中,由手机12-14获取待查找索引以及包含所述待查找索引的目标索引序列,并基于本说明书的索引查找方法进行查找。
下面结合附图对本说明书的索引查找方案进行详细说明。
图2是一示例性实施例提供的一种索引查找方法的流程图。如图2所示,该方法可以包括以下步骤:
步骤202,获获取包含待查找索引的目标索引序列;所述目标索引序列中的至少部分索引为字符串类型的索引。
步骤204,将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构,并确定编码后的所述数据结构对应的第一取值;其中,所述目标索引序列对应的二叉查找树上的节点,分别用于存储所述目标索引序列中包含的各个索引;所述二叉查找树上的节点存储的索引的数据结构,包括用于填充与该节点存储的索引的至少部分索引内容的若干bit位,以及用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度的若干bit位。
步骤206,采用二分查找的方式,将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配,以在所述二叉查找树上查找所述待查找索引。
在本说明书中,所述目标索引序列可以为包含所述待查找索引的索引序列,其中,目标索引序列中的至少部分索引为字符串类型的索引。在实际应用中,目标索引序列中的索引可能全部是字符串类型的,也可能既包括整数类型,也包括字符串类型,在本说明书中不做具体限定。针对所述目标索引序列的获取方式,在本说明书不做具体限定。例如,可以通过用户输入的方式获取目标索引序列,也可以由数据库系统自动检测用户针对数据库的操作生成目标索引序列等等。
所述待查找索引即为待匹配、待命中的索引。针对所述待查找索引获取方式,在本说明书中不做具体限定。例如,可以通过用户输入的方式获取待查找索引,也可以由数据库系统自动检测用户针对数据库的操作获取待查找索引,也可以由数据库系统针对用户输入的SQL语言获取待查找索引等等。
需要说明的是,在本说明书中,所述目标索引序列为已排序的索引序列。在实际应用中,K-V存储是按键值进行排序,从而在搜索的时候可以通过二分查找或其他方式快速完成查找。
例如,“ABCDEFG,ABCDXY,ABCDXYZ,ABCOXYA,ABCOXYY,ABCOXYZ,ABCXYZ”可以作为目标索引序列,用户需要在所述目标索引序列中查找索引“ABCOXYZ”,“ABCOXYZ”可以作为待查找索引。
在一种实施方式中,数据库维护了用于存储数据的索引树。其中,所述索引树是一种针对K-V存储设计的存储结构。在实际应用中,K-V存储的存储空间普遍很大,因此需要按照必要的设计来存放数据,否则针对数据进行查找、删除、插入操作的效率会很低。索引树就是最核心的一种数据结构设计,它通过减少待操作的数据的数量来提升性能。
在本说明书中,还可以从数据库维护的用于存储数据的所述索引树上,采用二分查找的方式查找包含所述待查找索引的目标索引序列。
在实际应用中,所述索引树可以包括B树、B+树、Bw树等等索引树。上述索引树的非叶子节点均存储了连续的索引序列,而在实际匹配待查找索引时,从索引树的树根通过二分查找逐步匹配至叶子节点,而包含所述待查找索引的非叶子节点存储的索引序列,即可以为目标索引序列。
在本说明书中,获取所述目标索引序列后,可以进一步基于所述目标索引序列构建二叉查找树,也可以直接获取到已经构建为所述二叉查找树的目标索引序列,在本说明书中不做具体限定。
二叉查找树,又为二叉搜索树或为二叉排序树,在二叉查找树中:若任意节点的左子树不为空,则左子树上所有节点的值均不大于该左子树的父节点的值;若任意节点的右子树不空,则右子树上所有节点的值均不小于该右子树的父节点的值;任意节点的左、右子树也分别为二叉查找树。
在本说明书,基于所述目标索引序列构建二叉查找树的具体方式可以参考相关技术,在本说明书中不做具体限定。
在本说明书中,所述目标索引序列对应的二叉查找树上各个节点分别用于存储所述目标索引序列中包含的各个索引,其中所述索引被编码为预设的数据结构,所述二叉查找树上的各个节点存储该数据结构对应的取值。
在一种实施方式,所述二叉查找树的节点存储的内容也可以包括所述数据结构对应的取值以及索引本身的内容,其中所述数据结构对应的取值可以用于快速的查找索引,所述索引本身的内容可以用于进一步查询索引对应的数据。需要说明的是,在同时存储所述数据结构对应的取值以及索引本身的内容时,也可以针对索引进行压缩处理,例如删除字符串类型的索引的公共字符前缀,或是删除索引本身中超过预设长度的部分等等,在本说明书中不做具体限定。
其中,所述二叉查找树上的节点存储的索引的数据结构由若干bit位构成,一部分bit位用于填充与该节点存储的索引的至少部分索引内容,另一部分bit位用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度。
针对于二叉查找树的根节点,所述数据结构的若干bit位直接用于填充根节点存储的索引对应的部分索引内容;针对二叉查找树的非根节点,所述数据结构中,一部分bit位用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度,另一部分bit位用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀之后的部分索引内容。
需要说明的是,所述数据结构的若干bit位数量可以根据实际应用情况来进行设定,用于填充公共字符前缀的长度的bit位以及用于填充部分索引内容的bit位的具体位置也可以根据实际应用情况来进行设定,在本说明书中不做具体限定。
在实际应用中,所述数据结构通常可以为32位,64位或128位等等的整数数据类型。所述二叉查找树上的各个节点可以直接存储所述整数数据类型的取值。
请参见图3,图3是一示例性的实施例示出的一种目标索引序列对应的二叉查找树的示意图。如图3所示,图3示出的二叉查找树即为上述例子中目标索引序列“ABCDEFG,ABCDXY,ABCDXYZ,ABCOXYA,ABCOXYY,ABCOXYZ,ABCXYZ”构成的二叉查找树。
例如,图3中根节点存储的索引为“ABCDEFG”,根节点存储的对应的数据结构中的bit位全部用于填充与该节点存储的索引对应的部分索引内容。以数据结构为64bit位为例,填充该索引的全部内容需要56个bit位,可以将该索引对应的索引内容填充至高56位,而多出的bit位用0补齐。
因此上述根节点对应的数据结构可以为“01000001 010000100100001101000100…”其中01000001为字符A的二进制值,01000010为字符B的二进制值,以此类推。相应的,上述二叉查找树的节点实际存储的内容为该数据结构对应的取值。
需要说明的是,如果所述数据结构中bit位的数量不足以填充索引的全部索引内容,可以只填充该索引中的部分索引内容,并不影响后续的匹配过程。
例如,图3中示出的二叉查找树的根节点的左子节点“ABCDXY”,相对于所述二叉查找树的根节点“ABCOXYA”的公共字符前缀为“ABC”,因此公共字符前缀的长度为3,相对于所述二叉查找树的根节点的公共字符前缀之后的部分为“DXY”。
非根节点存储的对应的数据结构中的一部分bit位用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度,另一部分bit位用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀之后的部分索引内容。以数据结构为64bit位为例,其中64bit中的高3位可以用于填充公共字符前缀的长度,剩余61位用于填充公共字符前缀之后的部分索引内容。
因此,上述根节点的左子节点对应的数据结构可以为“011 010001000101100001011001…”其中,011表示公共字符前缀的长度3,01000100表示字符D的二进制值,01011000表示字符X的二进制值,01000011表示字符Y的二进制值,剩余bit位用0补齐。
又例如,图3中示出的二叉查找树的树的根节点的左子节点的左子节点“ABCDEFG”,其相对于该节点父节点“ABCDXY”的公共字符前缀为“ABCD”,因公共字符前缀的长度为4,公共字符前缀之后的部分为“EFG”。
因此该节点对应的数据结构可以为“100 01000101 0100011001000111…”其中,100表示公公共字符前缀的长度4,01000101表示字符E的二进制值,01000110表示字符F的二进制值,01000111表示字符G的二进制值,剩余bit位用0补齐。相应的,上述二叉查找树的节点实际存储的内容为该数据结构对应的取值。
需要说明的是,在实际应用中,bit位的数量,以及用于填充公共字符前缀的长度、索引内容的bit的位置可以根据实际需要进行设定,在本说明书中做不做具体限定。例如,可以由高3位填充所述公共字符前缀的长度,也可以由低3位进行填充,也可以由高4位、低4位进行填充等等。
通过上述数据结构,将索引内容由若干bit位进行存储,并将索引匹配过程转换为值匹配的过程,不仅降低了空间开销,也可以显著提高索引的匹配效率。
在本说明书中,获取所述待查找索引后,可以将所述待查找索引编码为所述数据结构,并确定编码后的所述数据结构对应的第一取值。其中,所述编码过程与上述二叉查找树中各个节点的编码过程类似,在此不再赘述。
将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配,以在所述二叉查找树上查找所述待查找索引。
将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配具有多种情况,下面详细阐述所述待查找索引在所述二叉查找树进行匹配的匹配过程。
情况一,当所述待查找索引与所述目标索引序列中的索引进行首次匹配时,也即将待查找索引与所述目标索引序列对应的二叉查找树的根节点进行匹配。由于所述二叉查找树的根节点存储的索引对应的数据结构中的若干bit位都用于填充索引的索引内容,因此也可以将所述待查找索引的索引内容直接填充至所述数据结构中的若干bit位。
将所述待查找索引编码为所述数据结构后,可以进一步确定所述数据结构对应的第一取值,并确定所述第一取值与所述二叉查找树的根节点对应的数据结构对应的第二取值是否匹配。
如果匹配成功,说明所述待查找索引即为二叉查找树的根节点,直接找到所述待查找索引。
如果不匹配,确定所述第一取值与所述第二取值的大小。
情况二,如果所述第一取值比所述第二取值小,相对于所述二叉查找树的根节点,进一步将所述待查找索引编码为所述数据结构,进一步确定所述数据结构对应的第三取值并与所述二叉查找树的根节点对应的左子节点中存储的索引对应的所述数据结构对应的第四取值进行匹配。
情况三,如果匹配成功,说明所述待查找索引即为所述二叉查找树的根节点对应的左子节点。如果匹配失败,进一步确定所述待查找索引中所述数据结构中存储的公共字符前缀的长度与所述左子节点中所述数据结构中存储的公共字符前缀的长度。
情况四,如果待查找索引中所述数据结构中存储的所述公共字符前缀的长度,大于所述左子节点中所述数据结构中存储的公共字符前缀的长度,那么可以相对于所述左子节点,将所述待查找索引编码为所述数据结构,进一步确定所述数据结构对应的第五取值,并与所述左子节点的右子节点中存储的索引对应的数据结构的第六取值进行匹配。
由于待查找索引中所述数据结构中存储的所述公共字符前缀的长度,大于所述左子节点中所述数据结构中存储的公共字符前缀的长度,说明所述待查找索引相对于根节点具有更长的公共字符前缀,而左子节点小于根节点,因此说明所述左子节点小于所述待查找索引,因此可以将所述待查找索引与所述左子节点的右子节点进行匹配。
情况五,如果待查找索引中所述数据结构中存储的所述公共字符前缀的长度,小于所述左子节点中所述数据结构中存储的公共字符前缀的长度,可以直接将所述第三取值与所述左子节点的左子节点中存储的索引对应的数据结构的第七取值进行匹配。
由于待查找索引中所述数据结构中存储的所述公共字符前缀的长度,小于所述左子节点中所述数据结构中存储的公共字符前缀的长度,说明待查找索引相对于根节点具有更短的公共字符前缀,因此待查找索引小于所述左子节点,待查找索引相对于所述根节点的数据结构对应的第三取值有效,直接与所述左子节点的左子节点进行匹配。
如果待查找索引中所述数据结构中存储的所述公共字符前缀的长度,等于所述左子节点中所述数据结构中存储的公共字符前缀的长度,那么可以基于公共字符前缀之后的部分进行比较。
情况六,如果所述待查找索引对应的数据结构中公共字符前缀之后的部分的取值大于所述左子节点存储的索引对应的数据结构中公共字符前缀之后的部分的取值,那么可以相对于所述左子节点,将所述待查找索引编码为所述数据结构,进一步确定所述数据结构对应的第五取值,并与所述左子节点的右子节点中存储的索引对应的数据结构的第六取值进行匹配。
情况七,如果所述待查找索引对应的数据结构中公共字符前缀之后的部分的取值小于所述左子节点存储的索引对应的数据结构中公共字符前缀之后的部分的取值,那么相对于所述左子节点,将所述待查找索引编码为所述数据结构,进一步确定所述数据结构对应的第五取值,并与所述左子节点的左子节点中存储的索引对应的数据结构的第七取值进行匹配。
情况八,如果所述第一取值比所述第二取值大,相对于所述二叉查找树的根节点,进一步将所述待查找索引编码为所述数据结构,进一步确定所述数据结构对应的第三取值并与所述二叉查找树的根节点对应的右子节点中存储的索引对应的所述数据结构对应的第八取值进行匹配。
情况九,如果匹配成功,说明所述待查找索引即为所述二叉查找树的根节点对应的右子节点。如果匹配失败,进一步确定所述待查找索引中所述数据结构中存储的公共字符前缀的长度与所述右子节点中所述数据结构中存储的公共字符前缀的长度。
情况十,如果待查找索引中所述数据结构中存储的所述公共字符前缀的长度,大于所述右子节点中所述数据结构中存储的公共字符前缀的长度,那么可以相对于所述右子节点,将所述待查找索引编码为所述数据结构,进一步确定所述数据结构对应的第九取值,并与所述右子节点的左子节点中存储的索引对应的数据结构的第十一取值进行匹配。
由于待查找索引中所述数据结构中存储的所述公共字符前缀的长度,大于所述右子节点中所述数据结构中存储的公共字符前缀的长度,说明所述待查找索引相对于根节点具有更长的公共字符前缀,而右子节点大于根节点,因此说明所述右子节点大于所述待查找索引,因此可以将所述待查找索引与所述右子节点的左子节点进行匹配。
情况十一,如果待查找索引中所述数据结构中存储的所述公共字符前缀的长度,小于所述右子节点中所述数据结构中存储的公共字符前缀的长度,可以直接将所述第三取值与所述右子节点的右子节点中存储的索引对应的数据结构的第十二取值进行匹配。
由于待查找索引中所述数据结构中存储的所述公共字符前缀的长度,小于所述右子节点中所述数据结构中存储的公共字符前缀的长度,说明待查找索引相对于根节点具有更短的公共字符前缀,因此待查找索引大于所述右子节点,待查找索引相对于所述根节点的数据结构对应的第三取值有效,直接与所述右子节点的右子节点进行匹配。
如果待查找索引中所述数据结构中存储的所述公共字符前缀的长度,等于所述右子节点中所述数据结构中存储的公共字符前缀的长度,那么可以基于公共字符前缀之后的部分进行比较。
情况十二,如果所述待查找索引对应的数据结构中公共字符前缀之后的部分的取值大于所述右子节点存储的索引对应的数据结构中公共字符前缀之后的部分的取值,那么可以相对于所述右子节点,将所述待查找索引编码为所述数据结构,进一步确定所述数据结构对应的第九取值,并与所述右子节点的右子节点中存储的索引对应的数据结构的第十二取值进行匹配。
情况十三,如果所述待查找索引对应的数据结构中公共字符前缀之后的部分的取值小于所述右子节点存储的索引对应的数据结构中公共字符前缀之后的部分的取值,那么相对于所述右子节点,将所述待查找索引编码为所述数据结构,进一步确定所述数据结构对应的第九取值,并与所述右子节点的左子节点中存储的索引对应的数据结构的第十一取值进行匹配。
下面以一个具体的例子阐述上述匹配过程。请参见图4,图4是一示例性的实施例示出的另一种目标索引序列对应的二叉查找树的示意图。如图4所示,图4中非根节点附近标注了该节点相对该节点的父节点的公共字符前缀的长度,以及公共字符前缀之后的部分索引内容。
例如,以图4示出的二叉查找树,以及64bit位的数据结构为例,可以规定所述64bit中的高3位用于填充公共字符前缀的长度,剩余61位用于填充公共字符前缀的长度之后的部分索引内容。
假设所述待查找索引为“ABCXYZ”。将所述待查找索引与所述目标索引序列进行首次匹配时,进入上述情况一,所述待查找索引对应的数据结构为“01000001 0100001001000011 01011000…”。
所述二叉查找树的根节点的数据结构为“01000001 010000100100001101000100…”。
该数据结构的第一取值,与所述二叉查找树的根节点的第二取值不匹配,而且所述第一取值大于所述第二取值,进入上述情况八,因此相对所述二叉查找树的根节点,将所述待查找索引编码为新的数据结构,生成第三取值与所述根节点的右子节点“ABCOXYZ”进行匹配。
相对于所述二叉查找树的根节点,其中公共字符前缀为“ABC”,公共字符前缀的长度为3,非公共字符前缀部分为“XYZ”。
因此所述待查找索引对应的数据结构为“011 01011000 0101100101011010…”
所述右子节点相对根节点的公共字符前缀为“ABCOXY”,公共字符前缀的长度为6,非公共字符前缀部分为“Z”。
因此,根节点的右子节点的数据结构为“110 01011010 0000000000000000…”
由于待查找索引的数据结构对应的取值与所述根节点的右子节点数据结构对应的取值不匹配,进一步确定所述待查找索引中所述数据结构中存储的公共字符前缀的长度与所述右子节点中所述数据结构中存储的公共字符前缀的长度。
所述待查找索引中所述数据结构填充的公共字符前缀的长度为3,所述右子节点中所述数据结构填充的公共字符前缀的长度为6。
待查找索引中所述数据结构填充的所述公共字符前缀的长度,小于所述右子节点中所述数据结构填充的公共字符前缀的长度,进入上述情况十一,将所述待查找索引对应的数据结构为“011 01011000 01011001 01011010…”对应的取值,与右子节点的右子节点对应的取值进行匹配。
右子节点的右子节点相对于右子节点的公共字符前缀为“ABC”,公共字符前缀的长度为3,非公共字符前缀部分为“XYZ”。
因此,所述右子节点的右子节点对应的数据结构为“011 010110000101100101011010…”,其取值与待查找索引对应的数据结构的取值相等,因此匹配成功。
在一种实施方式中,在获取目标索引序列后,可以实时构建与所述目标索引对应的二叉查找树,在构建与所述目标索引序列对应的二叉查找树后,可以进一步计算所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀的长度,然后基于计算出的所述公共字符前缀的长度,以及所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构。
其中,计算所述公共字符前缀的方式,在本说明书中不做具体限定,例如,可以通过字符串中字符逐个匹配方式,确定所述二叉查找树各个节点相对于该节点的父节点的公共字符前缀的长度。也可以通过预设的正则不等式或者预设的字符串匹配函数进行计算等等。
将所述二叉查找树编码为所述数据结构具体可以参见上文,在此不再赘述。
在一种实施方式中,所述数据结构中的至少一位bit位为预设的第一标志位;所述第一标志位用于标志所述数据结构中用于填充所述公共字符前缀的长度的bit位。
在将所述二叉查找树的各个节点编码为所述数据结构之前,还可以基于所述第一标志位的取值,确定所述数据结构中用于填充公共字符前缀的长度的bit位的数量以及bit位的位置,以及公共字符前缀之后的部分对应的索引内容之后的bit位的数量以及bit位的位置,并将计算出的所述公共字符前缀的长度填充至确定出的bit位;以及,将所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后的部分对应的索引内容,存储至确定出的bit位以外的剩余bit位。
例如,以所述数据结构为64bit位为例,可以使用1个bit位作为预设的第一标志位,且该bit位的位置为低1位,当第一标志位为0时,可以使用高3位填充所述公共字符前缀的长度,使用剩余60位填充公共字符前缀之后的部分对应的索引内容。当第一标志位为1时,可以使用高4位填充所述公共字符前缀的长度,使用剩余59位填充公共字符前缀之后的部分对应的索引内容。
在一种实施方式中,所述第一标志位对应的取值包括第一取值和第二取值;其中,如果所述公共字符前缀的长度不超过预设阈值,则所述第一标志位的取值为第一取值,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为N以及所述N个bit位在所述数据结构中的位置;如果所述公共字符前缀的长度超过预设阈值,所述第一标志位的取值为第二取值,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为M以及所述M个bit位在所述数据结构中的位置;所述M的取值大于所述N的取值。
其中,所述公共字符前缀的长度的预设阈值具体可以是数据库中全部索引的公共前缀公共字符前缀的最大值,也可以根据实际应用时的具体需求,来进一步设定所述阈值,在本说明书中不做具体限定。
在实际应用中,M和N的取值可以根据实际应用时的具体需求进行设定,在本说明书中不做具体限定。
在一种实施方式中,所述目标索引序列中的索引还包括复合索引;所述复合索引为由包含所述字符串类型的索引在内的至少两个索引组合而成的索引。例如,“ABCDEFG-ZXY-123456”为具有三个索引的复合索引。其中,可以按从左到右的顺序为索引进行标号,“ABCDEFG”即为索引1,“ZXY”即为索引2,123456即为索引3。
其中,数据结构的至少一位bit位可以为第二标志位,所述第二标志位用于标志二叉查找树上的节点存储的复合索引,相对于该节点对应的父节点存储的复合索引的公共索引的索引标识。
例如,二叉查找树的根节点存储的索引为“ABCDEFG-XYZ-123456”,二叉查找树的根节点的左子节点存储的索引为“ABCDEFG-XY-123456”,根节点的左子节点存储的复合索引,相对于根节点存储的复合索引的公共索引为“ABCDEFG”,公共索引标识即为1,非公共索引即为“XY-123456”。
将所述二叉查找树上的每个节点编码为所述数据格式之前,可以确定所述二叉查找树上的节点存储的复合索引,相对于该节点对应的父节点存储的复合索引的公共索引的索引标识,以及至少一个非公共索引。
并基于所述公共索引的索引标识,以及所述二叉查找树上的节点,相对于该节点对应的父节点的非公共索引的公共前缀长度,以及所述二叉查找树上的节点,相对于该节点对应的父节点的非公共索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构。
需要说明的是,所述复合索引中,可能既包含字符串类型的索引,也可能包含整数类型的索引。针对字符串类型的索引,编码为所述数据结构可以参见上文,在此处不再赘述。
针对整数类型的索引,如果所述整数的bit数量小于所述数据结构用于填充所述整数类型的索引的bit数量,直接将所述整数类型的索引填充至所述数据结构中,多余的bit位用0补齐。如果所述整数的bit数量大于所述数据结构用于填充所述整数类型的索引的bit数量,舍弃所述整数的低位,将所述整数转换为所述用于数据结构用于填充所述整数类型的索引的bit数量的整数。
例如,所述数据结构为64位整数,所述数据结构的高3位为复合索引标志位,因此所述数据结构用于填充所述整数类型的索引的bit数量为61。当所述索引为32位整数类型时,直接将所述32位整数填充至所述数据结构的低61位,多余的bit位用0补齐。当所述索引为64位整数类型时,舍弃所述索引的低3位,将剩余61位填充至所述数据类型的低61位。
下面以一个具体的例子详细阐述如何将复合索引编码为所述数据结构。
请参见图5,图5是一示例性的实施例示出的一种包含符合索引的目标索引序列对应的二叉查找树的示意图。
例如,图5中根节点存储的索引为“ABCDEFG-XYZ-123456”,根节点存储的对应的数据结构中的bit位全部用于填充与该节点存储的索引对应的部分索引内容。以数据结构为64bit位为例,64bit显然无法填充全部的复合索引的索引内容,因此在实际应用中,可以预先规定填充复合索引中第一个索引对应的索引内容,并依次填充其余索引的索引内容,或者由若干bit位中的部分bit填充第一个索引的索引内容,另一部分bit位填充第二个索引的索引内容等等,分别由若干bit位存储复合索引中每个索引的索引内容。
这里以根节点对应的数据结构中填充复合索引中第一个索引对应的索引内容,并依次填充其余索引的索引内容为例;
因此上述根节点对应的数据结构可以为“01000001 010000100100001101000100…”其中01000001为字符A的二进制值,01000010为字符B的二进制值,以此类推。相应的,上述二叉查找树的节点实际存储的内容为该数据结构对应的取值。
例如,图5中示出的二叉查找树的根节点的左子节点“ABCDEFG-XY-123456”,相对于所述二叉查找树的根节点“ABCDEFG-XYZ-123456”,公共索引为“ABCDEFG”,公共索引的索引标识为1,第一个非公共索引为“XYZ”,非公共索引的公共字符前缀为“XY”,因此公共字符前缀的长度为2,公共字符前缀之后的部分为“Z”。
以数据结构为64bit位为例,其中64bit中的高2位用于填充复合索引中公共索引的索引标识,高3-5位可以用于填充非公共索引的公共字符前缀的长度,剩余bit位用于填充非公共索引的公共字符前缀之后的部分索引内容。
因此,上述根节点的左子节点对应的数据结构可以为“01 0100101101000000000…”其中,01表示公共索引的索引标识1,010表示非公共索引的公共字符前缀的长度2,01011010表示字符Z的二进制值,剩余bit位用0补齐。
又例如,图5中示出的二叉查找树的树的根节点的左子节点的左子节点“ABCDEF-XY-123456”,其相对于该节点父节点“ABCDEFG-XY-123456”,公共索引为空,第一个非公共索引为“ABCDEFG”,非公共索引的公共字符前缀为“ABCDEF”,因公共字符前缀的长度为6,公共字符前缀之后的部分为“F”。
因此,上述根节点的左子节点的左子节点对应的数据结构可以为“0011001000110 00000000…”其中,00表示公共索引的索引标识0,也即不存在公共索引,110表示非公共索引的公共字符前缀的长度6,01000110表示字符F的二进制值,剩余bit位用0补齐。
针对复合索引的匹配过程,总体上与上述匹配过程类似,可以预先将待查找索引与根节点进行匹配,如果匹配失败,相对于根节点,将所述待查找索引编码为所述数据结构,并进一步根节点的左子节点以及右子节点进行匹配。
在与根节点的左子节点以及右子节点进行匹配之前,可以预先比较待查找索引对应的数据结构中第二标志位的取值与所述左子节点或右子节点中存储的索引对应的数据结构中第二标志位的取值。
当待查找索引小于根节点存储的索引时时,可以与根节点的左子节点及进行匹配。
如果待查找索引对应的数据结构中第二标志位的取值小于左子节点存储的索引对应的数据结构中第二标志位的取值,说明左子节点与根节点具有相同的公共索引,待查找索引比根节点小,因此待查找索引比左子节点小,待查找索引相对于所述根节点的数据结构对应的取值有效,直接与所述左子节点的左子节点进行匹配。
如果待查找索引对应的数据结构中第二标志位的取值大于左子节点存储的索引对应的数据结构中第二标志位的取值,说明待查找索引与根节点具有相同的公共索引,而左子节点比根节点小,说明左子节点比待查找索引小,因此可以相对于左子节点,将所述待查找索引编码为所述数据结构,并进一步与所述左子节点的右子节点进行匹配。
当待查找索引大于根节点存储的索引时时,可以与根节点的右子节点及进行匹配。
如果待查找索引对应的数据结构中第二标志位的取值小于右子节点存储的索引对应的数据结构中第二标志位的取值,说明右子节点与根节点具有相同的公共索引,待查找索引比根节点大,因此待查找索引比右子节点大,待查找索引相对于所述根节点的数据结构对应的取值有效,直接与所述右子节点的右子节点进行匹配。
如果待查找索引对应的数据结构中第二标志位的取值大于右子节点存储的索引对应的数据结构中第二标志位的取值,说明待查找索引与根节点具有相同的公共索引,而右子节点比根节点打,说明右子节点比待查找索引大,因此可以相对于右子节点,将所述待查找索引编码为所述数据结构,并进一步与所述右子节点的左子节点进行匹配。
如果待查找索引对应的数据结构中第二标志位的取值等于左子节点或右子节点存储的索引对应的数据结构中第二标志位的取值时,说明公共索引匹配成功,可以进一步依据上述公共前缀字符的长度的匹配方式进行匹配,在此不再赘述。
下面以一个具体的例子阐述上述复合索引的匹配过程。以图5示出的包含复合索引的目标索引序列对应的二叉查找树为例,64bit位的数据结构为例,可以规定所述64bit中的高2位用于填充公共索引的索引标识,高3-5位用于公共字符前缀的长度,剩余bit位用于填充公共字符前缀的长度之后的部分索引内容。
假设所述待查找索引为“ABCDEF-XY-123456”。将所述待查找索引与所述目标索引序列进行首次匹配时,将待查找索引对应的索引内容填充至所述若干bit位,所述待查找索引对应的数据结构为“01000001 0100001001000011 01000100…”。
待查找索引对应的数据结构的取值,小于二叉查找树的根节点应的数据结构的取值,因此所述二叉查找树的根节点,将所述待查找索引编码为新的数据结构,并于根节点的左子节点进行匹配。
所述待查找索引相对于所述二叉查找树的根节点,公共索引为空,第一个非公共索引为“ABCDEF”,非公共索引的公共字符前缀为“ABCDEF”,公共字符前缀的长度为6,公共字符前缀之后的部分为空。
因此所述待查找索引对应的数据结构为“00 110 000000000000000000000000…”
所述左子节点相对所述二叉查找树的根节点,公共索引为“ABCDEFG”,公共索引的索引标识位1,第一个非公共索引为“XY”,非公共索引的公共字符前缀为“XY”,公共字符前缀的长度为2,公共字符前缀之后的部分为空。
因此所述左子节点对应的数据结构为“01 010 00000000 0000000000000000…”
由于待查找索引对应的数据结构中第二标志位的取值小于左子节点存储的索引对应的数据结构中第二标志位的取值,说明左子节点与根节点具有相同的公共索引,待查找索引比根节点小,因此待查找索引比左子节点小,待查找索引相对于所述根节点的数据结构对应的取值有效,直接与所述左子节点的左子节点进行匹配。
左子节点的左子节点相对所述左子节点,公共索引为空,第一个非公共索引为“ABCDEF”,非公共索引的公共字符前缀为“ABCDEF”,公共字符前缀的长度为6,公共字符前缀之后的部分为空。
因此,所述左子节点的左子节点对应的数据结构为“00 110 000000000000000000000000…”其取值与待查找索引对应的数据结构的取值相等,因此匹配成功。
在以上实施例记载的方案中,将多个键组合成的复合键转换为预设数据格式的并进行值进行存储,在匹配时也由传统的字符串匹配转换为值匹配,减少索引查找的操作,提高索引查找的效率。
在一种实施方式中,上述数据结构通常可以所述数据结构包括64位bit位;所述64位bit位中包含用于表示所述第一标志位和所述第二标志位的4个bit位;所述第一标志位对应所述4个bit位中的1个比特位;所述第二标志位对应所述4个位中的3个比特位。
需要说明的是,在实际应用中,上述数据结构仅是一种可能的实施方式,第一标志位以及第二标志位的位置可以任意选择,例如所述64位bit位中的高4位或者低4位用于表示所述第一标志位和所述第二标志位,在本说明书中不做具体限定。
当所述数据结构位64bit位时,通常可以将公共字符前缀的长度的预设阈值设定为4096;相应的,上述N的取值可以为12;上述M的取值可以为20;
其中,如果所述公共字符前缀的长度不超过4096,则所述第一标志位的取值为1,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为12,并且所述12个bit位为所述64个bit位中的低12位或者高12位;相应的,所述数据结构中用于填充非公共字符前缀对应的索引内容的bit位的数量为48,并且所述48个bit位为所述64个bit位中的低12-59位或者高12-59位;
如果所述公共字符前缀的长度超过4096,所述第一标志位的取值为0,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为20;相应的,所述数据结构中用于填充非公共字符前缀对应的索引内容的bit位的数量为40,并且所述40个bit位为所述64个bit位中的低20-59位或者高20-59位。
例如,以64bit位的数据结构为例,其中64bit位中高4位表示所述第一标志位和所述第二标志位,高4位中的高1-3位表示第一标志位,高4位中的第4位标表示第二标志位。
如图5中示出的包含复合索引的目标索引序列对应的二叉查找树的根节点的左子节点为例,所述左子节点相对所述二叉查找树的根节点,公共索引为“ABCDEFG”,公共索引的索引标识位1,第一个非公共索引为“XY”,非公共索引的公共字符前缀为“XY”,公共字符前缀的长度为2,公共字符前缀之后的部分为空。公共字符前缀的长度不超过阈值,因此第一标志位的取值为1。高12-59位用于填充公共字符前缀之后的部分,低0-11位用于填充公共字符前缀的长度。
因此所述左子节点对应的数据结构为“001 1 00000000 000000000000000000000000 00000000 00000000 000000000010”其中,高4位中的高3位“001”表示公共索引的索引标识,高4位中的第4位“1”表示公共字符前缀的长度不超过阈值,公共字符前缀之后的部分为空,因此第12-59位用0填充,公共字符前缀的长度为2,因此第0-11位为“000000000010”。
与上述索引查找方法的实施例对应的,本说明书还提供了索引查找装置的实施例。
请参见图6,图6是一示例性的实施例示出的一种索引查找装置所在电子设备的硬件结构图。在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参见图7,图7是一示例性的实施例示出的一种索引查找装置的框图。索引查找装置可以应用于图6所示的电子设备中,以实现本说明书的技术方案。其中,上述索引查找装置可以包括:
索引序列获取单元702,用于获取包含待查找索引的目标索引序列;所述目标索引序列中的至少部分索引为字符串类型的索引;
待查找索引编码单元704,用于将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构,并确定编码后的所述数据结构对应的第一取值;其中,所述目标索引序列对应的二叉查找树上的节点,分别用于存储所述目标索引序列中包含的各个索引;所述二叉查找树上的节点存储的索引的数据结构,包括用于填充与该节点存储的索引的至少部分索引内容的若干bit位,以及用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度的若干bit位;
索引匹配单元706,用于采用二分查找的方式,将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配,以在所述二叉查找树上查找所述待查找索引。
在本实施例中,数据库维护了用于存储数据的索引树;
所述索引序列获取单元,进一步用于从数据库维护的用于存储数据的所述索引树上,采用二分查找的方式查找包含所述待查找索引的目标索引序列。
在本实施例中,所述索引树包括以下示出的索引树中的任意一种:
B树,B+树,Bw树。
在本实施例中,所述装置还包括:二叉查找树构建单元,用于实时构建与获取到的所述目标索引序列对应的二叉查找树;
计算所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀的长度;
基于计算出的所述公共字符前缀的长度,以及所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构。
在本实施例中,所述数据结构中的至少一位bit位为预设的第一标志位;所述第一标志位用于标志所述数据结构中用于填充所述公共字符前缀的长度的bit位;
所述二叉查找树构建单元,进一步用于基于所述第一标志位确定所述数据结构中填充所述公共字符前缀的长度的bit位,并将计算出的所述公共字符前缀的长度填充至确定出的bit位;以及,将所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后的部分对应的索引内容,存储至确定出的bit位以外的剩余bit位。
在本实施例中,所述第一标志位对应的取值包括第一取值和第二取值;其中,如果所述公共字符前缀的长度不超过预设阈值,则所述第一标志位的取值为第一取值,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为N以及所述N个bit位在所述数据结构中的位置;如果所述公共字符前缀的长度超过预设阈值,所述第一标志位的取值为第二取值,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为M以及所述M个bit位在所述数据结构中的位置;所述M的取值大于所述N的取值。
在本实施例中,所述目标索引序列中的索引包括复合索引;所述复合索引为由包含所述字符串类型的索引在内的至少两个索引组合而成的索引。
在本实施例中,所述数据结构中的至少两位bit位为预设的第二标志位;所述第二标志位用于标志二叉查找树上的节点存储的复合索引,相对于该节点对应的父节点存储的复合索引的公共索引的索引标识;
所述二叉查找树构建单元,进一步用于确定所述二叉查找树上的节点存储的复合索引,相对于该节点对应的父节点存储的复合索引的公共索引的索引标识,以及至少一个非公共索引;
基于所述公共索引的索引标识,以及所述二叉查找树上的节点,相对于该节点对应的父节点的非公共索引的公共前缀长度,以及所述二叉查找树上的节点,相对于该节点对应的父节点的非公共索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构。
在本实施例中,所述数据结构包括64位bit位;所述64位bit位中包含用于表示所述第一标志位和所述第二标志位的4个bit位;所述第一标志位对应所述4个bit位中的1个比特位;所述第二标志位对应所述4个位中的3个比特位。
在本实施例中,所述64位bit位中的高4位或者低4位用于表示所述第一标志位和所述第二标志位。
在本实施例中,所述预设阈值为4096;所述N的取值为12;所述M的取值为20;
其中,如果所述公共字符前缀的长度不超过4096,则所述第一标志位的取值为1,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为12,并且所述12个bit位为所述64个bit位中的低12位或者高12位;相应的,所述数据结构中用于填充非公共字符前缀对应的索引内容的bit位的数量为48,并且所述48个bit位为所述64个bit位中的低12-59位或者高12-59位;
如果所述公共字符前缀的长度超过4096,所述第一标志位的取值为0,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为20;相应的,所述数据结构中用于填充非公共字符前缀对应的索引内容的bit位的数量为40,并且所述40个bit位为所述64个bit位中的低20-59位或者高20-59位。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例只是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
与上述索引查找方法的实施例对应的,本说明书还提供了索引查找系统的实施例。
其中,上述索引查找系统可以包括:
索引序列获取子系统702,用于获取包含待查找索引的目标索引序列;所述目标索引序列中的至少部分索引为字符串类型的索引;
待查找索引编码子系统704,用于将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构,并确定编码后的所述数据结构对应的第一取值;其中,所述目标索引序列对应的二叉查找树上的节点,分别用于存储所述目标索引序列中包含的各个索引;所述二叉查找树上的节点存储的索引的数据结构,包括用于填充与该节点存储的索引的至少部分索引内容的若干bit位,以及用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度的若干bit位;
索引匹配子系统706,用于采用二分查找的方式,将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配,以在所述二叉查找树上查找所述待查找索引。
上述系统中各个子系统的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于系统实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例只是示意性的,其中所述作为分离部件说明的子系统可以是或者也可以不是物理上分开的,作为子系统显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。本说明书还提供了一种计算机可读存储介质的实施例。所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,可以实现本说明书中任意一个实施例提供的所述索引查找方法。
本说明书实施例提供的计算机可读存储介质具体可以包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存储器)、EPROM(Erasable Programmable Read-OnlyMemory,可擦写可编程只读存储器)、EEPROM(Electrically Erasable ProgrammableRead-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光纤卡片。也就是,可读存储介质包括可以存储或传输信息的可读介质。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (13)
1.一种索引查找方法,所述方法包括:
获取包含待查找索引的目标索引序列;所述目标索引序列中的至少部分索引为字符串类型的索引;
将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构,并确定编码后的所述数据结构对应的第一取值;其中,所述目标索引序列对应的二叉查找树上的节点,分别用于存储所述目标索引序列中包含的各个索引;所述二叉查找树上的节点存储的索引的数据结构,包括用于填充与该节点存储的索引的至少部分索引内容的若干bit位,以及用于填充该节点存储的索引相对于该节点对应的父节点存储的索引的公共字符前缀的长度的若干bit位;
采用二分查找的方式,将所述第一取值和所述二叉查找树上的节点的数据结构对应的第二取值进行匹配,以在所述二叉查找树上查找所述待查找索引。
2.根据权利要求1所述的方法,数据库维护了用于存储数据的索引树;
所述获取包含待查找索引的目标索引序列,包括:
从数据库维护的用于存储数据的所述索引树上,采用二分查找的方式查找包含所述待查找索引的目标索引序列。
3.根据权利要求1所述的方法,所述将所述待查找索引编码为与所述目标索引序列对应的二叉查找树上的节点存储的索引的数据结构之前,还包括:
实时构建与获取到的所述目标索引序列对应的二叉查找树;
计算所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀的长度;
基于计算出的所述公共字符前缀的长度,以及所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构。
4.根据权利要求3所述的方法,所述数据结构中的至少一位bit位为预设的第一标志位;所述第一标志位用于标志所述数据结构中用于填充所述公共字符前缀的长度的bit位;
基于计算出的所述公共字符前缀的长度,以及所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共前缀之后部分对应的部分索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构,包括:
基于所述第一标志位确定所述数据结构中填充所述公共字符前缀的长度的bit位,并将计算出的所述公共字符前缀的长度填充至确定出的bit位;以及,将所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后的部分对应的索引内容,存储至确定出的bit位以外的剩余bit位。
5.根据权利要求4所述的方法,所述第一标志位对应的取值包括第一取值和第二取值;其中,如果所述公共字符前缀的长度不超过预设阈值,则所述第一标志位的取值为第一取值,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为N以及所述N个bit位在所述数据结构中的位置;如果所述公共字符前缀的长度超过预设阈值,所述第一标志位的取值为第二取值,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为M以及所述M个bit位在所述数据结构中的位置;所述M的取值大于所述N的取值。
6.根据权利要求3所述的方法,所述目标索引序列中的索引包括复合索引;所述复合索引为由包含所述字符串类型的索引在内的至少两个索引组合而成的索引。
7.根据权利要求6所述的方法,所述数据结构中的至少两位bit位为预设的第二标志位;所述第二标志位用于标志二叉查找树上的节点存储的复合索引,相对于该节点对应的父节点存储的复合索引的公共索引的索引标识;
所述基于计算出的所述公共字符前缀的长度,以及所述二叉查找树上的节点存储的索引,相对于该节点对应的父节点存储的索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构,包括:
确定所述二叉查找树上的节点存储的复合索引,相对于该节点对应的父节点存储的复合索引的公共索引的索引标识,以及至少一个非公共索引;
基于所述公共索引的索引标识,以及所述二叉查找树上的节点,相对于该节点对应的父节点的非公共索引的公共前缀长度,以及所述二叉查找树上的节点,相对于该节点对应的父节点的非公共索引的公共字符前缀之后部分对应的索引内容,将所述二叉查找树上的节点存储的索引分别编码为所述数据结构。
8.根据权利要求7所述的方法,所述数据结构包括64位bit位;所述64位bit位中包含用于表示所述第一标志位和所述第二标志位的4个bit位;所述第一标志位对应所述4个bit位中的1个比特位;所述第二标志位对应所述4个位中的3个比特位。
9.根据权利要求8所述的方法,所述64位bit位中的高4位或者低4位用于表示所述第一标志位和所述第二标志位。
10.根据权利要求9所述的方法,所述预设阈值为4096;所述N的取值为12;所述M的取值为20;
其中,如果所述公共字符前缀的长度不超过4096,则所述第一标志位的取值为1,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为12,并且所述12个bit位为所述64个bit位中的低12位或者高12位;相应的,所述数据结构中用于填充非公共字符前缀对应的索引内容的bit位的数量为48,并且所述48个bit位为所述64个bit位中的低12-59位或者高12-59位;
如果所述公共字符前缀的长度超过4096,所述第一标志位的取值为0,表示所述数据结构中用于填充所述公共字符前缀的长度的bit位的数量为20;相应的,所述数据结构中用于填充非公共字符前缀对应的索引内容的bit位的数量为40,并且所述40个bit位为所述64个bit位中的低20-59位或者高20-59位。
11.一种索引查找系统,所述索引查找系统执行如权利要求1-10中的任一所述的方法。
12.一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行权利要求1-10任一项所述的方法。
13.一种计算机可读存储介质,所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现权利要求1-10任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310264179.0A CN116401412A (zh) | 2023-03-10 | 2023-03-10 | 索引查找方法、系统、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310264179.0A CN116401412A (zh) | 2023-03-10 | 2023-03-10 | 索引查找方法、系统、电子设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116401412A true CN116401412A (zh) | 2023-07-07 |
Family
ID=87018969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310264179.0A Pending CN116401412A (zh) | 2023-03-10 | 2023-03-10 | 索引查找方法、系统、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116401412A (zh) |
-
2023
- 2023-03-10 CN CN202310264179.0A patent/CN116401412A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107291785A (zh) | 一种数据查找方法及装置 | |
CN106326475B (zh) | 一种高效的静态哈希表实现方法及系统 | |
CN109166615B (zh) | 一种随机森林哈希的医学ct图像存储与检索方法 | |
US11106708B2 (en) | Layered locality sensitive hashing (LSH) partition indexing for big data applications | |
CN112988912B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN106991149B (zh) | 一种融合编码和多版本数据的海量空间对象存储方法 | |
CN114490853A (zh) | 数据处理方法、装置、设备、存储介质及程序产品 | |
CN110413711A (zh) | 一种差异数据获取方法及其存储介质 | |
CN112988908B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN112988909B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN114049463A (zh) | 一种二叉树的数据网格化、网格点数据的获取方法及装置 | |
CN112511629B (zh) | 一种mpt结构的账户树的数据压缩方法及系统 | |
CN111026736B (zh) | 数据血缘管理方法及装置、数据血缘解析方法及装置 | |
CN109657060B (zh) | 安全生产事故案例推送方法及系统 | |
CN116401412A (zh) | 索引查找方法、系统、电子设备及可读存储介质 | |
CN108376054B (zh) | 一种对标识数据进行索引的处理方法及装置 | |
CN112988910B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN112988911B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN113297204B (zh) | 索引生成方法及装置 | |
CN114840487A (zh) | 分布式文件系统的元数据管理方法和装置 | |
CN112417179A (zh) | 地址处理方法及装置 | |
CN111767287A (zh) | 数据导入方法、装置、设备及计算机存储介质 | |
CN115640426A (zh) | 数据索引方法及系统 | |
Kumar et al. | Compendious and Optimized Succinct Data Structures for Big Data Store | |
CN116010404A (zh) | GeoHash数据访问方法及相关装置 |
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 |