CN110928882B - 一种基于改进红黑树的内存数据库索引方法及*** - Google Patents
一种基于改进红黑树的内存数据库索引方法及*** Download PDFInfo
- Publication number
- CN110928882B CN110928882B CN201911186209.0A CN201911186209A CN110928882B CN 110928882 B CN110928882 B CN 110928882B CN 201911186209 A CN201911186209 A CN 201911186209A CN 110928882 B CN110928882 B CN 110928882B
- Authority
- CN
- China
- Prior art keywords
- node
- black tree
- red
- pointer
- leaf
- 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.)
- Active
Links
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/23—Updating
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (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
本发明公开了一种基于改进红黑树的内存数据库索引方法,包括以下步骤:S1、创建一改进的红黑树,其节点结构按照标准红黑树创建;S2、创建一头部节点,该头部节点内设有指针且指向所述红黑树索引结构的根节点,指针指向所述红黑树索引结构的第一个叶子节点,以及指针指向所述红黑树索引结构的最后一个叶子节点;S3、创建一双向链表,该链表的元素包括所述红黑树索引结构的所有叶子节点;所述改进的红黑树的节点内均设有指向其左子树、右子树的特定叶子节点的指针;所述红黑树索引结构的叶子节点内设有用于指向数据的指针/地址,或者直接将叶子节点用于存放数据。该索引方法在数据的***、删除、查找以及遍历操作上的表现都很优秀。
Description
技术领域
本发明属于内存数据库领域,具体为一种基于改进红黑树的内存数据库索引方法及***。
背景技术
内存数据库是基于内存的数据库管理***,其中,数据信息和管理信息保存在内存中,可以为应用层提供极速的数据存取性能。现有基于内存的数据管理组件,如C++标准库的map一般采用标准的红黑树存储数据,标准的红黑树在数据的新增和查找等场景具有比较平衡的性能表现。
相应的,常见的还有管理储存于硬盘上的数据的数据库***,其中,数据信息和管理信息保存在硬盘中。与内存不同的是,硬盘上存放的数据量较大,其数据信息的索引一般采用B+树索引结构。B+树结构的特点在于实现索引的层数相对较少,有利于减少硬盘的访问次数,因此具有较高的查询效率。在数据量较大、数据存储场景复杂时,则引入专门的数据库管理***,如Oracle、MySQL等。这些数据库管理***的数据都是存储在硬盘上,同时可以为应用层提供数据访问的事务机制、索引结构等满足各种业务实现所需要的功能,其索引结构一般也是基于B+树实现。
而B+树与红黑树相比,B+树的设计目的就是为了硬盘这一类存储设备提供一种平衡多路查找树,在节点的数量相同的情况下,一棵B+树的高度远远小于红黑树的高度,B+树的操作时间主要取决于访问磁盘的时间和CPU(中央处理器)的计算时间这两部分。CPU的运算速度非常快,则忽略CPU的计算时间的差异,操作效率主要取决于访问磁盘的次数,那么在关键字总数相同的情况下,B+树的高度小,磁盘I/O操作的时间少,因而具有非常高的查找效率。但B+树在数据的***、删除等操作方面的性能则不如红黑树。
在一些特殊领域中,例如金融行业交易***,其主要需求在于实现极速交易,因此需要高性能的数据管理组件,对数据的存取、访问提供索引支持,并且能够提供对数据的新增、删除、遍历、查找等操作的高性能响应。而现有技术,如上述B+树、红黑树结构各有优点,也各有缺点,特别的,所述金融行业交易***中,遍历数据信息的操作频次较高,而现有技术中并没有相应的解决方案,能够同时兼顾对数据信息的各个操作的性能响应。
发明内容
为了克服现有技术不能兼顾查找效率和数据的***、删除等操作的效率的缺陷,以及遍历频次较高时的性能低的情形,本发明提供了一种基于改进红黑树的内存数据库索引方法及***,在保证查找、***和删除的性能的高效与平衡的基础上,同时解决了遍历性能低的问题。
本发明解决其技术问题所采用的技术方案是:一种基于改进红黑树的内存数据库索引方法,包括以下步骤:
创建改进的红黑树索引结构:
S1、创建一改进的红黑树,其节点结构按照标准红黑树创建;
S2、创建一头部节点head,该头部节点head内设有指针header.root且指向所述红黑树索引结构的根节点root,指针header.flink指向所述红黑树索引结构的第一个叶子节点,以及指针header.blink指向所述红黑树索引结构的最后一个叶子节点;
S3、创建一双向链表,该链表的元素包括所述红黑树索引结构的所有叶子节点,其中,除第一个叶子节点外,每一个叶子节点内都设有一个指向该叶子节点的前一个叶子节点的指针flink;除最后一个叶子节点外,每一个叶子节点内都设有一个指向该叶子节点的后一个叶子节点的指针blink;
所述改进的红黑树的节点内设有指向该节点的左子节点的指针lc和指向该节点的右子节点的指针rc,或者除带有叶子节点的节点之外的节点内设有所述指针lc和指针rc,该指针lc和指针rc的设置与标准红黑树一致;所述改进的红黑树的节点内均设有指向其左子树、右子树的特定叶子节点的指针;
所述红黑树索引结构的叶子节点内设有用于指向数据的指针/地址,或者直接将叶子节点用于存放数据;
通过所述红黑树索引结构进行数据查找;***数据以及删除数据则通过对所述红黑树索引结构的叶子节点进行操作且涉及该红黑树索引结构的节点的操作与标准红黑树相同;通过所述循环双向链表对数据信息进行遍历操作。
进一步的,所述红黑树索引结构的节点内存放的指向该节点的左子树、右子树的特定叶子节点的指针包括指向该节点的左子树的最大叶子节点的指针lk和指向该节点的右子树的最小叶子节点的指针rk。
进一步的,所述改进的红黑树索引结构中,其第一个叶子节点内还设有指向所述头部结点head的指针F-flink,其最后一个叶子节点内还设有指向所述头部节点head的指针B-blink,此时所述双向链表与所述头部节点head共同构成一双向循环链表。
一种基于改进红黑树的内存数据库索引***,用于管理所述基于改进红黑树的内存数据库索引方法的索引结构,该内存数据库索引***包括:
节点结构体管理模块:用于节点结构体的信息维护;所述节点结构体包括角色识别结构体、节点关系结构体、以及所有指针lk和所有指针rk;所述角色识别结构体通过角色识别结构体子管理模块进行管理,所述节点关系结构体通过节点关系结构体子管理模块进行管理;
所述角色识别结构体子管理模块:用于角色识别结构体的管理;所述角色识别结构体包括颜色字段color、节点类型字段type、根节点root标记字段、头部节点标记;一个角色识别结构体存储一个节点的角色信息;在新增节点的时候赋值,在查找数据的时候根据该结构体识别节点角色,并做相应的操作。
所述节点关系结构体子管理模块:用于节点关系结构体的管理;所述节点关系结构体包括前向节点字段、后向节点字段、左子节点字段、右子节点字段,节点关系结构体存储节点的有关联的节点的信息;所述前向节点字段和后向节点字段是叶子节点的属性,所有叶子节点通过这两个字段构造成一个双向链表后者双向循环链表,在遍历数据的时候,利用这两个字段完成;所述左子节点字段和右子节点字段是所述改进的红黑树的节点的属性,这两个字段是与标准红黑树的结构一致,在红黑树的节点查找过程中,通过这两个字段逐步遍历红黑树。
与现有技术相比,本发明的有益效果是:
1、在数据的***、删除和查找操作上的表现都很优秀,即使在最坏情况下,也保留了标准红黑树的优秀性能。
2、遍历操作时间复杂度是O(1),在所有数据结构中,是最优的结果。
附图说明
图1为创建实施例的改进的红黑树索引结构的流程图示意图。
图2为通过实施例的基于改进红黑树的内存数据库索引方法进行数据的查找的流程示意图。
图3为通过实施例的基于改进红黑树的内存数据库索引方法进行数据的新增的流程示意图。
图4为通过实施例的基于改进红黑树的内存数据库索引方法进行索引管理的内存数据库中的一个用户表的改进的红黑树索引结构的示意图。
图5为在图4中的改进的红黑树上***一节点的示意图,其中***的节点为节点J10。
图6为图5的节点J6进行一次左旋得到的改进的红黑树的示意图。
图7为图6的改进的红黑树经过颜色调整后的结果示意图。
图4-图7中:圆形节点表示该节点是黑的,正方形节点表示该节点是红的,菱形节点表示叶子节点。
具体实施方式
以下结合附图和具体实施例对本发明进一步说明。
标准红黑树、B+树等作为本领域的现有公知技术,具体的技术信息可以通过文献资料或者教材获得,例如:算法导论原书第3版[M].机械工业出版社,2012:13,780.本发明对相关现有技术,尤其是不涉及改进的地方,不再赘述。
如图1所示,本实施例的基于改进红黑树的内存数据库索引方法,包括以下步骤:
创建改进的红黑树索引结构,
S1、创建一改进的红黑树,其节点结构按照标准红黑树创建,即满足:a.每个节点或是红的,或是黑的;b.根节点root是黑的;c.每个叶子节点是黑的;d.如果一个节点是红色的,则它的两个子节点都是黑的;e.对于每个节点,从该节点到其后代叶子结点的简单路径上,均包含相同数目的黑节点;因此本实施例的改进的红黑树索引结构基本继承了标准红黑树在***、删除等数据操作与查找效率之间的较为平衡的性能,也就保证了改进的红黑树在最坏情况下依然具有较好的性能;
S2、创建一头部节点head,该头部节点head内设有指针header.root指向所述红黑树索引结构的根节点root,指针header.flink指向所述红黑树索引结构的第一个叶子节点,以及指针header.blink指向所述红黑树索引结构的最后一个叶子节点;
S3、创建一双向链表,该链表的元素包括所述红黑树索引结构的所有叶子节点,其中,除第一个叶子节点外,每一个叶子节点内都设有一个指向该叶子节点的前一个叶子节点的指针flink;除最后一个叶子节点外,每一个叶子节点内都设有一个指向该叶子节点的后一个叶子节点的指针blink;所述头部节点head的作用在于它作为一个便捷工具,作为查找或者遍历操作的入口,大大地简化了操作过程,使得实现该索引结构的代码也得以精简;
所述改进的红黑树的节点内设有指向该节点的左子节点的指针lc和指向该节点的右子节点的指针rc,或者除带有叶子节点的节点之外的节点内设有所述指针lc和指针rc,该指针lc和指针rc的设置与标准红黑树一致;所述改进的红黑树的节点内均设有指向其左子树和右子树的特定叶子节点的指针;
所述改进的红黑树的叶子节点内设有用于指向数据的指针/地址,或者直接将叶子节点用于存放数据;
通过所述红黑树进行数据查找;***数据以及删除数据则通过对所述红黑树索引结构的叶子节点进行操作且涉及该红黑树索引结构的节点的操作与标准红黑树相同;通过所述循环双向链表对数据信息进行遍历操作。
进一步的,所述改进的红黑树索引结构的节点内存放的指向该节点的左子树、右子树的特定叶子节点的指针包括指向该节点的左子树的最大叶子节点的指针lk和指向该节点的右子树的最小叶子节点的指针rk。与标准红黑树的结构相比,在本发明中,信息是存放在所述改进的红黑树索引结构的叶子节点内,因此,在查找过程的步骤更多,每一次查找操作都需要从根节点root开始而终止于叶子节点,这使得其查找操作的效率略微下降。而引入所述指针lk和指针rk后,对指针lk而言,若所需查找的信息存放在某一节点的左子树的最大叶子节点中,查找操作可通过指针lk直接跳转到目标叶子节点而跳过该节点与所述目标叶子节点之间的节点;指针rk的查找原理与所述指针rk相同,其差别在于其指向的是最小叶子节点;这就提高了查找效率,借此在一定程度上规避了因信息存放于叶子节点而导致所述操作效率下降的缺陷。
进一步的,所述改进的红黑树索引结构中,其第一个叶子节点内还设有指向所述头部结点head的指针F-flink,其最后一个叶子节点内还设有指向所述头部节点head的指针B-blink,此时所述双向链表与所述头部节点head共同构成一双向循环链表。此时,若在访问任意一个所述叶子节点时,需要遍历所有数据信息,则可以从该叶子节点处开始遍历,而不必跳转到头部节点再开始操作。所述指针F-flink、指针B-blink与所述指针flink、指针blink实质相同,本发明中仅仅是为了表述上的便利在名称上作区分。实质上,所述指针F-flink和指针flink都是双向链表或者说双向循环链表中前向节点字段的内容,功能上都是进入某一节点的前一个节点;所述指针B-blink和指针blink都是双向链表或者说双向循环链表中后向节点字段的内容,功能上都是进入某一节点的后一个节点。
如图2所示,通过所述基于改进红黑树的内存数据库索引方法进行数据的查找:
查找的范围是一个索引树,查找开始时,根据头部节点head,找到树的根节点root;比较根节点root的指针lk和查找对象,如果相等,则返回指针lk所指向的叶子节点;如果所述查找对象大,则遍历根节点root的右子树,否则,遍历根节点root的左子树;递归遍历,即从某一节点起开始查找,包括根节点,进入该节点的子节点,若在该子节点未找到,则进入该子节点的子节点查找,直到找到指向所述查找对象的叶子节点,或者未找到该指向所述查找对象的叶子节点而通过所述链表找到比所述查找对象大的最小叶子节点,或者两者均未找到;找到所述查找对象,返回命中的标记;找到比所述查找对象大的最小叶子节点,或者所述查找对象以及比该查找对象大的最小叶子节点均未找到,则返回未命中的标记。容易理解,其中比较的过程也可以是根节点root的指针rk和查找对象进行比较。
如图3所示,通过所述基于改进红黑树的内存数据库索引方法进行数据的新增:
新增用户数据的时候,一般的,首先在索引树上,即所述改进的红黑树上,新增相应的节点,然后完成索引记录的新增,最后是完成数据记录的新增。
在索引树上要新增一个节点。首先到索引树上查找新增索引对象的有关索引记录是否已存在,索引对象即所述需要新增的数据记录。如果找到,则进入索引已存在的流程,这一现有常规流程不涉及改进,故不再赘述。如果找不到,则返回比所述索引对象大的最小叶子节点,或者不存在所述比所述索引对象大的最小叶子节点时,则返回头部节点head。
在所述最小叶子节点的blink方向或者头部节点head的head.blink方向,***所述新增节点,同时把所述新增节点接入索引树。调整所述新增节点所在子树上节点的指针lk和指针rk指向新增的叶子节点。
涉及数据记录的删除以及索引记录的删除则都是现有常规手段;涉及数据记录的遍历也是现有常规手段。
应理解,所述基于改进红黑树的内存数据库索引方法中涉及的信息数量并不固定,根据实际应用涉及增加、删除过程,因此所述改进的红黑树索引结构的节点、叶子节点以及所述双向链表的元素的数量将发生相应的变化。
以下以一内存数据库中的一个用户表为例,具体说明所述基于改进红黑树的内存数据库索引方法的各个操作过程。该用户表中的用户ID字段,简称UID,作为索引,且已包含10条用户数据,具体如表格1所示,其中具体数据信息省略。
表格1内存数据库中的一用户表
用户ID | 数据1 | …… |
1 | 略 | |
2 | 略 | |
3 | 略 | |
4 | 略 | |
5 | 略 | |
6 | 略 | |
7 | 略 | |
8 | 略 | |
9 | 略 | |
10 | 略 |
结合所述基于改进红黑树的内存数据库索引方法,关于该用户表的索引的创建不再详述,其索引结构如图4所示。
进行查找操作的过程如下:
当需要查找用户ID为“10”的用户,即UID=10时,以所述头部节点head为入口,从所述改进红黑树的根节点root开始查找,那么根节点root的lk指针则指向“指向UID=4”的叶子节点Y4,根节点root的rk指针则指向“指向UID=5”的叶子节点Y5。可有两种比较方法,择一应用:
1)与叶子节点Y4所指向的内容进行比较,则10>4,需要进入根节点root的右子树进一步查找;
2)与叶子节点Y5所指向的内容进行比较,则10>5,也是进入根节点root的右子树进一步查找。其中,通过所述根节点root的指针rc进入节点J6,这与标准红黑树的从父节点进入该父节点的子节点的过程相同。
与上述过程同理,查找过程的查找路径从根节点root,经过节点J6、J7、J9,找到J9的右叶子节点Y10,即可找到节点Y10所指向的所述用户表中UID=10的用户的数据,其中的递归遍历过程不再赘述。
当需要查找用户ID为“4”或“5”时,即UID=4/5,则在根节点root处即可直接通过根节点root的指针lk或rk找到叶子节点Y4/Y5所指向的所述用户表中UID=4/5的用户的数据,大大提高了查找效率。通过以上例子可以看出,由于所述基于改进红黑树的内存数据库索引方法是通过叶子节点来存放或者指向数据,这导致每一次查找都需要从根节点root经过递归遍历至叶子节点,在一定程度上降低了查找效率,但通过所述指针lk以及指针rk则基本克服了该缺陷,即使对于上述例子中UID=10的这种极端情况,也继承了标准红黑树在最坏情况下依然高效的特点,也就是说,在最坏情况下,所述改进红黑树的效率也不会低于标准红黑树。
进行***操作的过程,首先在所述改进红黑树中查找相关索引是否存在,若存在则进行存在索引的后续程序,若不存在相关索引则进行增加索引的程序,一般的,有两种情况:
1)所有叶子节点都已经使用:
具体的,结合图5-图7所示,当需要在所述用户表中增加用户ID为“11”的数据信息时,增加一个节点J10,即可在该改进红黑树中增加一个叶子节点。其中节点的***、以及***操作后对该改进红黑树的旋转以及相关节点的颜色的调整与标准红黑树相同。以所述节点J10为例,将该节点J10***节点J9的右子节点处,且该节点J10为红的,随后将节点J6进行左旋操作,并对该改进红黑树进行颜色调整,即可得到符合标准红黑树定义的结构。此时再将所述节点J10的指针lc指向叶子节点Y10,将该节点J10的指针rc指向叶子节点Y11;将该节点J10的指针lk指向叶子节点Y10,将该节点的指针rk指向叶子节点Y11。所述新增的叶子节点Y11则将其中的指针指向所述用户表中的ID为“11”的用户,新增索引记录的步骤结束,再对ID为“11”的用户的数据记录进行新增以及其他操作。根据所述节点J10的索引新增过程,容易理解,对于带有叶子节点的节点而言,这些叶子节点的指针rc、指针lc可以理解为与指针lk、指针rk相同。
2)存在空闲叶子节点:
直接建立索引记录,即将该空闲叶子节点的所述用于指向数据的指针key指向所需索引管理的数据。
最后,将***所述改进的红黑树的叶子节点加入所述双向链表,完成所述改进的红黑树索引结构的索引记录新增操作。
删除所述用户表中的数据记录,可在数据记录中增加或者更新数据删除记录,不必对所述索引记录进行任何操作;或者需要对索引记录进行删除时,其操作过程与标准红黑树、双向链表的记录删除一致,与本发明中的主要区别在于需要对两者都进行相应的删除操作,因此对该常规手段的具体过程不再赘述。
涉及数据的遍历过程,以所述用户表为例,由于所述叶子节点Y1-Y10以及所述头部节点head组成一双向循环链表,则可以从所述头部节点head进入,依次遍历所述双向循环链表即可。显然,遍历操作也可以从任意一个叶子节点开始。
本实施例的基于改进红黑树的内存数据库索引***,用于管理所述基于改进红黑树的内存数据库索引方法的索引结构,该内存数据库索引***包括:
节点结构体管理模块:用于节点结构体的信息维护;所述节点结构体包括角色识别结构体、节点关系结构体、以及所有指针lk和所有指针rk;所述角色识别结构体通过角色识别结构体子管理模块进行管理,所述节点关系结构体通过节点关系结构体子管理模块进行管理;
所述角色识别结构体子管理模块:用于角色识别结构体的管理;所述角色识别结构体包括颜色字段color、节点类型字段type、根节点root标记字段、头部节点标记;角色识别结构体存储节点的角色信息;在新增节点的时候赋值,在查找数据的时候根据该结构体识别节点角色,并做相应的操作;所述角色识别结构体与标准红黑树一致。
所述节点关系结构体子管理模块:用于节点关系结构体的管理;所述节点关系结构体包括前向节点字段、后向节点字段、左子节点字段、右子节点字段,节点关系结构体存储节点的有关联的节点的信息;所述前向节点字段和后向节点字段是叶子节点的属性,所有叶子节点通过这两个字段构造成一个双向链表后者双向循环链表,在遍历数据的时候,利用这两个字段完成;所述左子节点字段和右子节点字段是所述改进的红黑树的节点的属性,这两个字段是与标准红黑树的结构一致,在红黑树的节点查找过程中,通过这两个字段逐步遍历红黑树。
以上实施例具体记载了所述基于改进红黑树的内存数据库索引方法的改进红黑树索引结构的建立过程、工作原理以及所述基于改进红黑树的内存数据库索引***的建立,应当理解,这些实施例仅用于解释本发明的技术方案,而不应视为对本发明的限制。根据本发明的技术方案,本领域技术人员还可以进一步修改,但任何简单修改或等同替换,都将落入本发明的权利要求书所要求的保护范围内。
Claims (4)
1.一种基于改进红黑树的内存数据库索引方法,其特征在于包括以下步骤:
创建改进的红黑树索引结构:
S1、创建一改进的红黑树,其节点结构按照标准红黑树创建;
S2、创建一头部节点head,该头部节点head内设有指针header.root且指向所述红黑树索引结构的根节点root,指针header.flink指向所述红黑树索引结构的第一个叶子节点,以及指针header.blink指向所述红黑树索引结构的最后一个叶子节点;
S3、创建一双向链表,该链表的元素包括所述红黑树索引结构的所有叶子节点,其中,除第一个叶子节点外,每一个叶子节点内都设有一个指向该叶子节点的前一个叶子节点的指针flink;除最后一个叶子节点外,每一个叶子节点内都设有一个指向该叶子节点的后一个叶子节点的指针blink;
所述改进的红黑树的节点内设有指向该节点的左子节点的指针lc和指向该节点的右子节点的指针rc,或者除带有叶子节点的节点之外的节点内设有所述指针lc和指针rc,该指针lc和指针rc的设置与标准红黑树一致;所述改进的红黑树的节点内均设有指向其左子树、右子树的特定叶子节点的指针;
所述红黑树索引结构的叶子节点内设有用于指向数据的指针/地址,或者直接将叶子节点用于存放数据;
通过所述红黑树索引结构进行数据查找;***数据以及删除数据则通过对所述红黑树索引结构的叶子节点进行操作且涉及该红黑树索引结构的节点的操作与标准红黑树相同;通过循环所述双向链表对数据信息进行遍历操作。
2.根据权利要求1所述的内存数据库索引方法,其特征在于,所述红黑树索引结构的节点内存放的指向该节点的左子树、右子树的特定叶子节点的指针包括指向该节点的左子树的最大叶子节点的指针lk和指向该节点的右子树的最小叶子节点的指针rk。
3.根据权利要求1所述的内存数据库索引方法,其特征在于,所述改进的红黑树索引结构中,其第一个叶子节点内还设有指向所述头部结点head的指针F-flink,其最后一个叶子节点内还设有指向所述头部节点head的指针B-blink,此时所述双向链表与所述头部节点head共同构成一双向循环链表。
4.一种基于改进红黑树的内存数据库索引***,其特征在于,该内存数据库索引***用于管理所述权利要求1-3任意一项所述的内存数据库索引方法的索引结构,该内存数据库索引***包括:
节点结构体管理模块:用于节点结构体的信息维护;所述节点结构体包括角色识别结构体、节点关系结构体、以及所有指针lk和所有指针rk;所述角色识别结构体通过角色识别结构体子管理模块进行管理,所述节点关系结构体通过节点关系结构体子管理模块进行管理;
所述角色识别结构体子管理模块:用于角色识别结构体的管理;所述角色识别结构体包括颜色字段color、节点类型字段type、根节点root标记字段、头部节点标记;一个角色识别结构体存储一个节点的角色信息;在新增节点的时候赋值,在查找数据的时候根据该结构体识别节点角色,并做相应的操作;
所述节点关系结构体子管理模块:用于节点关系结构体的管理;所述节点关系结构体包括前向节点字段、后向节点字段、左子节点字段、右子节点字段,节点关系结构体存储节点的有关联的节点的信息;所述前向节点字段和后向节点字段是叶子节点的属性,所有叶子节点通过这两个字段构造成一个双向链表后者双向循环链表,在遍历数据的时候,利用这两个字段完成;所述左子节点字段和右子节点字段是所述改进的红黑树的节点的属性,这两个字段是与标准红黑树的结构一致,在红黑树的节点查找过程中,通过这两个字段逐步遍历红黑树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911186209.0A CN110928882B (zh) | 2019-11-27 | 2019-11-27 | 一种基于改进红黑树的内存数据库索引方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911186209.0A CN110928882B (zh) | 2019-11-27 | 2019-11-27 | 一种基于改进红黑树的内存数据库索引方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110928882A CN110928882A (zh) | 2020-03-27 |
CN110928882B true CN110928882B (zh) | 2023-08-25 |
Family
ID=69846855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911186209.0A Active CN110928882B (zh) | 2019-11-27 | 2019-11-27 | 一种基于改进红黑树的内存数据库索引方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110928882B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111522814A (zh) * | 2020-04-14 | 2020-08-11 | 西云图科技(北京)有限公司 | 一种水务***的信息管理方法 |
CN112000482B (zh) * | 2020-08-25 | 2024-03-05 | 北京金山云网络技术有限公司 | 一种内存管理的方法、装置、电子设备及存储介质 |
CN112269786B (zh) * | 2020-11-02 | 2023-02-03 | 浪潮云信息技术股份公司 | 一种内存数据库kv存储引擎索引的创建方法 |
CN114153851A (zh) * | 2021-12-06 | 2022-03-08 | 智慧足迹数据科技有限公司 | Geohash索引方法、装置、计算机设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902700A (zh) * | 2014-04-01 | 2014-07-02 | 浙江大学 | 树形结构的数据处理方法 |
CN106777163A (zh) * | 2016-12-20 | 2017-05-31 | 携程旅游网络技术(上海)有限公司 | 基于红黑树的ip地址所属地查询方法及*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7069272B2 (en) * | 2002-10-09 | 2006-06-27 | Blackrock Financial Management, Inc. | System and method for implementing dynamic set operations on data stored in a sorted array |
-
2019
- 2019-11-27 CN CN201911186209.0A patent/CN110928882B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902700A (zh) * | 2014-04-01 | 2014-07-02 | 浙江大学 | 树形结构的数据处理方法 |
CN106777163A (zh) * | 2016-12-20 | 2017-05-31 | 携程旅游网络技术(上海)有限公司 | 基于红黑树的ip地址所属地查询方法及*** |
Non-Patent Citations (1)
Title |
---|
马博韬 ; 孙鹏 ; 朱小勇 ; .红黑树算法研究综述.网络新媒体技术.2018,(04),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN110928882A (zh) | 2020-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110928882B (zh) | 一种基于改进红黑树的内存数据库索引方法及*** | |
US11468027B2 (en) | Method and apparatus for providing efficient indexing and computer program included in computer readable medium therefor | |
US11893022B2 (en) | Computer-implemented method for improving query execution in relational databases normalized at level 4 and above | |
US9870382B2 (en) | Data encoding and corresponding data structure | |
US8700605B1 (en) | Estimating rows returned by recursive queries using fanout | |
CN108369587B (zh) | 创建用于交换的表 | |
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
JP2004518226A (ja) | データベースシステムおよびクエリオプティマイザ | |
US10783142B2 (en) | Efficient data retrieval in staged use of in-memory cursor duration temporary tables | |
US9218394B2 (en) | Reading rows from memory prior to reading rows from secondary storage | |
US20170228468A1 (en) | Data searching method of database, apparatus and computer program for the same | |
WO2023083237A1 (zh) | 图数据的管理 | |
CN111639075A (zh) | 一种基于扁平化r树的非关系数据库矢量数据管理方法 | |
US20220350807A1 (en) | Structure and method of aggregation index for improving aggregation query efficiency | |
CN101256579A (zh) | 一种数据库范围查询数据组织的方法 | |
US6826563B1 (en) | Supporting bitmap indexes on primary B+tree like structures | |
CN115840751B (zh) | 一种新型树状数据的编码方法 | |
CN111666302A (zh) | 用户排名的查询方法、装置、设备及存储介质 | |
US10366067B2 (en) | Adaptive index leaf block compression | |
CN116881243A (zh) | 基于时间序列数据特征的学习型索引方法及*** | |
CN112463837B (zh) | 一种关系型数据库数据存储查询方法 | |
CN115391424A (zh) | 数据库查询的处理方法、存储介质与计算机设备 | |
CN111159175B (zh) | 基于索引的非完整数据库Skyline查询方法 | |
CN114218277A (zh) | 一种关系数据库的高效查询方法和装置 |
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: 201203 No. 210, Liangjing Road, Free Trade Pilot Zone, Pudong New Area, Shanghai Applicant after: Shanghai Jinshida Software Technology Co.,Ltd. Address before: No. 210, Liangjing Road, Zhangjiang hi tech park, Pudong New Area, Shanghai, 201203 Applicant before: Shanghai Kingstar Software Technology Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |