CN111984649A - 数据索引的查找方法、装置和相关设备 - Google Patents
数据索引的查找方法、装置和相关设备 Download PDFInfo
- Publication number
- CN111984649A CN111984649A CN202010842386.6A CN202010842386A CN111984649A CN 111984649 A CN111984649 A CN 111984649A CN 202010842386 A CN202010842386 A CN 202010842386A CN 111984649 A CN111984649 A CN 111984649A
- Authority
- CN
- China
- Prior art keywords
- target
- index
- data
- red
- node
- 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 89
- 230000008569 process Effects 0.000 description 21
- 238000005516 engineering process Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000717 retained effect Effects 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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据索引的查找方法、装置和相关设备,获得目标索引值和目标数据标识;其中,目标索引值是目标索引所对应的数据的索引值,目标数据标识是目标索引所对应的数据的数据标识;若存在多个记录有目标索引值的索引,利用目标索引值在索引集合中查找得到基于数据标识构建的目标红黑树;目标红黑树存储目标索引值对应的每一个索引;利用目标数据标识在目标红黑树中进行二分查找,得到目标索引。基于预先构建的存有目标索引值对应的每个索引的目标红黑树,本方案能够利用目标数据标识进行二分查找,不需要逐一检测目标索引值对应的每一个索引就可以查找出携带目标数据标识的目标索引,提高了索引值重复时查找特定索引的效率。
Description
技术领域
本发明涉及数据库技术领域,特别涉及一种数据索引的查找方法、装置和相关设备。
背景技术
目前,数据库是在计算机技术领域被广泛使用的数据存储方式。为了实现高效的数据查询,系统在建立数据库时还会建立数据库的索引集合,每次向数据库中添加新数据后,系统会生成新数据的索引值,然后将新数据的索引值和新数据的数据标识(用于唯一的确定数据库中的数据,例如,可以用数据的存储位置作为数据标识)组成的这项新数据的索引存入索引集合中。由此,就可以在索引集合中查找索引值满足查询条件的索引,然后再依据这些索引的数据标识直接从数据库中读出满足查询条件的数据。
随着数据量的增大,数据库中存储的多项不相同的数据的索引值可能会重复,即一个索引值会对应多项不同的数据,相应的索引集合中这个索引值也会对应多个不同的索引。
这种情况下,若需要在索引集合中查找出某个索引值对应的,且具有指定数据标识的索引,就需要检测该索引值对应的每一个索引的数据标识是否为指定数据标识,导致索引的查找效率降低。
发明内容
基于上述现有技术的缺点,本申请提供一种数据索引的查找方法、装置和相关设备,以提高多个索引的索引值重复的情况下查找索引的效率。
本申请第一方面提供一种数据索引的查找方法,包括:
获取目标索引值和目标数据标识;其中,所述目标索引值是需要查找的目标索引所对应的数据的索引值,所述目标数据标识是所述目标索引所对应的数据的数据标识;
若数据库的索引集合包括多个记录有所述目标索引值的索引,利用所述目标索引值,在所述索引集合中查找目标红黑树;其中,所述目标红黑树用于存储所述目标索引值对应的索引,且所述目标红黑树以所述目标索引值对应的索引的数据标识作为关键字而构建;
利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引。
可选的,所述获取目标索引值和目标数据标识,包括:
获取数据删除指令,并提取所述数据删除指令所携带的目标索引值和目标数据标识;
其中,所述利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引之后,还包括:
对所述目标红黑树执行数据删除指令,从而删除所述目标红黑树存储的所述目标索引。
可选的,所述目标红黑树包括多个节点,每一个所述节点均用于存储一个所述目标索引值对应的索引,并且,每一个所述节点所存储的索引均与其他节点存储的索引不同;
其中,所述利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引,包括:
以二分查找方法逐一将所述目标红黑树存储的索引的数据标识和所述目标数据标识进行比较,得到所述目标红黑树中数据标识和所述目标数据标识一致的索引;
将所述数据标识和所述目标数据标识一致的索引,确定为所述目标索引。
可选的,所述以二分查找方法逐一将所述目标红黑树存储的索引的数据标识和所述目标数据标识进行比较,得到所述目标红黑树中数据标识和所述目标数据标识一致的索引,包括:
将所述目标红黑树的根节点确定为当前节点;
比较所述目标数据标识和所述当前节点对应的索引的数据标识,得到比较结果;
若所述比较结果为,所述目标数据标识和所述当前节点对应的索引的数据标识一致,将所述当前节点对应的索引确定为所述目标索引;
若所述比较结果为,所述目标数据标识和所述当前节点对应的索引的数据标识不一致,根据所述比较结果确定所述目标索引对应的节点位于所述当前节点的左子树或者右子树;
若所述目标索引对应的节点位于所述当前节点的左子树,在所述当前节点的左子树中查找得到数据标识和所述目标数据标识一致的索引;
若所述目标索引对应的节点位于所述当前节点的右子树,在所述当前节点的右子树中查找得到数据标识和所述目标数据标识一致的索引。
可选的,所述获取目标索引值和目标数据标识,包括:
获取数据标识更新指令,并提取得到所述数据标识更新指令所携带的目标索引值和目标数据标识;
其中,所述利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引之后,还包括:
更新所述目标索引的数据标识。
可选的,所述利用所述目标索引值,在所述索引集合中查找目标红黑树之前,还包括:
生成所述目标红黑树的根节点,并在所述目标红黑树的根节点中存储任意一个所述目标索引值对应的索引;其中,所述根节点被标记为黑色;
确定待存储索引并生成一个用于存储所述待存储索引的待插入节点;其中,所述待存储索引指代任意一个所述目标索引值对应的、且未存储在所述目标红黑树中的索引;
根据所述目标红黑树现有的节点的颜色、所述节点存储的索引的数据标识和预设的红黑树的约束条件,将所述待插入节点插入所述目标红黑树,并将所述待插入节点标记为红色或者黑色;
确定待存储索引,直至所述目标红黑树存储有所述索引集合包括的所述目标索引值对应的每一个索引为止。
本申请第二方面提供一种数据索引的查找装置,包括:
获取单元,用于获取目标索引值和目标数据标识;其中,所述目标索引值是需要查找的目标索引所对应的数据的索引值,所述目标数据标识是所述目标索引所对应的数据的数据标识;数据库中的每一项数据均对应有唯一的数据标识;
第一查找单元,若数据库的索引集合包括多个记录有所述目标索引值的索引,利用所述目标索引值,在所述数据库的索引集合中查找得到目标红黑树;其中,所述目标红黑树用于存储所述目标索引值对应的索引,且所述目标红黑树以所述目标索引值对应的索引的数据标识作为关键字而构建;
第二查找单元,用于利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引。
可选的,所述获取单元获取目标索引值和目标数据标识时,具体用于:
获取数据删除指令,并提取得到所述数据删除指令所携带的目标索引值和目标数据标识;
其中,所述查找装置还包括:
删除单元,用于对所述目标红黑树执行数据删除指令,从而删除所述目标红黑树存储的所述目标索引。
本申请第三方面提供一种计算机存储介质,用于存储程序,所述程序被执行时,用于实现本申请第一方面任意一项所提供的数据索引的查找方法。
本申请第四方面提供一种电子设备,包括存储器和处理器;
所述存储器用于存储程序;
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现本申请第一方面任意一项所提供的数据索引的查找方法。
本申请提供一种数据索引的查找方法、装置和相关设备,获得目标索引值和目标数据标识;其中,目标索引值是需要查找的目标索引所对应的数据的索引值,目标数据标识是目标索引所对应的数据的数据标识;数据库中的每一项数据均对应有唯一的数据标识;若数据库的索引集合包括多个记录有目标索引值的索引,利用目标索引值在数据库的索引集合中查找得到以索引对应的数据标识作为关键字而构建的目标红黑树;其中,索引集合包括数据库的每一项数据对应的索引;每一个索引,均记录有索引对应的数据的索引值和数据标识;目标红黑树存储目标索引值对应的每一个索引;利用目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引。基于预先构建的用于存储目标索引值对应的多个索引的目标红黑树,本方案能够利用目标数据标识在目标红黑树中进行二分查找,因此不需要逐一检测目标索引值对应的每一个索引就可以查找出携带目标数据标识的目标索引,从而提高了索引值重复时查找特定索引的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种数据索引的查找方法的流程图;
图2为本申请实施例提供的一种索引链表和红黑树的结构示意图;
图3为本申请实施例提供的利用二分查找从目标红黑树中查找得到目标索引的方法的流程图;
图4为本申请实施例提供的一种数据索引的删除方法的流程图;
图5为本申请实施例提供的一种数据索引的更新方法的流程图;
图6为本申请实施例提供的一种构建目标红黑树的方法的流程图;
图7为本申请实施例提供的一种数据索引的查找装置的结构示意图;
图8为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请实施例提供了一种数据索引的查找方法,请参考图1,该方法包括以下步骤:
首先需要说明,本申请任一实施例所提供的查找方法,其执行主体可以认为是数据库的控制程序。在计算机系统中,具有数据库访问权限的应用程序可以向控制程序发送访问请求,然后由控制程序响应访问请求而对数据库进行操作(包括读取并向应用程序发送数据,删除数据等)。
S101、获得目标索引值和目标数据标识。
其中,目标索引值是需要查找的目标索引所对应的数据的索引值,目标数据标识是目标索引所对应的数据的数据标识。
为了方便从数据库中查找数据,目前的数据库系统一般都包括数据库和数据库对应的索引集合,数据库用于存储多个数据,索引集合则存储数据库中每一个数据对应的索引。每一个索引,均包括这个索引对应的数据的索引值,和这个索引对应的数据的数据标识。
其中,不同的数据的索引值可能相同,也可能不相同。但是,数据库中每一个数据均具有一个唯一的数据标识,即,每一个数据的数据标识均与其他的数据的数据标识不同,给定一个数据标识就可以唯一的从数据库中确定一个数据。
可选的,可以用一个数据在数据库中的逻辑存储地址作为该数据的数据标识,也可以用一个数据在相应的计算机存储介质中的物理存储地址作为该数据的数据标识。
例如,数据库可以用表格的形式存储数据,每一个数据占据表格中的一行,并且每一行只存放一个数据。这种情况下,一个数据所在的行的标签(记为rowid,某一行的rowid用于表示该行是表格中的第几行)就可以认为是该数据在数据库中的逻辑存储地址。
在数据库中,每一个数据均包括多个字段,一个字段又包括字段名和字段值,对于同一数据库,各个数据所包括的字段的字段名相同,但是不同的数据之间字段的字段值可能相同,也可能不同。
例如,在用于管理图书的数据库中,每一本书就对应于数据库中的一个数据,一本书的数据可以包括以下字段:
书名:XXX;作者:YY;出版日期:2020.1.1;出版号:ID123456;类型:科学技术;版本:第一版。
上述数据中,每两个相邻的字段用分号分隔,在上述例子中,“书名”,“作者”,“出版日期”,“出版号”,“类型”和“版本”就是这个数据库中构成任意一本书的数据的5个字段的字段名,换言之,本例的数据库中每一本书的数据均包括5个字段,并且这5个字段的字段名和上述字段名一致。但是不同的数据之间,同一字段名对应的字段值可以不同,上述例子中字段名“出版日期”对应的字段值是“2020.1.1”,对于数据库中表示其他书籍的数据,其字段名对应的字段值可能和上述例子的字段值一致,即“2020.1.1”,也可能不一致,例如“出版日期”对应的字段值也可以是“2020.2.1”。
当然,数据库技术可以用于管理多种不同领域的数据,对应的组成数据的各个字段的字段名和字段值也会有所差异。例如,用于电子文档管理的数据库中,一个数据对应于一份电子文档,这种情况下,构成一个数据的字段的字段名可以包括“文档标题”,“文档作者”,“版本”,“编号”,“最近编辑时间”等。用于学生管理的数据库中,一个数据对应于一个学生,构成一个数据的字段的字段名可以包括“姓名”,“学号”,“班级”,“性别”,“年龄”等。本申请对此不作限定。
在构建数据库时,可以预先指定数据的某个或者某几个具有代表性的字段作为关键字段,例如,用于管理书籍的数据库可以指定“书名”和“作者”对应的字段作为关键字段。指定了关键字段之后,对于数据库的任意一个数据,将该数据的各个关键字段的字段值组合得到该数据的关键字符串,然后用预设的索引算法计算这个关键字符串,就可以得到这个数据的索引值。
可选的,上述索引算法可以是任意一种现有的散列函数算法(可以称为hash算法,也可以称为哈希算法),相应的,采用hash算法计算得到的索引值,可以记为hashkey(可以称为哈希键)。
S102、判断索引集合中是否有多个包含目标索引值的索引。
结合前文对数据的索引值的说明可以发现,当数据库存储了多个数据时,各个不同的数据之间可能发生索引值冲突,也就是多个不同的数据具有相同的索引值。
一方面,参考前述书籍管理的例子,一个作者可能在不同的时间先后出版了两本书名相同,但是内容不同的书籍,若以“书名”和“作者”对应的字段作为关键字段,此时数据库中这两本书对应的数据的关键字符串相同,相应的计算得到的这两本书的索引值就相同。
另一方面,对于两个不相同的关键字符串,索引算法也可能对这两个关键字符串计算得到相同的索引值。
当数据库中出现索引值冲突,即存在多个索引值相同的数据时,对应的索引集合中就会出现多个索引均包含同一个索引值的情况。其中,对于一个索引值,可以将这个索引值对应的多个索引当做这个索引值对应的一个索引桶,索引桶中包括这个索引值对应的所有索引。
例如,假设目标索引值等于6,数据库中存储有7个索引值为6的数据,对应的索引集合中就会有对应于这7个数据的7个索引,并且这7个索引包含的索引值均为6。
可选的,数据库的索引集合可以采用如图2所示的索引链表的形式管理,索引链表包括多个链表对象,图2中横向排列的10个矩形框分别表示10个链表对象,每一个链表对象对应于唯一的一个索引值,矩形框中的数值1至10就是链表对象对应的索引值,索引集合包含的索引基于索引值所对应的链表对象进行存储。具体的,若某个索引值只对应有一个索引,可以直接将这个索引存储在这个索引值对应的链表对象中,例如,只有一个索引值等于1的索引,那么可以将这个索引存在索引值1对应的链表对象中;若某个索引值对应有多个索引,那么可以另外建立一个数据结构存储这个索引值对应的所有索引,然后在这个数据结构和这个索引值对应的链表对象之间建立关联关系,例如,索引值等于6的索引有多个,那么可以建立一个数据结构,在这个数据结构中存储每个索引值等于6的索引,然后在这个数据结构和索引值6对应的链表对象之间建立关联。
在这种存储方式中,执行步骤S102时可以直接在索引链表中找到目标索引对应的链表对象,若这个链表对象直接存储了一个索引,就判断出索引集合中只有一个包含目标索引值的索引,执行步骤S103,若这个链表对象关联了一个数据结构,则判断出索引集合中有多个包含目标索引值的索引,执行步骤S104。
在其他的实施例中,也可以在每个索引值的链表对象中直接记录包含这个索引值的索引的数量,这种情况下也可以通过目标索引值的链表对象中记录的数量直接确定索引集合中有多少个包含目标索引值的索引。
S103、将包含目标索引值的索引确定为目标索引。
可以理解的,在确定出索引集合当前只包括一个记录有目标索引值的索引时,基于目标索引值查找得到的,记录有目标索引值的唯一一个索引,就是需要查找的目标索引。
假设目标索引值等于1,执行步骤S102时,从索引链表中查找出索引值1对应的链表对象,并且确定索引值1对应的这个链表对象所存储的索引,是索引集合中唯一的一个包含的索引值等于1的索引,那么,就可以直接将索引值1对应的链表对象所存储这个索引确定为目标索引。
S104、利用目标索引值,在数据库的索引集合中查找得到目标红黑树。
其中,目标红黑树是一个预先构建的,用于存储索引集合中每一个包含目标索引值的索引的红黑树,如前文所述,目标红黑树和目标索引值对应的链表对象之间存在关联关系,因此,在找到目标索引值对应的链表对象,并确定索引集合有多个包含目标索引值的索引之后,就可以通过目标索引值的链表对象访问目标红黑树。
目标索引值的链表对象和目标红黑树之间的关联关系可以是:
目标索引值的链表对象存储有一个指向目标红黑树的根节点的指针。在查找到目标索引值对应的链表对象之后,就可以利用这个链表对象存储的指针访问目标红黑树的根节点(相当于查找到红黑树的根节点),而一个红黑树的所有节点均和根节点有连接关系(直接连接或者通过其他节点间接连接),因此,访问了目标红黑树的根节点之后就可以基于根节点访问目标红黑树的每一个节点,相当于查找得到整个目标红黑树。
一个红黑树由多个相互连接的节点构成,其中,除了根节点以外每一个节点均有唯一的一个父节点和n个子节点,n可以等于0,1或2,若一个节点的子节点数量为0(即没有节点),则这个节点可以记为该红黑树的叶子节点。
在本申请提供的查找方法中,针对任意一个索引值,该索引值对应的红黑树的每个节点,均用于存储一个包含该索引值的索引。
以图2所述的红黑树为例,索引值6所对应的链表对象指向索引值6对应的红黑树,该红黑树包括7个节点(图中索引值6下方的圆形框和矩形框均表示节点),其中父节点位于上方,子节点位于下方,有两个子节点时,位于左侧的记为左子节点,位于右侧的记为右子节点,每个节点存储一个索引值为6的索引,该红黑树中存储的索引依次是:
(6;9),(6;5),(6;16),(6;3),(6;8),(6;11),(6;18)。
每一个括号和内部的数组表示一个索引,其中,分号前的数字是该索引对应的数据的索引值,分号后的数字是该索引对应的数据的数据标识。
在构建一个用于存储多个索引的红黑树时,可以用索引对应的数据标识作为红黑树的关键字。红黑树是一种特殊形式的二叉树,红黑树的约束条件一方面包括常规的二叉树的基本约束,还包括若干红黑树特有的约束。
其中,二叉树的基本约束是以下两种条件中的任意一种:
第一种,对于二叉树的每一个节点,若该节点有左子节点,则该节点对应的关键字的值小于左子节点的关键字的值,若该节点有右子节点,则该节点的关键字的值大于右子节点的关键字的值;
或者,第二种,对于二叉树的每一个节点,若该节点有左子节点,则该节点对应的关键字的值大于左子节点的关键字的值,若该节点有右子节点,则该节点的关键字的值小于右子节点的关键字的值。
红黑树特有的约束则包括:
第一,红黑树的根节点必须标记为黑色。
第二,红黑树的叶子节点必须标记为黑色。
第三,若一个节点被标记为红色,则这个节点的子节点均必须标记为黑色。
第四,对于某个节点,该节点和每一个属于该节点的后代节点的叶子节点的路径之间均包含相同数量的被标记为黑色的节点。
对于第四条约束,可以结合一个例子进行理解:若一个节点A的所有后代节点中,有四个叶子节点,每一个节点和节点A之间均有一条由若干个节点和节点的连接关系构成的路径,这四条路径包含的被标记为黑色的节点的数量相同。
需要说明的是,对于一个红黑树,该红黑树的所有节点均需要满足同一种基本约束,即,要么该红黑树的所有节点,以及构建了红黑树之后新增的节点均满足第一种基本约束,要么该红黑树的所有节点,以及构建了红黑树之后新增的节点均满足第二种基本约束,不允许同一红黑树中,一部分节点满足第一种基本约束,另一部分节点满足第二种基本约束。
图2所示的例子就是满足第二种基本约束的红黑树,可以发现,图2中每一个节点存储的索引的数据标识,均大于该节点的左子节点的数据标识,并且小于该节点的右子节点的数据标识。
S105、利用目标数据标识在目标红黑树中进行二分查找,得到目标索引。
目标索引,指代目标红黑树中,对应的数据标识和目标数据标识一致的索引。
请参考图3,步骤S105的具体执行过程包括:
S1051、将目标红黑树的根节点确定为当前节点。
S1052、判断目标数据标识和当前的数据标识是否一致。
当前的数据标识,是指,当前节点所对应的索引的数据标识,以图2为例,若当前节点是图2所示的红黑树的根节点,则当前的数据标识就是9。
若当前的数据标识和目标数据标识一致,则执行步骤S1053,步骤S1053执行结束后即确定了目标索引,步骤S105的执行过程完成。
若当前的数据标识和目标数据标识不一致,则执行步骤S1054。
S1053、将当前节点对应的索引确定为目标索引。
S1054、判断目标索引对应的节点位于当前节点的左子树或者右子树。
若目标索引对应的节点位于当前节点的左子树,执行步骤S1055,若目标索引对应的节点位于当前节点的右子树,执行步骤S1056。
目标索引对应的节点位于左子树或者右子树,根据目标数据标识和当前的数据标识之间的比较结果,以及目标红黑树所满足的基本约束确定。
若目标红黑树满足第一种基本约束,即:对于红黑树的每一个节点,该节点对应的关键字的值小于左子节点的关键字的值,且该节点的关键字的值大于右子节点的关键字的值。则目标数据标识大于当前的数据标识时,确定目标索引对应的节点位于左子树,目标数据标识小于当前的数据标识时,确定目标索引对应的节点位于右子树。
若目标红黑树满足第二种基本约束,即:对于红黑树的每一个节点,该节点对应的关键字的值大于左子节点的关键字的值,且该节点的关键字的值小于右子节点的关键字的值,则目标数据标识大于当前的数据标识时,确定目标索引对应的节点位于右子树,目标数据标识小于当前的数据标识时,确定目标索引对应的节点位于左子树。
对于红黑树中的任意一个节点(记为X),X的左子节点,以及左子节点的所有后代节点构成X的左子树;相对的,X的右子节点,以及右子节点的所有后代节点构成X的右子树。
对于红黑树的任意一个节点Y,Y的后代节点包括:Y的所有子节点,以及Y的每一个后代节点的所有子节点。
S1055、将当前节点的左子节点确定为新的当前节点。
步骤S1055执行结束后,返回执行步骤S1052。
结合左子树的定义,可以理解的,当前节点的左子节点,相当于当前节点的左子树的根节点。
S1056、将当前节点的右子节点确定为新的当前节点。
步骤S1056执行结束后,返回执行步骤S1052。
结合右子树的定义,可以理解的,当前节点的右子节点,相当于当前节点的右子树的根节点。
需要说明的是,本申请提供的查找方法可以适用于索引集合的每一个预先构建了对应的红黑树的索引值。以图2为例,假设索引集合中有多个索引值为2的索引,和多个索引值为7的索引,那么在预先构建索引值2对应的红黑树,以及索引值7对应的红黑树的基础上,当需要查找的目标索引所对应的目标索引值是2或7时,同样可以采用上述方法进行查找。
本申请提供一种数据索引的查找方法,获得目标索引值和目标数据标识;其中,目标索引值是目标索引所对应的数据的索引值,目标数据标识是目标索引所对应的数据的数据标识;若存在多个记录有目标索引值的索引,利用目标索引值在索引集合中查找得到基于数据标识构建的目标红黑树;目标红黑树存储目标索引值对应的每一个索引;利用目标数据标识在目标红黑树中进行二分查找,得到目标索引。基于预先构建的存有目标索引值对应的每个索引的目标红黑树,本方案能够利用目标数据标识进行二分查找,不需要逐一检测目标索引值对应的每一个索引就可以查找出携带目标数据标识的目标索引,提高了索引值重复时查找特定索引的效率。
以图2为例,假设需要查找的目标索引值是6,目标数据标识为18,根据上述实施例所提供的查找方法,在找到图2所示的目标红黑树的根节点,即索引(6;9)对应的节点后,执行第一次比较,比较结果为目标数据标识18大于当前的数据标识9,于是确定索引(6;16)的节点为当前节点,执行第二次比较,比较后,确定索引(6;18)的节点为当前节点,执行第三次比较,发现当前的数据标识和目标数据标识一致,从而在目标红黑树中查找得到目标索引(6;18),可以发现,在获得了目标红黑树(即找到目标红黑树的根节点)之后,只需要执行三次比较就能查找得到目标索引。
并且,基于上述查找过程,可以发现,对于图2所示的目标红黑树,从其中查找得到任意一个目标索引所需要执行的比较的次数均小于或等于3次。
相对的,若对图2中索引值为6的7个索引按照列表的形式存储(如下述表1所示),那么在依据目标索引值定位到列表的表头之后(可以假设左侧第一个单元格为表头),需要从表头开始沿着列表的存储顺序逐一将列表中索引的数据标识和目标数据标识进行比对,若需要查找的目标索引位于列表的第3个索引之后,则需要比较至少4次才能从列表中查找出目标索引,特别的,对于下述表1,若目标数据标识为18,则需要执行7次比较才能从列表中找到目标索引。
表1
(6;3) | (6;5) | (6;8) | (6;9) | (6;11) | (6;16) | (6;18) |
可以发现,本申请提供的基于预先构建的红黑树实现的数据索引的查找方法,查找到目标索引所需要执行的比较的次数明显比基于列表实现的查找方法所需要执行的比较的次数,因此,在索引集合中有多个包含目标索引值的索引时,本申请提供的查找方法能够显著提高目标索引的查找效率,相应的,由于需要执行的比较次数较少,本申请提供的查找方法也能够有效的减少查找目标索引时所消耗的计算资源。
进一步的,目前的计算机科学研究结果表明,对于满足平衡条件(任意一个节点的左子树和右子树的深度差小于或等于1)的红黑树,在该红黑树中查找任意一个节点的时间复杂度为O(log2N),对列表中每个节点逐一进行比对的查找方法在查找任意一个节点时的时间复杂度为O(N),其中N为红黑树的节点的总数。具体到本申请中,若目标索引值对应有N个索引,那么利用本申请提供的查找方法从其中查找出任意一个目标索引的时间复杂度为O(log2N),而采用现有的方法进行查找的时间复杂度为O(N)。
当索引集合中存在大量包括目标索引值的索引时,例如,假设有1024个索引的索引值均为目标索引值(设为6),则现有的方法的时间复杂度为O(1024),远远大于本申请提供的查找方法的时间复杂度O(log2N),即O(10),查找方法的时间复杂度越低,效率越高,因此,本申请提供的查找方法在从多个具有相同索引值的索引中查找目标索引时,具有比现有的方法更高的效率。
本申请提供的数据索引的查找方法,可以应用于多种需要对数据库的索引集合中指定的某个索引进行管理的场合。例如,当需要删除数据库存储的某个指定的数据(记为待删除数据)时,一方面需要删除数据库中的待删除数据,另一方面也需要从数据库的索引集合中删除待删除数据所对应的索引,此时就可以利用本申请前述实施例提供的查找方法从数据库的索引集合中找到待删除数据所对应的索引(即前述实施例中的目标索引)并删除目标索引。
请参考图4,用于删除索引集合中的目标索引时,本申请实施例提供的查找方法包括以下步骤:
S401、获得数据删除指令,并提取得到数据删除指令所携带的目标索引值和目标数据标识。
其中,目标索引值是需要查找的目标索引所对应的数据的索引值,目标数据标识是目标索引所对应的数据的数据标识。
数据删除指令一般由具有数据库访问权限的应用程序响应于用户的操作而生成,然后由应用程序发送至数据库的控制程序。
例如,应用程序可以是一个用于浏览学生信息的程序,用户可以在应用程序中输入要查找的学生的姓名作为关键字(如“张三”),应用程序将用户输入的姓名发送给数据库的控制程序,控制程序生成“张三”对应的索引值(假设“张三”对应的索引值为8)后,用这个索引值查找得到学生信息数据库中存储的所有姓名为“张三”的学生的数据(假设有3个),然后应用程序获得这些数据并以下述表2的形式展示:
表2
姓名 | 班级 | 年龄 | 学生编号 | 存储位置 |
张三 | 1 | 13 | 1234 | 7 |
张三 | 2 | 11 | 0124 | 10 |
张三 | 3 | 12 | 4567 | 13 |
其中,第2至第4行每一行对应一个学生的数据,存储位置表示这一行的数据在数据库中的逻辑存储地址,即这一行的数据存储于数据库的第几行,结合前述图1对应的实施例,数据的存储位置可以作为该数据的数据标识。
用户浏览表2所示的信息后,指定数据库中学生编号为“0124”的学生的数据为需要删除的待删除数据,于是,应用程序就生成一个数据删除指令,其中包括待删除数据的索引值(即“张三”对应的索引值8),以及待删除数据的数据标识10。
控制程序获得数据删除指令后,就可以确定目标索引值为8,目标数据标识为10。
可以理解的,将本实施例的应用场景中,需要查找的目标索引,就是用户指定的待删除数据所对应的索引。
可选的,应用程序生成的删除指令也可以不包括待删除数据的索引值,只包括待删除数据的数据标识,这种情况下,控制程序可以基于待删除数据的数据标识在数据库中查找出待删除数据,然后将待删除数据的索引值作为目标索引值。
S402、判断索引集合中是否有多个包含目标索引值的索引。
若存在多个索引值等于数据删除指令的目标索引值的索引,则执行步骤S404,反之,若只存在一个索引值等于数据删除指令的目标索引值的索引,则执行步骤S403。
S403、将包含目标索引值的索引确定为目标索引。
S404、利用目标索引值,在数据库的索引集合中查找得到目标红黑树。
S405、利用目标数据标识在目标红黑树中进行二分查找,得到目标索引。
步骤S402至步骤S405的具体执行过程和图1对应的实施例中步骤S102至步骤S105的具体执行过程一致,此处不再赘述。
S406、执行红黑树的删除操作,从而删除目标红黑树存储的目标索引。
步骤S406也可以理解为,对目标红黑树执行上述数据数据删除指令,从而删除目标红黑树中存储的目标索引。
步骤S406可以在从数据库中删除了待删除数据之后执行,也可以在删除待删除数据之前执行,本申请对此不做限定。
步骤S406的具体执行过程包括:
若存储目标索引的节点是目标红黑树的叶子节点,即存储目标索引的节点没有子节点,那么直接删除该节点以及该节点存储的目标索引,得到删除后的目标红黑树。
若存储目标索引的节点不是目标红黑树的叶子节点,且该节点只有一个子节点,则删除存储目标索引的节点,然后被删除节点(即存储目标索引的节点)的子节点替换原有的被删除节点,得到删除后的目标红黑树。这里的替换是指,若被删除节点是其父节点的右子节点,则删除后的目标红黑树中,被删除节点的子节点代替原有的被删除节点,作为被删除节点的父节点的右子节点,对应的,若被删除节点是其父节点的左子节点,则删除后的目标红黑树中,被删除节点的子节点代替原有的被删除节点,作为被删除节点的父节点的左子节点。
若被删除节点有两个子节点,将位于被删除节点的左子树的最右端的节点,或者位于右子树的最左端的节点确定为替换节点,用替换节点替换被删除节点,同时删除替换节点,得到删除后的目标红黑树。
最后,需要检验删除后的目标红黑树是否满足相应的约束条件,若不满足则基于相应的约束条件调整删除后的目标红黑树,获得满足约束条件的调整后的目标红黑树,从而完成本次删除操作。
可选的,若执行了步骤S406之后,目标红黑树中除了根节点以外的节点均被删除,根节点没有子节点,即目标索引值对应的索引只剩一个,可以保留这个目标红黑树,以便后续有新增的、且索引值等于目标索引值的索引时在这个根节点的基础上增加节点;也可以直接删除这个根节点以及链表对象中指向这个根节点的指针,并将这个根节点存储的索引存储在目标索引值对应的链表对象中。
若执行了步骤S406之后,目标红黑树中的节点均被删除,目标红黑树成为空红黑树,即索引集合中没有索引值等于目标索引值的索引,则可以将目标索引值对应的链表对象中指向目标红黑树的根节点的指针删除,并在目标索引值对应的链表对象中添加一个表示空索引的标记,以声明索引集合中没有索引值等于目标索引值的索引。
例如,目标索引值为6,执行了步骤S406后,索引集合中唯一的一个索引值等于6的索引被删除,于是可以删除索引值6对应的链表对象中,指向索引值6对应的红黑树的指针,同时添加上述标记,以声明索引集合中没有索引值等于6的索引。
本申请实施例提供的查找方法还可以在更新数据库某一数据的数据标识时使用。例如,用户可能会指定数据库中的某一个数据(记为待更新数据)从当前的逻辑存储地址移动至另一个逻辑存储地址,如果索引集合中索引记录的数据标识是对应的数据的逻辑存储地址,则发生这种情况时需要从索引集合中查找出待更新数据的索引(即目标索引),然后将待更新数据的索引的数据标识更新为移动后的数据标识。请参考图5,基于本申请实施例提供的索引的查找方法实现的索引的更新方法,可以包括以下步骤:
S501、获得数据标识更新指令,并提取得到数据标识更新指令所携带的目标索引值和目标数据标识。
应用程序可以从数据库中获取并向用户展示多个数据,然后响应用户的操作,将用户指定的数据确定为待更新数据,进而生成相应的数据标识更新指令。步骤S501的具体执行过程和前述实施例的步骤S401类似,此处不再赘述。
数据标识更新指令也可以只携带目标数据标识,这种情况下控制程序可以根据目标数据标识确定待更新数据之后,在获得待更新数据的索引值作为目标索引值。
S502、判断索引集合中是否有多个包含目标索引值的索引。
若存在多个索引值等于数据删除指令的目标索引值的索引,则执行步骤S504,反之,若只存在一个索引值等于数据删除指令的目标索引值的索引,则执行步骤S503。
S503、将包含目标索引值的索引确定为目标索引。
S504、利用目标索引值,在数据库的索引集合中查找得到目标红黑树。
S505、利用目标数据标识在目标红黑树中进行二分查找,得到目标索引。
步骤S502至步骤S505的具体执行过程和图1对应的实施例中步骤S102至步骤S105的具体执行过程一致,此处不再赘述。
S506、更新目标索引记录的数据标识。
步骤S506所述的更新,是指,将目标索引记录的目标数据标识,变更为数据标识更新指令所指定的替换数据标识。
例如,以数据在数据库中的逻辑存储地址(即存储于表格的第几行)作为数据标识,用户指定需要将现在存储于第7行的待更新数据(即目标数据标识等于7)移动至第9行(即替换数据标识),那么,在找到待更新数据的索引(即目标索引)之后,步骤S506所述的更新就是,将目标索引记录的数据标识7,变更为数据标识9。
若更新后的目标红黑树不满足目标红黑树的约束条件,则基于目标红黑树的约束条件对更新后的目标红黑树进行调整,得到满足约束条件的调整后的目标红黑树,从而完成本次更新操作。
若更新后的目标红黑树满足约束条件,则不需要进行调整,直接结束本次更新操作。
图4和图5的实施例中均涉及数据查询过程,即利用目标索引值从数据库中查找出索引值等于目标索引值的数据的过程,数据查询过程具体包括:
在索引链表中找到索引值等于目标索引值的链表对象,若索引集合中只有一个索引值等于目标索引值的索引,则读取这个索引的数据标识,然后依据这个数据标识从数据库中读取出对应的数据作为查询结果,从而完成本次查询过程。
若索引集合中有多个索引值等于目标索引值的索引,通过目标索引值对应的链表对象访问目标红黑树,然后从目标红黑树的根节点开始,逐一访问目标红黑树的每一个节点,每访问到一个节点,利用这个节点存储的索引的数据标识,从数据库中读取这个索引对应的数据,由此,在访问完目标红黑树的所有节点后,就可以查询得到数据库中所有索引值等于目标索引值的数据作为查询结果,即完成本次查询过程。
进一步的,在上述查询过程中,还可以将读取的数据的关键字段的字段值和用户输入的用于查询的关键字进行比对,以筛选出字段值和用户输入的关键字不匹配的数据。
仍然以学生信息数据库为例,假设用户输入的关键字是学生姓名“张三”,基于索引算法生成的“张三”的索引值是8,但是数据库中存储有姓名为“小明”的学生的数据,并且基于索引算法生成的“小明”的索引值是8,此时,以目标索引值8查找得到的索引就包括姓名为“张三”的学生的数据的索引,和姓名为“小明”的学生的数据的索引,为了避免查询结果中包括姓名为“小明”的学生的数据,可以将根据索引的数据标识找到的数据的关键字段的字段值和用户输入的关键字进行比对,即访问到目标索引值8对应的目标红黑树的任意一个节点时,基于该节点的索引的数据标识读取得到一个学生的数据,然后判断这个学生的数据中,“姓名”字段的字段值是否为“张三”,若是“张三”,则在查询结果中保留该数据,反之,若不是“张三”,则从查询结果中删除该数据。
如前文所述,本申请实施例中,利用红黑树存储目标索引值对应的多个索引,如图6所示,构建目标红黑树的方法包括:
S601、生成目标红黑树的根节点,并在目标红黑树的根节点中存储一个目标索引值对应的索引。
其中,根节点被标记为黑色。
需要说明的是,本实施例提供的构建目标红黑树的方法可以在建立数据库及其索引集合时执行,也可以在数据库及其索引集合建立完成后,向数据库中新增数据,并向索引集合中增加对应的索引时执行。
第一种情况,若建立数据库的索引集合时,就发现目标索引值对应有多个索引,则可以直接生成一个根节点,在这个根节点中存储目标索引值对应的一个索引,然后在建立索引链表时,将这个存储有目标索引值对应的索引的根节点和目标索引值对应的链表对象关联,即在目标索引值对应的链表对象中添加一个指向上述根节点的指针。
第二种情况,若在数据库及其索引集合建立时,目标索引值对应的索引只有一个,则这个索引一般会直接存储在目标索引值对应的链表对象中。在数据库使用过程中应用程序可能会向数据库中增加新数据,对应的索引集合中也会增加新数据对应的索引,若某次增加新的索引时,发现新增的索引的索引值等于目标索引值(即这个新增的索引是目标索引值对应的一个索引),并且索引集合中已经有一个或多个目标索引值对应的索引,则可以执行步骤S601。
在第二种情况中,首先需要取出目标索引值对应的链表对象中存储的所有索引,然后生成根节点,向其中存入目标索引值对应的一个索引,并在目标索引值对应的链表对象中存储指向根节点的指针,即目标索引值对应的链表对象不再存储索引,只用于保存指向目标红黑树的根节点的指针。
S602、检测是否有目标索引值对应的且未存入目标红黑树的索引。
若有目标索引值对应的且未存入目标红黑树的索引,则执行步骤S603,直至目标红黑树存储有索引集合包括的目标索引值对应的每一个索引为止,就完成了目标红黑树的构建。
若没有目标索引值对应的且未存入目标红黑树的索引,则目标红黑树构建完成,本方法结束。
S603、确定待存储索引并生成一个用于存储待存储索引的待插入节点。
其中,待存储索引指代任意一个目标索引值对应的、且未存储在目标红黑树中的索引。
S604、将待插入节点插入目标红黑树,并将待插入节点标记为红色或者黑色。
步骤S604执行结束后返回执行步骤S602。
由于本实施例所构建的目标红黑树是红黑树,因此,向目标红黑树插入待插入节点时,待插入节点和原有的节点之间的连接关系根据目标红黑树现有的节点的颜色,原有的节点存储的索引的数据标识,待插入节点存储的索引的数据标识和红黑树的约束条件确定,并且,根据实际情况,插入一个待插入节点还可能需要对目标红黑树原有的节点的连接关系和标记的颜色进行调整,使得目标红黑树能够满足红黑树的约束条件。
另外,待插入节点需要被标记为红色或者黑色,具体被标记为哪种颜色也需要根据目标红黑树现有的节点的颜色,原有的节点存储的索引的数据标识,待插入节点存储的索引的数据标识和红黑树的约束条件确定。
将一个待插入节点插入一个红黑树,是指,将这个待插入节点确定为红黑树中原有的某个节点的左子节点或者右子节点,进一步的,根据实际情况,红黑树原有的部分节点还可能被确定为待插入节点的子节点(可以是右子节点或者左子节点)。
在满足红黑树的约束条件的前提下向红黑树中插入一个待插入节点的方法可以参考相关的现有技术,此处不再赘述。
进一步的,在目标红黑树构建完成之后,若任意时刻有新增的索引值等于目标索引值的索引,则可以再次执行本实施例提供的方法的步骤S603和步骤S604,将新增的目标索引值对应的索引也存储在目标红黑树中,以确保任意时刻目标红黑树中均存储有索引集合当前所包含的每一个目标索引值对应的索引。
前述图2中所示的用于存储索引值6所对应的多个索引的红黑树,就可以采用上述方法构建,其中圆形节点表示该节点被标记为黑色,矩形节点表示该节点被标记为红色。
可以理解的,上述实施例中的目标索引值可以是任意一个索引值,换言之,对于任意一个索引值,均可以基于上述方法构建一个用于存储这个索引值对应的所有索引的红黑树。
用红黑树存储目标索引值对应的多个索引的优点在于:
只满足基本约束的常规的二叉树在某些情况下平衡性极差,也就是可能出现一个或多个节点,这些节点的左子树的高度和右子树的高度的差值过大(左子树远高于右子树,或者右子树远高于左子树),而二叉树的平衡性会直接影响从二叉树中查找任意一个节点的效率,二叉树的平衡性越差,基于二叉树的查找的效率越低。
相对的,通过在建立满足上述红黑树的约束条件的目标红黑树,可以确保最终建立的目标红黑树的平衡性不会太差,也就是可以将目标红黑树中任意一个节点的左子树和右子树的高度差控制在一定范围内。具体的,现有的研究表明,对于一个包括k个被标记为红色的节点的红黑树,这个红黑树内的任意一个节点,其右子树和左子树的高度差均小于或等于k。
综上所述,通过建立一个满足红黑树的约束条件的目标红黑树,可以将查找目标索引的效率控制在一定范围内,避免查找效率发生显著的下降。
结合本申请任一实施例所提供的数据索引的查找方法,本申请实施例还提供一种数据索引的查找装置,请参考图7,该装置包括以下单元:
获得单元701,用于获得目标索引值和目标数据标识。
其中,目标索引值是需要查找的目标索引所对应的数据的索引值,目标数据标识是目标索引所对应的数据的数据标识;数据库中的每一项数据均对应有唯一的数据标识。
第一查找单元702,若数据库的索引集合包括多个记录有目标索引值的索引,利用目标索引值,在数据库的索引集合中查找得到目标红黑树。
其中,目标红黑树以索引对应的数据标识作为关键字而构建的;目标红黑树存储目标索引值对应的每一个索引。
第二查找单元703,利用目标数据标识在目标红黑树中进行二分查找,得到目标索引。
可选的,获得单元701获得目标索引值和目标数据标识时,具体用于:
获得数据删除指令,并提取得到数据删除指令所携带的目标索引值和目标数据标识;
查找装置还包括:
删除单元704,用于执行红黑树的删除操作,从而删除目标红黑树存储的目标索引。
可选的,获得单元701时,具体用于:
获得数据标识更新指令,并提取得到数据标识更新指令所携带的目标索引值和目标数据标识;
查找装置还包括更新单元705,用于:
更新目标索引记录的数据标识。
目标红黑树包括多个节点,每一个节点均用于存储一个目标索引值对应的索引,并且,每一个节点所存储的索引均与其他节点存储的索引不同。
第二查找单元703利用目标数据标识在目标红黑树中进行二分查找,得到目标索引时,具体用于:
将目标红黑树的根节点确定为当前节点;
比较目标数据标识和当前节点对应的索引的数据标识,得到比较结果;
若比较结果为,目标数据标识和当前节点对应的索引的数据标识一致,将当前节点对应的索引确定为目标索引;
若比较结果为,目标数据标识和当前节点对应的索引的数据标识不一致,根据比较结果确定目标索引对应的节点位于当前节点的左子树或者右子树;
若目标索引对应的节点位于当前节点的左子树,将当前节点的左子节点确定为新的当前节点;
若目标索引对应的节点位于当前节点的右子树,将当前节点的右子节点确定为新的当前节点;
返回执行比较目标数据标识和当前节点对应的索引的数据标识,得到比较结果,直至查找得到目标索引为止。
可选的,目标红黑树可以是红黑树;
查找装置还包括,构建单元706,用于针对任意一个索引值,利用这个索引值对应的多个索引构建这个索引值对应的红黑树。
构建单元706具体用于:
获得索引集合包括的目标索引值对应的每一个索引;
生成目标红黑树的根节点,并在目标红黑树的根节点中存储任意一个目标索引值对应的索引;其中,根节点被标记为黑色;
确定待存储索引并生成一个用于存储待存储索引的待插入节点;其中,待存储索引指代任意一个目标索引值对应的、且未存储在目标红黑树中的索引;
根据目标红黑树现有的节点的颜色、节点存储的索引的数据标识和预设的红黑树的约束条件,将待插入节点插入目标红黑树,并将待插入节点标记为红色或者黑色;
返回执行确定待存储索引并生成一个用于存储待存储索引的待插入节点,直至目标红黑树存储有索引集合包括的目标索引值对应的每一个索引为止。
第一查找单元702还用于:
若数据库的索引集合中只有一个记录有目标索引值的索引,获得索引并将索引作为目标索引。
本申请实施例所提供的查找装置的具体工作原理,可以参考本申请任一实施例所提供的查找方法中的相关步骤,此处不再赘述。
本申请提供一种数据索引的查找装置,获得单元701获得目标索引值和目标数据标识;其中,目标索引值是目标索引所对应的数据的索引值,目标数据标识是目标索引所对应的数据的数据标识;若存在多个记录有目标索引值的索引,第一查找单元702利用目标索引值在索引集合中查找得到基于数据标识构建的目标红黑树;目标红黑树存储目标索引值对应的每一个索引;第二查找单元703利用目标数据标识在目标红黑树中进行二分查找,得到目标索引。基于预先构建的存有目标索引值对应的每个索引的目标红黑树,本方案能够利用目标数据标识进行二分查找,不需要逐一检测目标索引值对应的每一个索引就可以查找出携带目标数据标识的目标索引,提高了索引值重复时查找特定索引的效率。
本申请实施例还提供一种计算机存储介质,用于存储程序,该程序被执行时,具体用于实现本申请任一实施例所提供的数据索引的查找方法。
本申请实施例还提供一种电子设备,请参考图8,该电子设备包括存储器801和处理器802。
其中,存储器801用于存储程序。
处理器802用于执行存储器存储的程序,具体用于实现本申请任一实施例所提供的数据索引的查找方法。
最后,还需要说明的是,在本文中,诸如目标和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
需要注意,本发明中提及的“目标”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种数据索引的查找方法,其特征在于,包括:
获取目标索引值和目标数据标识;其中,所述目标索引值是需要查找的目标索引所对应的数据的索引值,所述目标数据标识是所述目标索引所对应的数据的数据标识;
若数据库的索引集合包括多个记录有所述目标索引值的索引,利用所述目标索引值,在所述索引集合中查找目标红黑树;其中,所述目标红黑树用于存储所述目标索引值对应的索引,且所述目标红黑树以所述目标索引值对应的索引的数据标识作为关键字而构建;
利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引。
2.根据权利要求1所述的查找方法,其特征在于,所述获取目标索引值和目标数据标识,包括:
获取数据删除指令,并提取所述数据删除指令所携带的目标索引值和目标数据标识;
其中,所述利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引之后,还包括:
对所述目标红黑树执行数据删除指令,从而删除所述目标红黑树存储的所述目标索引。
3.根据权利要求1所述的查找方法,其特征在于,所述目标红黑树包括多个节点,每一个所述节点均用于存储一个所述目标索引值对应的索引,并且,每一个所述节点所存储的索引均与其他节点存储的索引不同;
其中,所述利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引,包括:
以二分查找方法逐一将所述目标红黑树存储的索引的数据标识和所述目标数据标识进行比较,得到所述目标红黑树中数据标识和所述目标数据标识一致的索引;
将所述数据标识和所述目标数据标识一致的索引,确定为所述目标索引。
4.根据权利要求3所述的查找方法,其特征在于,所述以二分查找方法逐一将所述目标红黑树存储的索引的数据标识和所述目标数据标识进行比较,得到所述目标红黑树中数据标识和所述目标数据标识一致的索引,包括:
将所述目标红黑树的根节点确定为当前节点;
比较所述目标数据标识和所述当前节点对应的索引的数据标识,得到比较结果;
若所述比较结果为,所述目标数据标识和所述当前节点对应的索引的数据标识一致,将所述当前节点对应的索引确定为所述目标索引;
若所述比较结果为,所述目标数据标识和所述当前节点对应的索引的数据标识不一致,根据所述比较结果确定所述目标索引对应的节点位于所述当前节点的左子树或者右子树;
若所述目标索引对应的节点位于所述当前节点的左子树,在所述当前节点的左子树中查找得到数据标识和所述目标数据标识一致的索引;
若所述目标索引对应的节点位于所述当前节点的右子树,在所述当前节点的右子树中查找得到数据标识和所述目标数据标识一致的索引。
5.根据权利要求1所述的查找方法,其特征在于,所述获取目标索引值和目标数据标识,包括:
获取数据标识更新指令,并提取得到所述数据标识更新指令所携带的目标索引值和目标数据标识;
其中,所述利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引之后,还包括:
更新所述目标索引的数据标识。
6.根据权利要求1所述的查找方法,其特征在于,所述利用所述目标索引值,在所述索引集合中查找目标红黑树之前,还包括:
生成所述目标红黑树的根节点,并在所述目标红黑树的根节点中存储任意一个所述目标索引值对应的索引;其中,所述根节点被标记为黑色;
确定待存储索引并生成一个用于存储所述待存储索引的待插入节点;其中,所述待存储索引指代任意一个所述目标索引值对应的、且未存储在所述目标红黑树中的索引;
根据所述目标红黑树现有的节点的颜色、所述节点存储的索引的数据标识和预设的红黑树的约束条件,将所述待插入节点插入所述目标红黑树,并将所述待插入节点标记为红色或者黑色;
确定待存储索引,直至所述目标红黑树存储有所述索引集合包括的所述目标索引值对应的每一个索引为止。
7.一种数据索引的查找装置,其特征在于,包括:
获取单元,用于获取目标索引值和目标数据标识;其中,所述目标索引值是需要查找的目标索引所对应的数据的索引值,所述目标数据标识是所述目标索引所对应的数据的数据标识;数据库中的每一项数据均对应有唯一的数据标识;
第一查找单元,若数据库的索引集合包括多个记录有所述目标索引值的索引,利用所述目标索引值,在所述数据库的索引集合中查找得到目标红黑树;其中,所述目标红黑树用于存储所述目标索引值对应的索引,且所述目标红黑树以所述目标索引值对应的索引的数据标识作为关键字而构建;
第二查找单元,用于利用所述目标数据标识在所述目标红黑树中进行二分查找,得到所述目标索引。
8.根据权利要求7所述的查找装置,其特征在于,所述获取单元获取目标索引值和目标数据标识时,具体用于:
获取数据删除指令,并提取得到所述数据删除指令所携带的目标索引值和目标数据标识;
其中,所述查找装置还包括:
删除单元,用于对所述目标红黑树执行数据删除指令,从而删除所述目标红黑树存储的所述目标索引。
9.一种计算机存储介质,其特征在于,用于存储程序,所述程序被执行时,用于实现如权利要求1至6任意一项所述的数据索引的查找方法。
10.一种电子设备,其特征在于,包括存储器和处理器;
所述存储器用于存储程序;
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如权利要求1至6任意一项所述的数据索引的查找方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010842386.6A CN111984649A (zh) | 2020-08-20 | 2020-08-20 | 数据索引的查找方法、装置和相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010842386.6A CN111984649A (zh) | 2020-08-20 | 2020-08-20 | 数据索引的查找方法、装置和相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111984649A true CN111984649A (zh) | 2020-11-24 |
Family
ID=73443582
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010842386.6A Pending CN111984649A (zh) | 2020-08-20 | 2020-08-20 | 数据索引的查找方法、装置和相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111984649A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765099A (zh) * | 2021-01-25 | 2021-05-07 | 中车大连机车研究所有限公司 | 一种数据文件的处理方法及处理装置 |
CN113946585A (zh) * | 2021-10-28 | 2022-01-18 | 苏州贝塔智能制造有限公司 | 衣物裁片数据索引构建方法、查找方法及裁片分拣方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120179877A1 (en) * | 2007-08-15 | 2012-07-12 | University Of Rochester, Office Of Technology Transfer | Mechanism to support flexible decoupled transactional memory |
CN105117471A (zh) * | 2015-08-31 | 2015-12-02 | 北京金山安全软件有限公司 | 一种读写操作方法及装置 |
CN107146155A (zh) * | 2017-04-18 | 2017-09-08 | 优品财富管理股份有限公司 | 一种利用红黑树索引提高交易系统撮合效率的方法及系统 |
CN107632789A (zh) * | 2017-09-29 | 2018-01-26 | 郑州云海信息技术有限公司 | 基于分布式存储的重删方法、系统及数据重复检测方法 |
CN109885576A (zh) * | 2019-03-06 | 2019-06-14 | 珠海金山网络游戏科技有限公司 | 一种哈希表创建方法及系统、计算设备及存储介质 |
CN109902092A (zh) * | 2019-02-22 | 2019-06-18 | 广州荔支网络技术有限公司 | 一种数据存储系统的操作方法、装置和移动终端 |
CN111488341A (zh) * | 2020-03-27 | 2020-08-04 | 北京金山云网络技术有限公司 | 数据库索引的管理方法、装置及电子设备 |
-
2020
- 2020-08-20 CN CN202010842386.6A patent/CN111984649A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120179877A1 (en) * | 2007-08-15 | 2012-07-12 | University Of Rochester, Office Of Technology Transfer | Mechanism to support flexible decoupled transactional memory |
CN105117471A (zh) * | 2015-08-31 | 2015-12-02 | 北京金山安全软件有限公司 | 一种读写操作方法及装置 |
CN107146155A (zh) * | 2017-04-18 | 2017-09-08 | 优品财富管理股份有限公司 | 一种利用红黑树索引提高交易系统撮合效率的方法及系统 |
CN107632789A (zh) * | 2017-09-29 | 2018-01-26 | 郑州云海信息技术有限公司 | 基于分布式存储的重删方法、系统及数据重复检测方法 |
CN109902092A (zh) * | 2019-02-22 | 2019-06-18 | 广州荔支网络技术有限公司 | 一种数据存储系统的操作方法、装置和移动终端 |
CN109885576A (zh) * | 2019-03-06 | 2019-06-14 | 珠海金山网络游戏科技有限公司 | 一种哈希表创建方法及系统、计算设备及存储介质 |
CN111488341A (zh) * | 2020-03-27 | 2020-08-04 | 北京金山云网络技术有限公司 | 数据库索引的管理方法、装置及电子设备 |
Non-Patent Citations (2)
Title |
---|
周彩兰;张亚芳;郭凤玲;: "哈希红黑树算法在网络信息分析中的应用", 软件导刊, no. 13, 30 July 2007 (2007-07-30) * |
马博韬;孙鹏;朱小勇;: "红黑树算法研究综述", 网络新媒体技术, no. 04, 15 July 2018 (2018-07-15) * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765099A (zh) * | 2021-01-25 | 2021-05-07 | 中车大连机车研究所有限公司 | 一种数据文件的处理方法及处理装置 |
CN113946585A (zh) * | 2021-10-28 | 2022-01-18 | 苏州贝塔智能制造有限公司 | 衣物裁片数据索引构建方法、查找方法及裁片分拣方法 |
CN113946585B (zh) * | 2021-10-28 | 2022-08-26 | 苏州贝塔智能制造有限公司 | 衣物裁片数据索引构建方法、查找方法及裁片分拣方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6175835B1 (en) | Layered index with a basic unbalanced partitioned index that allows a balanced structure of blocks | |
US6754666B1 (en) | Efficient storage and access in a database management system | |
US8356029B2 (en) | Method and system for reconstruction of object model data in a relational database | |
AU759360B2 (en) | Database apparatus | |
US8069188B2 (en) | Database system storing a data structure that includes data nodes connected by context nodes and related method | |
US9576011B2 (en) | Indexing hierarchical data | |
US8161371B2 (en) | Method and system for defining a heirarchical structure | |
US20140297651A1 (en) | Using hash table to retrieve leaf index blocks | |
CN102768674B (zh) | 一种基于路径结构的xml数据存储方法 | |
US8443002B2 (en) | Operationally complete hierarchical repository in a relational database | |
JP3914662B2 (ja) | データベース処理方法及び実施装置並びにその処理プログラムを記憶した媒体 | |
US20180144061A1 (en) | Edge store designs for graph databases | |
KR20060021858A (ko) | 주석 관리 방법, 컴퓨터 판독가능 매체 및 주석 관리시스템 | |
KR101678149B1 (ko) | 데이터베이스의 데이터 탐색방법 및 그 장치와 이를 위한 컴퓨터 프로그램 | |
MX2010012866A (es) | Compaginacion de datos jerarquicos. | |
EP3101556B1 (en) | Indexing dynamic hierarchical data | |
CN109522271B (zh) | 一种b+树节点的批量插入和删除方法及装置 | |
Ling et al. | Semistructured database design | |
CN111984649A (zh) | 数据索引的查找方法、装置和相关设备 | |
WO2023179787A1 (zh) | 分布式文件系统的元数据管理方法和装置 | |
CN109871233B (zh) | 一种云编程文件管理方法及装置、设备、存储介质 | |
US20180144060A1 (en) | Processing deleted edges in graph databases | |
CA2380348A1 (en) | Method for organizing directories | |
Strate et al. | Expert performance indexing for SQL server 2012 | |
CN114416741A (zh) | 基于多级索引的kv数据写入读取方法、装置及存储介质 |
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 |