CN113254451B - 一种数据索引构建方法、装置、电子设备及存储介质 - Google Patents
一种数据索引构建方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113254451B CN113254451B CN202110609042.5A CN202110609042A CN113254451B CN 113254451 B CN113254451 B CN 113254451B CN 202110609042 A CN202110609042 A CN 202110609042A CN 113254451 B CN113254451 B CN 113254451B
- Authority
- CN
- China
- Prior art keywords
- node
- tree
- target
- time
- data object
- 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
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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
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)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据索引构建方法、装置、电子设备及存储介质。所述方法,包括:针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树;其中,所述时间序列索引树包括二叉查找树、平衡二叉树、B+树中的任意一种,所述时间序列索引树中每个节点为一个时间段,且作为节点的各个时间段互不重叠,每个所述数据对象的有效时间段对应于至少一个节点。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据索引构建方法、装置、电子设备及存储介质。
背景技术
随着计算机技术的快速发展,通过索引技术进行数据的存储和读取的应用范围越来越广。业界关于库存的实现主要依赖于数据库和ElasticSearch(一个基于Lucene的搜索服务器)的实现。
传统的RDBMS(Relational Database Management System,关系数据库管理***)在商品聚合搜索场景中往往需要搜索出很多的商品订单数据用于聚合出商品的消耗库存数据,而库存***相对来说一个写少读多的***,聚合大量的数据可以来说非常影响搜索的性能。而TSDB(Time Series Database,时间序列数据库)由于底层采用的是LSM(Log-Structured-Merge,日志结构合并)树,适合写多读少的场景,不太适合进行实时搜索的读多写少的应用场景。ES(Elasticsearch),弹性搜索(例如分布式搜索和数据分析引擎)是基于Luence实现的倒排索引。Lucene在查询过程中是基于Segment (段),但是索引过程的文档不会被立即合并到可供查询的Segment上,这对于库存检索的实时性有一定的阻碍。
由上述分析可知,上述索引技术很难实现时间序列搜索的高性能和实时性。
发明内容
本发明实施例提供一种数据索引构建方法、装置、电子设备及存储介质,以解决相关技术方案中很难实现时间序列搜索的高性能和实时性的技术问题。
为了解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种数据索引构建方法,包括:
针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;
基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树;
其中,所述时间序列索引树包括二叉查找树、平衡二叉树、B+树中的任意一种,所述时间序列索引树中每个节点为一个时间段,且作为节点的各个时间段互不重叠,每个所述数据对象的有效时间段对应于至少一个节点。
第二方面,本发明实施例提供了一种数据索引构建装置,包括:
基础数据获取模块,用于针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;
TSI树构建模块,用于基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树;
其中,所述时间序列索引树包括二叉查找树、平衡二叉树、B+树中的任意一种,所述时间序列索引树中每个节点为一个时间段,且作为节点的各个时间段互不重叠,每个所述数据对象的有效时间段对应于至少一个节点。
第三方面,本发明实施例另外提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面所述的数据索引构建方法的步骤。
第四方面,本发明实施例另外提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的数据索引构建方法的步骤。
在本发明实施例中,针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树;其中,所述时间序列索引树包括二叉查找树、平衡二叉树、B+树中的任意一种,所述时间序列索引树中每个节点为一个时间段,且作为节点的各个时间段互不重叠,每个所述数据对象的有效时间段对应于至少一个节点。从而基于TSI实现时间序列搜索的高性能和实时性。
附图说明
图1是本发明实施例中的一种数据索引构建方法的步骤流程图;
图2A是本发明实施例中的一种在TSI的总体结构是平衡二叉树的情况下,时序索引在空间的映射示意图;
图2B是本发明实施例中的一种新加入的数据对象的有效时间段与时间序列索引树中已有节点的有效时间段之间的占用关系示意图;
图2C是本发明实施例中的一种导致节点***的目标节点与目标数据对象的有效时间段之间的占用关系示意图;
图2D是本发明实施例中的一种目标节点右侧段被所述目标数据对象的有效时间段占用,原节点在TSI中的三种相对位置示意图;
图2E是本发明实施例中的一种目标节点左侧段被所述目标数据对象的有效时间段占用,原节点在TSI中的三种相对位置示意图;
图2F是本发明实施例中的一种历史数据对象的开始时间节点需要消解合并时的消解合并过程示意图;
图2G是本发明实施例中的一种目标范围内包含的各部分的示意图;
图2H是本发明实施例中的一种基于B+树构建的TSI树的结构示意图;
图3是本发明实施例中的另一种数据索引构建方法的步骤流程图;
图4A是本发明实施例中的一种基于B+树构建TSI树的流程示意图;
图4B是本发明实施例中的一种在B+树结构的TSI中数据的删除流程示意图;
图5是本发明实施例中的一种数据索引构建装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,示出了本发明实施例中一种数据索引构建方法的步骤流程图。
步骤110,针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;
步骤120,基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树;其中,所述时间序列索引树包括二叉查找树、平衡二叉树、B+树中的任意一种,所述时间序列索引树中每个节点为一个时间段,且作为节点的各个时间段互不重叠,每个所述数据对象的有效时间段对应于至少一个节点。
在本发明实施例中,为了构建数据对象的时间序列索引树,可以将时间按照数据对象的有效时间段映射成树结构,从而实现在TSI(Time Series Index,时间序列索引)上进行搜索。而且,通过TSI树在空间上实现了时间上的连续。
具体地,则可以针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;进而基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树;其中,时间序列索引树可以包括但不限于二叉查找树(BST,Binary Search Tree)、平衡二叉树(AVL)、 B+树中的任意一种。
二叉查找树(BST,Binary Search Tree),也叫二叉排序树,在二叉树的基础上需要满足:任意节点的左子树上所有节点值不大于根节点的值,任意节点的右子树上所有节点值不小于根节点的值。如下是一颗BST。当需要快速查找时,将数据存储在BST是一种常见的选择,因为此时查询时间取决于树高,平均时间复杂度是O(lgn)。然而,BST可能长歪而变得不平衡,此时 BST退化为链表,时间复杂度退化为O(n)。为了解决这个问题,引入了平衡二叉树。
AVL树是严格的平衡二叉树,所有节点的左右子树高度差不能超过1; AVL树查找、***和删除在平均和最坏情况下都是O(lgn)。AVL实现平衡的关键在于旋转操作:***和删除可能破坏二叉树的平衡,此时需要通过一次或多次树旋转来重新平衡这个树。当***数据时,最多只需要1次旋转(单旋转或双旋转);但是当删除数据时,会导致树失衡,AVL需要维护从被删除节点到根节点这条路径上所有节点的平衡,旋转的量级为O(lgn)。B+树也是多路平衡查找树,B+树在B树的基础上,将非叶节点改造为不存储数据的纯索引节点,进一步降低了树的高度;此外将叶节点使用指针连接成链表,范围查询更加高效。
在本发明实施例中涉及的数据对象可以理解为任何一种具有有效时间的数据,例如租车订单,该订单的车辆租赁时间段即为该租车订单的有效时间,或者人员工作安排,那么该人员针对某一任务的计划工作时间段则可以理解为相应人员针对该任务的数据对象的有效时间,等等。
如图2A所示为一种在TSI的总体结构是平衡二叉树的情况下,时序索引在空间的映射示意图。其中每一个横向短线段为时间序列索引树中的一个节点Node,每个节点可以理解为一个时间段,而且节点数据结构,也即节点信息可以包括但不限于Eventid(数据对象的身份标识/事件的身份标识,例如库存***中的商品使用订单标识)列表、数据对象所占用目标的数量(例如,该节点对应的每个订单所消耗的商品数量)、数据对象的有效时间段(例如订单服务的时间段)以及摘要数据(业务的个性化数据,例如订单详情信息、订单发起方的信息等)等部分。
在本发明实施例中,在构建时间序列索引树时,可以依次根据各个数据对象的有效时间段之间的占用关系而导致的冲突,在时间序列索引树中构建以及拆分节点。而且,在构建时间序列索引树时,可以根据不同类型的时间序列索引树的构建规则,确定每个数据对象所对应的节点,以及各个数据对象所对应的节点的节点类型(例如是根节点、叶子节点,还是索引节点等),同时确定各个节点之间的连接关系,对此本发明实施例不加以限定。
参照图2,在本发明实施例中,在所述时间序列索引树为平衡二叉树的情况下,所述步骤120进一步可以包括:
步骤A121,针对任一新增的目标数据对象,根据所述目标数据对象的有效时间段与所述时间序列索引树中已有节点的有效时间段之间的占用关系,获取所述时间序列索引树中待***的目标节点;
步骤A122,对所述目标节点进行***处理,得到多个***节点,并根据所述目标数据对象的索引相关信息更新每个第一节点的节点信息,所述第一节点包括所述***节点,以及所述目标数据对象的有效时间段完全覆盖的各个节点;
步骤A123,在所述时间序列索引树中删除所述目标节点,并***每个所述***节点;
步骤A124,对***新节点的时间序列索引树进行平衡处理。
在实际应用中,数据对象的有效时间段具有一定的任意性。以用户通过下单以租用某一目标(例如车辆、钟点工)的订单为例,由于用户所需求的服务时间具有任意性,因此作为数据对象的订单的有效时间段也具有任意性。因此,在构建时间序列索引树的过程中,***新的节点的有效时间段也具有任意性,也即后***的节点的有效时间段可能会占用时间序列索引树中已有节点的部分有效时间段,从而容易导致时间序列索引树的构建过程中节点的***。
因此,在本发明实施例中,在构建时间序列索引树的过程中,可以依次在时间序列索引树中构建每个数据对象对应的节点,如果某一待新增入时间序列索引树的数据对象,也即新增的目标数据对象的有效时间段占用时间序列索引树中部分已有节点的有效时间段,那么为了避免多个各个节点之间存在冲突,则需要对已有节点进行***处理。
例如,以上述的租车订单作为数据对象为例,假设某一待新增的租车订单的有效时间段为2021年4月26日至2021年4月27日,而时间序列索引树中已有节点的有效时间段为2021年4月26日至2021年4月28日,此时则可以将该已有节点的有效时间段拆分为2021年4月26日至2021年4月 27日、2021年4月28日两个时间段,也即可以将时间序列索引树中该已有节点***为两个节点,其中一个节点的有效时间段为2021年4月26日至 2021年4月27日,另一个节点的有效时间段为2021年4月28日,相应地可以调整***后各个节点的节点信息,保证有效时间段为2021年4月26日至2021年4月27日的节点的节点信息包含新增的租车订单的索引相关信息、以及***前节点对应的订单的索引相关信息,而对于有效时间段为2021年4 月28日的节点,其节点信息则可以包含***前节点对应的订单的索引相关信息。
因此,在本发明实施例中,针对任一待新增索引的目标数据对象而言,则可以根据所述目标数据对象的有效时间段与所述时间序列索引树中已有节点的有效时间段之间的占用关系,获取所述时间序列索引树中待***的目标节点,进而对每个目标节点进行***处理,得到多个***节点,并根据所述目标数据对象的索引相关信息更新每个第一节点的节点信息,所述第一节点包括所述***节点,以及所述目标数据对象的有效时间段完全覆盖的各个节点,在***完成后则可以在所述时间序列索引树中删除所述目标节点,并***每个所述***节点;此后,为了保证平衡二叉树的平衡性,则可以进一步对***新节点的时间序列索引树进行平衡处理。
而且,在本发明实施例中,可以采用任何可用方式对***新节点的时间序列索引树进行平衡处理,对此本发明实施例不加以限定。例如,可以采用旋转等方式对***新节点的时间序列索引树进行平衡处理,等等。
而且,在实际应用中,对于被目标数据对象的有效时间段完全覆盖的各个节点而言,由于其被完全覆盖,不存在其中不同时间段对应不同数据对象的情况,因此可以不做***处理,而仅更新其节点信息即可,也即将新增的目标数据对象的索引相关信息更新至其有效时间段完全覆盖的各个节点的节点信息中。而对于被目标数据对象的有效时间段部分覆盖(也即目标数据对象的有效时间段占用节点的部分有效时间段)的各个节点而言,由于其中不同时间段所对应的数据对象有所不同,也即其中部分时间段对应目标数据对象,而另外一部分并不对应目标数据对象,因此则需要对相应节点进行***处理,以保证同一节点中各个时间段所对应的数据节点一致。也即,在本发明实施例中,可以基于上述原则获取针对当前的目标数据对象,时间序列索引树中待***的目标节点。
对于其中未被目标数据对象的有效时间段占用的***节点而言,则可以无需调整其节点信息,而对于其中被目标数据对象的有效时间段完全占用的***节点而言,则可以相应地将新增的目标数据对象的索引相关信息更新 (例如直接加入等)至相应***节点的节点信息中。
此外,在******节点时,可以基于平衡二叉树的特性,根据需求通过任何可用方式确定各个***节点在时间序列索引树中的位置,进而在相应位置***相应***节点,对此本发明实施例不加以限定。
可选地,在本发明实施例中,在所述时间序列索引树为二叉查找树的情况下,上述的步骤120进一步可以包括:
步骤B121,针对任一新增的目标数据对象,根据所述目标数据对象的有效时间段与所述时间序列索引树中已有节点的有效时间段之间的占用关系,获取所述时间序列索引树中待***的目标节点;
步骤B122,对所述目标节点进行***处理,得到多个***节点,并根据所述目标数据对象的索引相关信息更新每个第一节点的节点信息,所述第一节点包括所述***节点,以及所述目标数据对象的有效时间段完全覆盖的各个节点;
步骤B123,在所述时间序列索引树中删除所述目标节点,并***每个所述***节点。
上述步骤B121-B122与上述的步骤A121-A122类似,具体可以参照上述内容,在此不加以赘述。
而在确定每个***节点在时间序列索引树中的位置时,则可以参照二叉查找树的特征,根据需求通过任何可用方式确定每个***节点在时间序列索引树中的位置,对此本发明实施例不加以限定。
此外,在实际应用中,二叉查找树可以不做平衡处理,因此无需执行对***新节点的时间序列索引树进行平衡处理的步骤。
可选地,在本发明实施例中,所述目标节点包括在所述目标数据对象的有效时间段的开始时间占用的节点,和/或所述目标数据对象的有效时间段结束时间占用的节点;所述目标节点与所述目标数据对象的有效时间段之间的占用关系包括以下至少一种:目标节点左侧段被所述目标数据对象的有效时间段占用、目标节点右侧段被所述目标数据对象的有效时间段占用、目标节点中间段被所述目标数据对象的有效时间段占用。
如图2B所示为一种新加入的数据对象的有效时间段与时间序列索引树中已有节点的有效时间段之间的占用关系示意图,假设其中从左到右的顺序时间逐渐增长。由图2B可以看出,构建过程节点***的过程一般会发生在新增数据对象(例如新订单)的有效时间段(例如新订单的服务时间段)的开始时间(startTime)所占用的节点,和/或结束时间(endTime)占用的节点上,其余被该新增数据对象的有效时间段完全覆盖的节点均不会发生节点***,而是仅更新相关的节点信息即可。
而如果目标数据对象的有效时间段的开始时间刚好与某一已有节点的开始时间一致,那么则可以不将该目标数据对象的有效时间段的开始时间占用的节点作为目标节点。相应地,如果目标数据对象的有效时间段的结束时间刚好与某一已有节点的结束时间一致,那么则可以不将该目标数据对象的有效时间段的结束时间占用的节点作为目标节点。
此外,在本发明实施例中,如果目标数据对象的有效时间段不占用任何已有节点,那么则可以直接在时间序列索引树中创建该目标数据对象对应的节点,并基于该目标数据对象的索引相关信息设置该节点的节点信息,而无需对其中已有节点进行***处理。而如果目标数据对象的有效时间段刚好完全覆盖至少一个已有节点,那么则可以相应根据该目标数据对象的索引相关信息更新其完全覆盖的各个已有节点的节点信息,也无需进行***处理。
此外,如图2C所示,从***原因上看,导致节点***的目标节点与目标数据对象的有效时间段之间的占用关系可以包括以下三种情况:(1)目标节点左侧ac段被新的有效时间段(例如目标数据对象的有效时间段)占用而冲突,故原有节点ab段需要***成ac段和(c+1)b段。(2)目标节点右侧cb 段被新的有效时间段占用而冲突,故原有节点ab段需要***成a(c-1)段和cb 段。(3)目标节点中间cd段被新的有效时间段占用而冲突,故原有节点ab段需要***成a(c-1)段、cd段和(d+1)b段。另外,对于图2C中的(4)所示则为一种被新的有效时间段完全覆盖的节点,此时该节点无需***,仅需进行节点信息的更新。
需要说明的是,上述的+1、-1可以理解为增加一个时间单位、减少一个时间单位。例如,假设以天为时间单位,对于情况(1),假设a为2021年 4月20日、b为2021年4月30日,c为2021年4月25日,那么此时2021 年4月20日至2021年4月30日则可以***为2021年4月20日至2021年 4月25日、2021年4月26日至2021年4月30日两个时间段。
可选地,在本发明实施例中,对所述目标节点进行***处理,得到多个***节点的过程,具体可以包括:
步骤S1,针对任一目标节点,获取所述目标节点中被所述目标数据对象的有效时间段占用的目标时间段,以所述目标时间段作为冲突节点,并以所述冲突节点作为一个***节点;
步骤S2,获取所述目标节点中除所述目标时间段,且被所述目标时间段分割的每个其他时间段,分别作为一个***节点;
相应地,在所述时间序列索引树中删除所述目标节点,并***每个所述***节点的过程,具体可以包括:
步骤T1,以所述冲突节点继承所述目标节点在所述的时间序列索引树中的位置;
步骤T2,对于每个其他***节点,在所述时间序列索引树中选择所述其他***节点的***位置,并***所述其他***节点,所述其他***节点为除所述冲突节点之外的***节点。
从图2C所示的四种情况分析得知,一次新数据对象的入库会导致0个,1个,2个节点的创建过程。为了尽可能提升搜索的性能,可以遵从以下约束:在***过程中,将冲突节点的位置尽可能靠近树根,因为该节点被占用的次数较多,可能也是用户搜索的热点时间。所以在本发明实施例中,可以将冲突节点继承原节点的位置,并且由原节点***出新的其他***节点,并在时间序列索引树中选择每个新生成的其他***节点的合适的位置并***。
可选地,在本发明实施例中,所述步骤T2进一步可以包括:
T21,响应于所述占用关系为目标节点左侧段被所述目标数据对象的有效时间段占用,从所述目标节点或者所述目标节点的右侧相邻节点上选择所述其他***节点的***位置,并***所述其他***节点;
T22,响应于所述占用关系为目标节点右侧段被所述目标数据对象的有效时间段占用,从所述目标节点或者所述目标节点的左侧相邻节点上选择所述其他***节点的***位置,并***所述其他***节点;
T23,响应于所述占用关系为目标节点中间段被所述目标数据对象的有效时间段占用,对于所述冲突节点左侧的其他***节点,从所述目标节点或者所述目标节点的左侧相邻节点上选择所述其他***节点的***位置,对于所述冲突节点右侧的其他***节点,从所述目标节点或者所述目标节点的右侧相邻节点上选择所述其他***节点的***位置,并***每个所述其他***节点。
以图2C中的情况(2)为例,此时冲突节点发生在原节点(也即目标节点)的右侧介绍TSI节点的创建过程。经过对原节点在TSI中的相对位置详细分析得到如图2D所示的三种情况。从图2D所示的三种相对位置的分析中,不难看到一定可以从原节点或者原节点的左侧相邻节点(Left Neighbor Node)上找到合适位置去存储新生成的其他***节点,从而达到解决冲突的目的。
例如,对于2D所示的情况(1),则可以将新生成的其他***节点作为原节点的左孩子节点***时间序列索引树,对于情况(2),则可以将新生成的其他***节点作为左侧相邻节点的左孩子节点或右孩子节点***时间序列索引树,对于情况(3),则可以将新生成的其他***节点作为左侧相邻节点的左孩子节点,或作为原节点的左孩子节点***时间序列索引树,等等。
相应地,以图2C中的情况(1)为例,此时目标节点与目标数据对象的有效时间段之间的占用关系为目标节点左侧段被所述目标数据对象的有效时间段占用。经过对原节点在TSI中的相对位置详细分析得到如图2E所示的三种情况。
从图2E所示的三种相对位置的分析中,不难看到一定可以从原节点或者原节点的右侧相邻节点(Right Neighbor Node)上找到合适位置去存储新生成的节点,从而达到解决冲突的目的。
例如,对于2E所示的情况(1),则可以将新生成的其他***节点作为原节点的右孩子节点***时间序列索引树,对于情况(2),则可以将新生成的其他***节点作为右侧相邻节点的左孩子节点或右孩子节点***时间序列索引树,对于情况(3),则可以将新生成的其他***节点作为右侧相邻节点的左孩子节点,或作为原节点的右孩子节点***时间序列索引树,等等。
而对于上述图2C中的情况(3),对于冲突节点左侧的其他***节点,则可以参照上述的图2D,从所述目标节点或者所述目标节点的左侧相邻节点上选择所述其他***节点的***位置,对于所述冲突节点右侧的其他***节点,则可以参照上述的图2E,从所述目标节点或者所述目标节点的右侧相邻节点上选择所述其他***节点的***位置,并***每个所述其他***节点。
其中,图2D和图2E中的虚线表示左侧相邻节点或者右侧相邻节点与目标节点(图示中Node)之间并非一定是父子关系,也可以是祖孙关系,当然也可能间隔更多辈,对此本发明实施例不加以限定。此外,对于其中的原节点也可以替换或经***为上述的冲突节点。
需要说明的是,在TSI为平衡查找树的情况下,新节点的***过程后,需要对TSI重新平衡。
参照图3,在本发明实施例中,所述方法进一步还可以包括:
步骤130,针对任一被取消的历史数据对象,在所述时间序列索引树中搜索包含所述历史数据对象的身份标识的节点,作为所述历史数据对象的分布节点;
步骤140,在每个所述分布节点中,删除所述历史数据对象的索引相关信息;
步骤150,在所述时间序列索引树中,对所述历史数据对象的开始时间节点以及结束时间节点进行消解合并处理,以减少所述时间序列索引树中非必要节点的数量;
其中,所述历史数据对象的开始时间节点为所述历史数据对象的开始时间所在的节点,所述历史数据对象的结束时间节点为所述历史数据对象的结束时间所在的节点。
TSI的删除过程其实对应着库存***中数据对象(例如订单)的取消过程。通过数据对象的身份标识(例如Event id),在TSI上删除其所关联的全部信息,由前面的讨论可以知道,虽然数据对象在TSI上是连续的,但其由于节点***可能分布在多个节点上。因此TSI中的节点删除过程,也即从 TSI中删除某一历史数据对象的全部信息需要分成以下四步:
(1)根据给定的历史数据对象的身份标识,在时间序列索引树中搜索出全部包含所述历史数据对象的身份标识的节点,得到分布节点列表;
(2)在分布节点列表中的每个分部节点上删除该历史数据对象的相关信息,例如节点信息中包含的相应历史数据对象的索引相关信息等;
(3)对该历史数据对象的开始时间节点以及结束时间节点进行消解合并操作,以减少TSI树中非必要节点数量,降低TSI高度,提高搜索性能。
而且,在本发明实施例中,可以通过任何可用方式对历史数据对象的开始时间节点以及结束时间节点进行消解合并处理,对此本发明实施例不加以限定。例如,在历史数据对象的相关信息删除之后,假设该历史数据对象的开始时间节点的节点信息与其一相邻节点的节点信息完全一致,那么则可以将两者合并,而如果合并后的节点的节点信息由于其一相邻节点的节点信息一致,那么则可以进一步将两者合并,直至不存在相邻节点与当前合并后的节点的节点信息一致;当然,也可以仅在该历史数据对象的开始时间节点的节点信息与其一相邻节点的节点信息完全一致的情况下,将两者合并,而不进一步判断合并后的节点是否需要进一步合并,对此本发明实施例不加以限定。
可选地,在本发明实施例中,步骤150进一步可以包括:
步骤151,针对已删除所述索引相关信息的开始时间节点,响应于所述开始时间节点与其一左侧相邻节点所包含的信息一致,将所述开始时间节点与所述开始时间节点的左侧相邻节点合并,并将所述开始时间节点的右子树移动至合并后节点的右孩子上;
步骤152,针对已删除所述索引相关信息的结束时间节点,响应于所述结束时间节点与其一右侧相邻节点所包含的信息一致,将所述结束时间节点与所述结束时间节点的右侧相邻节点合并,并将所述结束时间节点的左子树移动至合并后节点的左孩子上。
节点能够消解合并的前提是:节点在删除历史数据对象的索引相关信息后,能够与其相邻节点实现节点信息完全一致。消解合并操作是节点***操作的逆操作,但在其过程中并非完全实现节点***的逆即可。
如图2F所示,以历史数据对象的有效时间段中的开始时间所在的节点,也即历史数据对象的开始时间节点需要消解合并为例分析,消解合并过程历史数据对象的开始时间节点(图2F中的Node)与其左侧相邻节点(图2F 中的LeftNeighborNode)在TSI的相对位置分析可以包括三种情况,其中,在历史数据对象的索引相关信息从节点信息中删除后,该历史数据对象的开始时间节点与相应左侧相邻节点的节点信息一致。
需要说明是,在实际应用中,LeftNeighborNode要么不存在要么是唯一的。例如,假设Node1代表了[a,b]这个时间段,Node2代表[b+1,c],Node3代表[d,a-1],则Node3是Node1的左侧相邻节点,Node2是Node1的右侧相邻节点。在实际的TSI结构中,LeftNeighborNode会存在于Node的左子树或者Node是LeftNeighborNode的右子树上的最左子树的叶子节点。也即,某一节点Node的LeftNeighborNode可能与该节点为父子关系、祖孙关系,也可能间隔百辈或者千辈以上,对此本发明实施例不加以限定。
基于图2F通过分析得知,可以将Node与其LeftNeighborNode直接合并,并将Node的右子树移到合并节点的右孩子上即可。
例如,对于图2F中的情况(1),可以将Node合并至其LeftNeighborNode,并将Node的右子树(例如图2F中right节点所在的Node右子树)移到合并节点的右孩子上,此时可以将right节点移动作为合并后节点的右孩子节点;对于图2F中的情况(3),可以将Node合并至其LeftNeighborNode,并将 Node的右子树,也即right节点移动至合并后节点的右孩子上,并连接在右子树之后。此外,在消解合并后,根据需求也可以对时间序列索引树进行平衡处理,对此本发明实施例不加以限定。
相应地,针对已删除所述索引相关信息的结束时间节点,响应于所述开始时间节点与其一右侧相邻节点所包含的信息一致,将所述结束时间节点与所述结束时间节点的右侧相邻节点(也即与该结束时间节点的节点信息一致的右侧相邻节点)合并,并将所述开始时间节点的左子树移动至合并后节点的左孩子上。
参照图3,在本发明实施例中,所述方法还可以包括:
步骤160,响应于针对所述时间序列索引树中在指定时间节点之前的无效数据对象的删除请求,在所述时间序列索引树中搜索出全部所述无效数据对象涉及的节点,作为无效节点,并依次删除每个所述无效节点;
和/或,
步骤170,响应于针对所述时间序列索引树中在指定时间节点之前的无效数据对象的删除请求,在所述时间序列索引树中搜索出全部所述无效数据对象涉及的节点,作为无效节点,并将全部无效节点作为整体完整删除;
其中,所述无效数据对象为有效时间段在所述指定时间节点之前,且至少覆盖一个节点的数据对象。
在实际应用中,基于上述的在时间序列索引树中进行数据对象的增加和删除,TSI已经在一定程度上能够正常工作,并满足索引以及检索需要,但是随着时间的推移,TSI树上可能存在大量用户关注度较低的无效信息,即过去的一段时间的数据对象可能在接下来的实时搜索过程中失去了意义。因此,基于***优化和性能考虑,在本发明实施例中,还可以进一步考虑选择基准时间对TSI树进行剪枝操作。
在实际场景下,可能存在删除某一个指定时间节点(也即BaseTime)前的全部无效数据对象,这些数据对象的特点可以包括以下几点:
(1数据对象已经在BaseTime前完成其有效时间,也即数据对象的有效时间段在BaseTime之前;
(2)数据对象至少覆盖TSI树上的1个节点。
在本发明实施例中,实现剪枝的方案可以有以下两种:
(1)搜索出在指定时间节点之前的全部数据对象所对应的无效节点,进而逐个按照删除过程执行,以逐个删除每个无效节点;
(2)将全部无效节点作为整体完整删除。
而且,在本发明实施例中,可以通过任何可用方式逐个删除无效节点,或者将全部无效节点作为整体完整删除,对此本发明实施例不加以限定。
可选地,在本发明实施例中,步骤170进一步可以包括:
步骤171,按中序搜索在所述时间序列索引树中搜索所述无效节点;
步骤172,响应于在所述时间序列索引树中的任一目标范围内,所述无效节点的分布满足第一分布条件,将所述目标范围内的全部无效节点合并为一个节点;
步骤173,响应于在所述目标范围内,所述无效节点的分布满足第二分布条件,将所述目标范围内的全部无效节点合并为一个节点,并将第四部分移动至所述第二部分的最左子树上;
其中,所述目标范围包括所述时间序列索引树本身,或者所述时间序列索引树中的任一以所述第一部分的根节点为根节点的子树(子树);所述第一分布条件包括所述目标范围内缺失第二部分、第三部分、第四部分中的任意至少一个;所述第二分布条件包括所述目标范围内同时包含第二部分、第三部分、第四部分;所述第一部分、第二部分、第三部分和第四部分按照从上到下的顺序依次连接,所述第一部分的根节点为所述目标范围的根节点,且所述第一部分和所述第三部分为无效节点区域,所述第二部分和所述第四部分为有效节点区域,所述无效节点区域中包含至少一个无效节点,所述有效节点区域中包含至少一个有效节点,所述有效节点为所述时间序列索引树中除所述无效节点之外的任一其他节点,如果所述第一部分的根节点为所述时间序列索引树的根节点,所述目标范围为所述时间序列索引树本身,如果所述第一部分的根节点不是所述时间序列索引树的根节点,所述目标范围为所述时间序列索引树中以所述第一部分的根节点为根节点的子树。
在实际应用中,上述方案(1)中逐个删除每个无效节点的方式,实现较为简单,但总体耗时长,剪枝停顿时间长,高并发场景下不适合***级应用,所以在本发明实施例中,为了避免上述问题优选地可以采用方案(2)中将全部无效节点作为整体完整删除的方式。具体地,可以按中序搜索BaseTime时全部已完成的Event涉及的节点列表CoverNodes,其中包含全部的无效节点,进而可以对CoverNodes进行剪枝合并操作。此外,根据需求也可以将中序搜索替换为前序搜索或者后序搜索,对此本发明实施例不加以限定。
而且,在进行剪枝之前,可以先分析剪枝前CoverNodes列表中无效节点的分布,整体上可把TSI树中某一目标范围分为几个部分,如图2G所示。那么在剪枝时可以分为以下两种情况:当TSI树中缺少第二部分、第三部分、第四部分(也即图2G中的2,3,4部分)其中任意至少一个时,则可以将全部无效节点合并为一个节点即可;而当2,3,4均存在时,则只要将全部无效节点合并为一个节点,并且将第4部分移到第2部分的最左子树上就可。
其中,在图2G中所示的第一部分的根节点上方还连接有其他节点,也即此时第一部分的根节点不是整个TSI树的根节点,那么图2G中所示的目标范围可以理解为TSI树中的任意一个子树,且该子树的根节点为其中第1 部分的根节点。
可选地,在本发明实施例中,在所述时间序列索引树为B+树的情况下,步骤120进一步可以包括:
C121,针对任一新增的目标数据对象,响应于所述目标数据对象的有效时间段与所述时间序列索引树中叶子节点包含的关键字不适配,根据目标数据对象的有效时间段,以及每个所述叶子节点的有效时间段,获取所述时间序列索引树中待***的目标节点,并在所述目标节点中获取需要***的目标关键字;
C122,根据所述目标数据对象的有效时间段,将所述目标关键字***为冲突关键字和初始关键字并存储于所述目标节点中;
C123,响应于所述目标节点大于B+树的阶数,则按照B+树的构造算法***所述目标节点。
在实际应用中,二叉树结构不适合把其节点作为存储单元去处理,这样会增加搜索的IO次数,反而对搜索性能没有任何提升,于是在库存***的订单数激增时,通过二叉树构建的TSI树的IO耗时会成为搜索过程的瓶颈,因此在本发明实施例中,可以进一步对TSI树进行优化。
也即,可以采用B+树结构构建时间序列索引树。B+树将多个关键字Key (其概念来自于B+树,类似于二叉树中的节点)封装成一页(B+树中真正的节点)作为存储单元存储在外部存储设备中。B+树结构较之于AVL,有以下优势:
1、在TSI适用场景中,构造B+树难度较之于AVL更为简单;且B+树本身就是一个平衡多叉树,不需要额外的平衡开销;
2、B+树的写性能和搜索性能比AVL更优;
3、B+树整体高度低于AVL,在很多场景下均可以减少网络/磁盘IO次数;
4、B+树结构里,可以让非叶节点存储更多的时段数据,而让叶节点存储额外数据;降低在检索过程中IO的数据量;
5、B+树的叶子节点之间存在指针,非常适合时间序列的范围检索和遍历。
如图2H所示为一种基于B+树构建的TSI树的示意图。从图2H中可以看出:叶子结点的关键字上保存了全部的而且连续的时间序列数据,而上面的索引节点仅起到索引功能。
此时,TSI不必处理因为时间冲突导致的节点***这一难题,只需要处理关键字Key上的时间戳数据冲突***,而这个***并不意味着存放关键字 Key的节点一定发生***。
由于此时的TSI采用的是B+树结构,其中的叶子节点的关键字Key中存储着连续的时间序列数据,而索引节点不会存储这些数据,因此在处理关键字Key***时,冲突Key仅需要从原节点上***并存放在原节点上,再对该叶子节点做B+树进行阶数约束操作即可。
具体地,针对任一新增的目标数据对象,响应于所述目标数据对象的有效时间段与所述时间序列索引树中叶子节点包含的关键字不适配,也即需要进行关键字key***,则可以根据目标数据对象的有效时间段,以及每个所述叶子节点的有效时间段,获取所述时间序列索引树中待***的目标节点,并在所述目标节点中获取需要***的目标关键字,进而根据所述目标数据对象的有效时间段,将所述目标关键字***为冲突关键字和初始关键字并存储于所述目标节点中,在节点***完成之后,进一步则可以根据B+树的阶数约束进行调整操作。例如,当单节点的关键字数量大于B+树的阶数时,节点就需要***成两个节点,并依次递归其父节点、祖辈节点直至整棵树重新满足B+树的定义,那么此时则可以检查目标节点是否大于B+树的阶数,如果是则可以按照B+树的构造算法***目标节点,并且可以依次递归其父节点、祖辈节点直至整棵树重新满足B+树的定义。
此外,如果此时不需要进行关键字key***,则可以仅基于目标数据对象的索引相关信息更新关键词Key数据,如图4A所示。
相应地,在所述时间序列索引树为B+树的情况下,所述方法还可以包括:
步骤180,针对任一被取消的历史数据对象,在所述时间序列索引树中搜索包含所述历史数据对象的身份标识的关键字;
步骤190,针对任一所述关键字,删除所述关键字中包含的所述历史数据对象的索引相关信息。
从B+树的构造过程可以看出,其流程相对简单。原因是得益于B+树的全部真实数据存储在叶子结点的关键字中,所以仅需要在B+树的基础上做一些简单额外处理就可以实现。那么如何在一历史数据对象被取消时删除其在TSI上的数据呢?在本发明实施例中,受益于B+树的存储结构,此时TSI 中索引相关信息的删除过程也是非常简单明了的。
具体地,针对任一被取消的历史数据对象,则可以在时间序列索引树中搜索包含该历史数据对象的身份标识的关键字(也即key);进而针对任一包含该历史数据对象的身份标识的关键字,删除该关键字中包含的该历史数据对象的索引相关信息。
相应地,在所述时间序列索引树为B+树的情况下,所述方法还可以包括:
步骤1110,针对任一已删除所述历史数据对象的索引相关信息的关键字,所述关键字与其相邻关键字中包含的信息一致,删除所述关键字;
步骤1120,针对删除所述关键字的节点,响应于所述节点小于B+树的阶数的一半,则按照B+树的构造算法合并所述节点。
对于删除部分信息的关键字而言,同样为了降低TSI树的复杂度,同时提高查询效率,则可以进一步对关键字进行删除处理。其中,判断关键字 Key可否删除的条件是删除或取消历史数据对象后,该已删除相应历史数据对象的索引相关信息的Key与其相邻Key上的信息是否完全一致。如果一致,则可以删除该关键字。而对于删除关键字的节点而言,则可以进一步对其进行B+树的阶数约束操作。也即,此时可以检查相应节点是否小于B+树的阶数的一半,如果是则可以按照B+树的构造算法合并相应节点,直至整棵树重新满足B+树的定义,对此本发明实施例不加以限定。
如图4B所示为一种B+树结构的TSI中数据的删除流程示意图。
此外,在本发明实施例中,基于B+树构建的TSI由于其结构的卓越性和存储方式的节点化,可以暂时不考虑对其进行剪枝,可在后期***优化时考虑,对此本发明实施例不加以限定。
如下表所示为一种针对上述的基于平衡查找树构建的TSI的性能测试结果。其中,处理器:2.4GHz四核Intel Core i5;内存:16GB 2133MHz LPDDR3;***版本:MacBook Pro(13-inch,2019,Four Thunderbolt 3 ports)
测试报告:
在本发明实施例中,基于TSI实现时间序列搜索的高性能和实时性。
参照图5,示出了本发明实施例中一种数据索引构建装置的结构示意图。
本发明实施例的数据索引构建装置包括:基础数据获取模块210和TSI 树构建模块220。
下面分别详细介绍各模块的功能以及各模块之间的交互关系。
基础数据获取模块210,用于针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;
TSI树构建模块220,用于基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树;
其中,所述时间序列索引树包括二叉查找树、平衡二叉树、B+树中的任意一种,所述时间序列索引树中每个节点为一个时间段,且作为节点的各个时间段互不重叠,每个所述数据对象的有效时间段对应于至少一个节点。
可选地,在本发明实施例中,所述在所述时间序列索引树为平衡二叉树的情况下,所述TSI树构建模块220进一步可以包括:
第一***节点获取子模块,用于针对任一新增的目标数据对象,根据所述目标数据对象的有效时间段与所述时间序列索引树中已有节点的有效时间段之间的占用关系,获取所述时间序列索引树中待***的目标节点;
节点***处理子模块,用于对所述目标节点进行***处理,得到多个***节点,并根据所述目标数据对象的索引相关信息更新每个第一节点的节点信息,所述第一节点包括所述***节点,以及所述目标数据对象的有效时间段完全覆盖的各个节点;
节点更新子模块,用于在所述时间序列索引树中删除所述目标节点,并***每个所述***节点;
平衡处理子模块,用于对***新节点的时间序列索引树进行平衡处理。
可选地,在本发明实施例中,在所述时间序列索引树为二叉查找树的情况下,所述TSI树构建模块220进一步可以包括:
第一***节点获取子模块,用于针对任一新增的目标数据对象,根据所述目标数据对象的有效时间段与所述时间序列索引树中已有节点的有效时间段之间的占用关系,获取所述时间序列索引树中待***的目标节点;
节点***处理子模块,用于对所述目标节点进行***处理,得到多个***节点,并根据所述目标数据对象的索引相关信息更新每个第一节点的节点信息,所述第一节点包括所述***节点,以及所述目标数据对象的有效时间段完全覆盖的各个节点;
节点更新子模块,用于在所述时间序列索引树中删除所述目标节点,并***每个所述***节点。
可选地,在本发明实施例中,所述目标节点包括在所述目标数据对象的有效时间段的开始时间占用的节点,和/或所述目标数据对象的有效时间段结束时间占用的节点;所述目标节点与所述目标数据对象的有效时间段之间的占用关系包括以下至少一种:目标节点左侧段被所述目标数据对象的有效时间段占用、目标节点右侧段被所述目标数据对象的有效时间段占用、目标节点中间段被所述目标数据对象的有效时间段占用。
可选地,在本发明实施例中,在对所述目标节点进行***处理,得到多个***节点时,所述节点***处理子模块,进一步可以包括:
第一***节点获取单元,用于针对任一目标节点,获取所述目标节点中被所述目标数据对象的有效时间段占用的目标时间段,以所述目标时间段作为冲突节点,并以所述冲突节点作为一个***节点;
第二***节点获取单元,用于获取所述目标节点中除所述目标时间段,且被所述目标时间段分割的每个其他时间段,分别作为一个***节点;
所述节点更新子模块,包括:
第一节点更新单元,用于以所述冲突节点继承所述目标节点在所述的时间序列索引树中的位置;
第二节点更新单元,用于对于每个其他***节点,在所述时间序列索引树中选择所述其他***节点的***位置,并***所述其他***节点,所述其他***节点为除所述冲突节点之外的***节点。
可选地,在本发明实施例中,所述第二节点更新单元,具体可以用于:
响应于所述占用关系为目标节点左侧段被所述目标数据对象的有效时间段占用,从所述目标节点或者所述目标节点的右侧相邻节点上选择所述其他***节点的***位置,并***所述其他***节点;
响应于所述占用关系为目标节点右侧段被所述目标数据对象的有效时间段占用,从所述目标节点或者所述目标节点的左侧相邻节点上选择所述其他***节点的***位置,并***所述其他***节点;
响应于所述占用关系为目标节点中间段被所述目标数据对象的有效时间段占用,对于所述冲突节点左侧的其他***节点,从所述目标节点或者所述目标节点的左侧相邻节点上选择所述其他***节点的***位置,对于所述冲突节点右侧的其他***节点,从所述目标节点或者所述目标节点的右侧相邻节点上选择所述其他***节点的***位置,并***每个所述其他***节点。
可选地,在本发明实施例中,所述装置还可以包括:
节点筛选模块,用于针对任一被取消的历史数据对象,在所述时间序列索引树中搜索包含所述历史数据对象的身份标识的节点,作为所述历史数据对象的分布节点;
第一索引信息删除模块,用于在每个所述分布节点中,删除所述历史数据对象的索引相关信息;
消解合并处理模块,用于在所述时间序列索引树中,对所述历史数据对象的开始时间节点以及结束时间节点进行消解合并处理,以减少所述时间序列索引树中非必要节点的数量;
其中,所述历史数据对象的开始时间节点为所述历史数据对象的开始时间所在的节点,所述历史数据对象的结束时间节点为所述历史数据对象的结束时间所在的节点。
可选地,在本发明实施例中,所述消解合并处理模块,具体可以用于:
针对已删除所述索引相关信息的开始时间节点,响应于所述开始时间节点与其一左侧相邻节点所包含的信息一致,将所述开始时间节点与所述开始时间节点的左侧相邻节点合并,并将所述开始时间节点的右子树移动至合并后节点的右孩子上;
针对已删除所述索引相关信息的结束时间节点,响应于所述结束时间节点与其一右侧相邻节点所包含的信息一致,将所述结束时间节点与所述结束时间节点的右侧相邻节点合并,并将所述结束时间节点的左子树移动至合并后节点的左孩子上。
可选地,在本发明实施例中,所述装置还可以包括:
第一无效节点删除模块,用于响应于针对所述时间序列索引树中在指定时间节点之前的无效数据对象的删除请求,在所述时间序列索引树中搜索出全部所述无效数据对象涉及的节点,作为无效节点,并依次删除每个所述无效节点;
和/或,
第二无效节点删除模块,用于响应于针对所述时间序列索引树中在指定时间节点之前的无效数据对象的删除请求,在所述时间序列索引树中搜索出全部所述无效数据对象涉及的节点,作为无效节点,并将全部无效节点作为整体完整删除;
其中,所述无效数据对象为有效时间段在所述指定时间节点之前,且至少覆盖一个节点的数据对象。
可选地,在本发明实施例中,所述第二无效节点删除模块,进一步可以包括:
按中序搜索在所述时间序列索引树中搜索所述无效节点;
响应于在所述时间序列索引树中的任一目标范围内,所述无效节点的分布满足第一分布条件,将所述目标范围内的全部无效节点合并为一个节点;
响应于在所述目标范围内,所述无效节点的分布满足第二分布条件,将所述目标范围内的全部无效节点合并为一个节点,并将第四部分移动至所述第二部分的最左子树上;
其中,所述目标范围包括所述时间序列索引树本身,或者所述时间序列索引树中的任一以所述第一部分的根节点为根节点的子树;所述第一分布条件包括所述目标范围内缺失第二部分、第三部分、第四部分中的任意至少一个;所述第二分布条件包括所述目标范围内同时包含第二部分、第三部分、第四部分;所述第一部分、第二部分、第三部分和第四部分按照从上到下的顺序依次连接,且所述第一部分和所述第三部分为无效节点区域,所述第二部分和所述第四部分为有效节点区域,所述无效节点区域中包含至少一个无效节点,所述有效节点区域中包含至少一个有效节点,所述有效节点为所述时间序列索引树中除所述无效节点之外的任一其他节点,如果所述第一部分的根节点为所述时间序列索引树的根节点,所述目标范围为所述时间序列索引树本身,如果所述第一部分的根节点不是所述时间序列索引树的根节点,所述目标范围为所述时间序列索引树中的任一以所述第一部分的根节点为根节点的子树。
可选地,在本发明实施例中,在所述时间序列索引树为B+树的情况下,所述TSI树构建模块220进一步可以包括:
第二***节点获取子模块,用于针对任一新增的目标数据对象,响应于所述目标数据对象的有效时间段与所述时间序列索引树中叶子节点包含的关键字不适配,根据目标数据对象的有效时间段,以及每个所述叶子节点的有效时间段,获取所述时间序列索引树中待***的目标节点,并在所述目标节点中获取需要***的目标关键字;
关键字***子模块,用于根据所述目标数据对象的有效时间段,将所述目标关键字***为冲突关键字和初始关键字并存储于所述目标节点中;
目标节点***子模块,用于响应于所述目标节点大于B+树的阶数,则按照B+树的构造算法***所述目标节点。
可选地,在本发明实施例中,所述装置还可以包括:
关键字筛选模块,用于针对任一被取消的历史数据对象,在所述时间序列索引树中搜索包含所述历史数据对象的身份标识的关键字;
第二索引信息删除模块,用于针对任一所述关键字,删除所述关键字中包含的所述历史数据对象的索引相关信息。
可选地,在本发明实施例中,所述装置,还可以包括:
关键字删除模块,用于针对任一已删除所述历史数据对象的索引相关信息的关键字,所述关键字与其相邻关键字中包含的信息一致,删除所述关键字;
节点合并模块,用于针对删除所述关键字的节点,响应于所述节点小于 B+树的阶数的一半,则按照B+树的构造算法合并所述节点。
本发明实施例提供的数据索引构建装置能够实现图1和图3的方法实施例中实现的各个过程,为避免重复,这里不再赘述。
优选的,本发明实施例还提供了一种电子设备,包括:处理器,存储器,存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述信息处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述信息处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (15)
1.一种数据索引构建方法,其特征在于,包括:
针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;
基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树;
其中,所述时间序列索引树包括二叉查找树、平衡二叉树、B+树中的任意一种,所述时间序列索引树中每个节点为一个时间段,且作为节点的各个时间段互不重叠,每个所述数据对象的有效时间段对应于至少一个节点;
所述构建时间序列索引树为平衡二叉树或者二叉查找树的情况下,基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树,包括:针对任一新增的目标数据对象,获取所述时间序列索引树中待***的目标节点,对所述目标节点进行***处理,得到多个***节点,并根据所述目标数据对象的索引相关信息更新每个第一节点的节点信息,在所述时间序列索引树中删除所述目标节点,并***每个所述***节点。
2.根据权利要求1所述的方法,其特征在于,在所述时间序列索引树为平衡二叉树的情况下,所述基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树的步骤,还包括:
对***新节点的时间序列索引树进行平衡处理。
3.根据权利要求1所述的方法,其特征在于,所述目标节点包括在所述目标数据对象的有效时间段的开始时间占用的节点,和/或所述目标数据对象的有效时间段结束时间占用的节点;所述目标节点与所述目标数据对象的有效时间段之间的占用关系包括以下至少一种:目标节点左侧段被所述目标数据对象的有效时间段占用、目标节点右侧段被所述目标数据对象的有效时间段占用、目标节点中间段被所述目标数据对象的有效时间段占用。
4.根据权利要求3所述的方法,其特征在于,所述对所述目标节点进行***处理,得到多个***节点的步骤,包括:
针对任一目标节点,获取所述目标节点中被所述目标数据对象的有效时间段占用的目标时间段,以所述目标时间段作为冲突节点,并以所述冲突节点作为一个***节点;
获取所述目标节点中除所述目标时间段,且被所述目标时间段分割的每个其他时间段,分别作为一个***节点;
所述在所述时间序列索引树中删除所述目标节点,并***每个所述***节点的步骤,包括:
以所述冲突节点继承所述目标节点在所述的时间序列索引树中的位置;
对于每个其他***节点,在所述时间序列索引树中选择所述其他***节点的***位置,并***所述其他***节点,所述其他***节点为除所述冲突节点之外的***节点。
5.根据权利要求4所述的方法,其特征在于,所述对于每个其他***节点,在所述时间序列索引树中选择所述其他***节点的***位置,并***所述其他***节点的步骤,包括:
响应于所述占用关系为目标节点左侧段被所述目标数据对象的有效时间段占用,从所述目标节点或者所述目标节点的右侧相邻节点上选择所述其他***节点的***位置,并***所述其他***节点;
响应于所述占用关系为目标节点右侧段被所述目标数据对象的有效时间段占用,从所述目标节点或者所述目标节点的左侧相邻节点上选择所述其他***节点的***位置,并***所述其他***节点;
响应于所述占用关系为目标节点中间段被所述目标数据对象的有效时间段占用,对于所述冲突节点左侧的其他***节点,从所述目标节点或者所述目标节点的左侧相邻节点上选择所述其他***节点的***位置,对于所述冲突节点右侧的其他***节点,从所述目标节点或者所述目标节点的右侧相邻节点上选择所述其他***节点的***位置,并***每个所述其他***节点。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
针对任一被取消的历史数据对象,在所述时间序列索引树中搜索包含所述历史数据对象的身份标识的节点,作为所述历史数据对象的分布节点;
在每个所述分布节点中,删除所述历史数据对象的索引相关信息;
在所述时间序列索引树中,对所述历史数据对象的开始时间节点以及结束时间节点进行消解合并处理,以减少所述时间序列索引树中非必要节点的数量;
其中,所述历史数据对象的开始时间节点为所述历史数据对象的开始时间所在的节点,所述历史数据对象的结束时间节点为所述历史数据对象的结束时间所在的节点。
7.根据权利要求6所述的方法,其特征在于,所述在所述时间序列索引树中,对所述历史数据对象的开始时间节点以及结束时间节点进行消解合并处理的步骤,包括:
针对已删除所述索引相关信息的开始时间节点,响应于所述开始时间节点与其一左侧相邻节点所包含的信息一致,将所述开始时间节点与所述开始时间节点的左侧相邻节点合并,并将所述开始时间节点的右子树移动至合并后节点的右孩子上;
针对已删除所述索引相关信息的结束时间节点,响应于所述结束时间节点与其一右侧相邻节点所包含的信息一致,将所述结束时间节点与所述结束时间节点的右侧相邻节点合并,并将所述结束时间节点的左子树移动至合并后节点的左孩子上。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于针对所述时间序列索引树中在指定时间节点之前的无效数据对象的删除请求,在所述时间序列索引树中搜索出全部所述无效数据对象涉及的节点,作为无效节点,并依次删除每个所述无效节点;
和/或,
响应于针对所述时间序列索引树中在指定时间节点之前的无效数据对象的删除请求,在所述时间序列索引树中搜索出全部所述无效数据对象涉及的节点,作为无效节点,并将全部无效节点作为整体完整删除;
其中,所述无效数据对象为有效时间段在所述指定时间节点之前,且至少覆盖一个节点的数据对象。
9.根据权利要求8所述的方法,其特征在于,所述在所述时间序列索引树中搜索出全部所述无效数据对象涉及的节点,作为无效节点,并将全部无效节点作为整体完整删除的步骤,包括:
按中序搜索在所述时间序列索引树中搜索所述无效节点;
响应于在所述时间序列索引树中的任一目标范围内,所述无效节点的分布满足第一分布条件,将所述目标范围内的全部无效节点合并为一个节点;
响应于在所述目标范围内,所述无效节点的分布满足第二分布条件,将所述目标范围内的全部无效节点合并为一个节点,并将第四部分移动至第二部分的最左子树上;
其中,所述目标范围包括所述时间序列索引树本身,或者所述时间序列索引树中的任一以第一部分的根节点为根节点的子树;所述第一分布条件包括所述目标范围内缺失第二部分、第三部分、第四部分中的任意至少一个;所述第二分布条件包括所述目标范围内同时包含第二部分、第三部分、第四部分;所述第一部分、第二部分、第三部分和第四部分按照从上到下的顺序依次连接,且所述第一部分和所述第三部分为无效节点区域,所述第二部分和所述第四部分为有效节点区域,所述无效节点区域中包含至少一个无效节点,所述有效节点区域中包含至少一个有效节点,所述有效节点为所述时间序列索引树中除所述无效节点之外的任一其他节点,如果所述第一部分的根节点为所述时间序列索引树的根节点,所述目标范围为所述时间序列索引树本身,如果所述第一部分的根节点不是所述时间序列索引树的根节点,所述目标范围为所述时间序列索引树中的任一以所述第一部分的根节点为根节点的子树。
10.根据权利要求1所述的方法,其特征在于,在所述时间序列索引树为B+树的情况下,所述基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树的步骤,包括:
针对任一新增的目标数据对象,响应于所述目标数据对象的有效时间段与所述时间序列索引树中叶子节点包含的关键字不适配,根据目标数据对象的有效时间段,以及每个所述叶子节点的有效时间段,获取所述时间序列索引树中待***的目标节点,并在所述目标节点中获取需要***的目标关键字;
根据所述目标数据对象的有效时间段,将所述目标关键字***为冲突关键字和初始关键字并存储于所述目标节点中;
响应于所述目标节点大于B+树的阶数,则按照B+树的构造算法***所述目标节点。
11.根据权利要求10所述的方法,其特征在于,所述方法,还包括:
针对任一被取消的历史数据对象,在所述时间序列索引树中搜索包含所述历史数据对象的身份标识的关键字;
针对任一所述关键字,删除所述关键字中包含的所述历史数据对象的索引相关信息。
12.根据权利要求11所述的方法,其特征在于,所述方法,还包括:
针对任一已删除所述历史数据对象的索引相关信息的关键字,所述关键字与其相邻关键字中包含的信息一致,删除所述关键字;
针对删除所述关键字的节点,响应于所述节点小于B+树的阶数的一半,则按照B+树的构造算法合并所述节点。
13.一种数据索引构建装置,其特征在于,包括:
基础数据获取模块,用于针对每个数据对象,获取每个所述数据对象的有效时间段和索引相关信息,所述索引相关信息至少包含所述数据对象的身份标识;
TSI树构建模块,用于基于每个所述数据对象的索引相关信息,以及各个数据对象的有效时间段之间的占用关系,构建时间序列索引树,构建时间序列索引树为平衡二叉树或者二叉查找树的情况下,包括:针对任一新增的目标数据对象,获取所述时间序列索引树中待***的目标节点,对所述目标节点进行***处理,得到多个***节点,并根据所述目标数据对象的索引相关信息更新每个第一节点的节点信息,在所述时间序列索引树中删除所述目标节点,并***每个所述***节点;
其中,所述时间序列索引树包括二叉查找树、平衡二叉树、B+树中的任意一种,所述时间序列索引树中每个节点为一个时间段,且作为节点的各个时间段互不重叠,每个所述数据对象的有效时间段对应于至少一个节点。
14.一种电子设备,其特征在于,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至12中任一项所述的数据索引构建方法的步骤。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至12中任一项所述的数据索引构建方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110609042.5A CN113254451B (zh) | 2021-06-01 | 2021-06-01 | 一种数据索引构建方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110609042.5A CN113254451B (zh) | 2021-06-01 | 2021-06-01 | 一种数据索引构建方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113254451A CN113254451A (zh) | 2021-08-13 |
CN113254451B true CN113254451B (zh) | 2022-04-19 |
Family
ID=77185740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110609042.5A Active CN113254451B (zh) | 2021-06-01 | 2021-06-01 | 一种数据索引构建方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113254451B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113434557B (zh) * | 2021-08-26 | 2021-12-17 | 苏州浪潮智能科技有限公司 | 一种标签数据的范围查询方法、装置、设备及存储介质 |
CN114281227A (zh) * | 2021-12-28 | 2022-04-05 | 四川启睿克科技有限公司 | 一种基于可衡量单位的数据驱动轴实现方法 |
CN117573944B (zh) * | 2024-01-17 | 2024-04-02 | 深圳十沣科技有限公司 | 数据检索方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106657170A (zh) * | 2015-10-28 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 一种数据同步方法及装置 |
CN106844664A (zh) * | 2017-01-20 | 2017-06-13 | 北京理工大学 | 一种基于摘要的时间序列数据索引构建方法 |
CN106844666A (zh) * | 2017-01-20 | 2017-06-13 | 北京理工大学 | 一种自适应的时间序列数据查询方法 |
CN108319678A (zh) * | 2018-01-30 | 2018-07-24 | 复旦大学 | 一种海量时间序列的分布式索引方法 |
CN108632385A (zh) * | 2018-05-15 | 2018-10-09 | 上海海事大学 | 基于时间序列的多叉树数据索引结构云存储隐私保护方法 |
CN110825733A (zh) * | 2019-10-08 | 2020-02-21 | 华中科技大学 | 一种面向多采样流的时间序列数据管理方法及*** |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102479189B (zh) * | 2010-11-23 | 2016-08-03 | 上海宝信软件股份有限公司 | 一种内存中海量时间戳型数据高速均匀访问的索引方法 |
CN103324642B (zh) * | 2012-03-23 | 2016-12-14 | 日电(中国)有限公司 | 为数据建立索引的***和方法以及数据查询方法 |
CN103106280B (zh) * | 2013-02-22 | 2016-04-27 | 浙江大学 | 一种道路网络环境下不确定时空轨迹数据的范围查询方法 |
CN108255981B (zh) * | 2017-12-28 | 2020-05-22 | 国网江苏省电力有限公司电力科学研究院 | 连续时间段时间戳序号索引分钟冻结的存储和查找方法 |
CN108460102A (zh) * | 2018-02-05 | 2018-08-28 | 湖南视觉伟业智能科技有限公司 | 社交网络数据查询方法、装置、计算机设备和存储介质 |
CN110765125B (zh) * | 2018-07-25 | 2022-09-20 | 杭州海康威视数字技术股份有限公司 | 一种存储数据的方法及装置 |
KR102177489B1 (ko) * | 2018-08-17 | 2020-11-11 | 주식회사 마크베이스 | 센서 태그 데이터를 위한 색인 검색 방법 및 장치 |
WO2020047584A1 (en) * | 2018-09-04 | 2020-03-12 | Future Grid Pty Ltd | Method and system for indexing of time-series data |
CN112417227B (zh) * | 2021-01-21 | 2021-06-01 | 国能信控互联技术有限公司 | 一种基于哈希表和红黑树的实时数据存储与查询方法 |
-
2021
- 2021-06-01 CN CN202110609042.5A patent/CN113254451B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106657170A (zh) * | 2015-10-28 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 一种数据同步方法及装置 |
CN106844664A (zh) * | 2017-01-20 | 2017-06-13 | 北京理工大学 | 一种基于摘要的时间序列数据索引构建方法 |
CN106844666A (zh) * | 2017-01-20 | 2017-06-13 | 北京理工大学 | 一种自适应的时间序列数据查询方法 |
CN108319678A (zh) * | 2018-01-30 | 2018-07-24 | 复旦大学 | 一种海量时间序列的分布式索引方法 |
CN108632385A (zh) * | 2018-05-15 | 2018-10-09 | 上海海事大学 | 基于时间序列的多叉树数据索引结构云存储隐私保护方法 |
CN110825733A (zh) * | 2019-10-08 | 2020-02-21 | 华中科技大学 | 一种面向多采样流的时间序列数据管理方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN113254451A (zh) | 2021-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113254451B (zh) | 一种数据索引构建方法、装置、电子设备及存储介质 | |
US6925462B2 (en) | Database management system, and query method and query execution program in the database management system | |
US7480662B2 (en) | Fact table storage in a decision support system environment | |
JP2004518226A (ja) | データベースシステムおよびクエリオプティマイザ | |
CN104866521B (zh) | 处理具有混合存储器的数据库中的查询的设备和方法 | |
CN109255055A (zh) | 一种基于分组关联表的图数据存取方法和装置 | |
CN110019287B (zh) | 执行结构化查询语言sql指令的方法和装置 | |
CN105868421A (zh) | 一种数据管理方法及装置 | |
US20130198218A1 (en) | Database Table Partitioning Allowing Overlaps Used in Full Text Query | |
KR20190079354A (ko) | 분할 공간 기반의 공간 데이터 객체 질의처리장치 및 방법, 이를 기록한 기록매체 | |
US5742809A (en) | Database generic composite structure processing system | |
CN110046181A (zh) | 基于数据库分布式存储的数据路由的方法和装置 | |
CN112148738A (zh) | 哈希冲突处理方法及*** | |
CN109189343B (zh) | 一种元数据落盘方法、装置、设备及计算机可读存储介质 | |
CN108628969B (zh) | 一种空间关键字索引方法及平台、存储介质 | |
US7512617B2 (en) | Interval tree for identifying intervals that intersect with a query interval | |
US20040015520A1 (en) | Database managing method and system having data backup function and associated programs | |
CN111125216B (zh) | 数据导入Phoenix的方法及装置 | |
JP3666907B2 (ja) | データベース用ファイル格納管理システム | |
CN116126973A (zh) | 气象格点数据管理方法和装置 | |
CN113190550B (zh) | 一种基于树形结构的组织结构权限分配方法 | |
CN111090670A (zh) | 一种数据预聚合的方法、***、计算设备及存储介质 | |
JP2000187663A (ja) | ファイル管理装置およびファイル管理方法並びにそのプログラムを記録した記録媒体 | |
CN116756139B (zh) | 一种数据索引方法、***、存储介质和电子设备 | |
Kvet | Solution Management for Current Temporal Aspect Using Tuple Versions |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |