CN114168594A - 一种水平分区表的二级索引创建方法、装置、设备及存储介质 - Google Patents
一种水平分区表的二级索引创建方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114168594A CN114168594A CN202111491682.7A CN202111491682A CN114168594A CN 114168594 A CN114168594 A CN 114168594A CN 202111491682 A CN202111491682 A CN 202111491682A CN 114168594 A CN114168594 A CN 114168594A
- Authority
- CN
- China
- Prior art keywords
- asynchronous
- index
- partition
- subtask
- state
- 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
- 238000005192 partition Methods 0.000 title claims abstract description 317
- 238000000034 method Methods 0.000 title claims abstract description 78
- 238000003860 storage Methods 0.000 title claims abstract description 16
- 230000002159 abnormal effect Effects 0.000 claims description 36
- 230000008569 process Effects 0.000 claims description 24
- 238000005429 filling process Methods 0.000 claims description 8
- 238000004140 cleaning Methods 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 3
- 238000009826 distribution Methods 0.000 claims description 3
- 238000012544 monitoring process Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction 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/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/2264—Multidimensional index structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种水平分区表的二级索引创建方法、装置、设备及存储介质。该方法包括:接收到二级索引创建指令后,将所述指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态;通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充;检测到各叶子层分区子表完成索引数据填充后,将分区根表的二级索引的索引状态设置为有效状态,获得所述二级索引。本发明实施例,通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充,解决了二级索引创建时,耗时较长的问题,提升了二级索引创建的效率,从而提升了用户体验。
Description
技术领域
本发明实施例涉及数据库领域,尤其涉及一种水平分区表的二级索引创建方法、装置、设备及存储介质。
背景技术
当分区表的数据量非常大时,二级索引创建耗时较长。各大数据库厂商的解决方案中,主要包括:async异步创建索引以及parallel指定并行度创建索引。其中,Hbase数据库的async异步创建索引可分为两步:第一步,使用async方式创建异步索引,执行完成后索引状态为无效状态,此时索引中没有数据;第二步,填充索引数据到目标文件,执行完成后更新索引为有效状态。在异步创建索引过程中,若分区表数据发生变化,会出现索引数据与分区表中实际数据不一致的问题,需要再修正索引数据。ORACLE、PostgreSQL等数据库支持parallel指定并行度创建索引,并行创建索引需要指定数据库允许的最大并行进程数。并行创建索引使用了生产者消费者模型,即执行一个结构化查询语句(Structured QueryLanguage,SQL)时,分配多个并行进程同时执行数据扫描、连接等操作,多个进程协同完成同一个SQL。
可以看出,async异步创建索引并没有真正提高索引数据填充的效率,只是将创建索引拆分两部分完成;parallel指定并行度创建索引是将一个SQL交由多个进程协同完成工作,用N倍的资源消耗换取时间,但是,索引b树必须有序填充数据,索引数据填充时生产者和消费者耦合度过高,则会降低并行效率。
发明内容
本发明提供一种水平分区表的二级索引创建方法、装置、设备及存储介质,以实现了二级索引创建时效率的提升。
第一方面,本发明实施例提供了一种水平分区表的二级索引创建方法,该方法包括:
接收到二级索引创建指令后,将所述指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态;
通过分配的异步子任务,对所述水平分区表中相应叶子层分区子表的二级索引进行索引数据填充;
检测到各所述叶子层分区子表完成索引数据填充后,将所述分区根表的二级索引的索引状态设置为有效状态,获得所述二级索引。
第二方面,本发明实施例还提供了水平分区表的二级索引创建装置,该装置包括:
状态设置模块,用于接收到二级索引创建指令后,将所述指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态;
数据填充模块,用于通过分配的异步子任务,对所述水平分区表中相应叶子层分区子表的二级索引进行索引数据填充;
索引获得模块,用于检测到各所述叶子层分区子表完成索引数据填充后,将所述分区根表的二级索引的索引状态设置为有效状态,获得所述二级索引。
第三方面,本发明实施例还提供了一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述第一方面所述的水平分区表的二级索引创建方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面所述的水平分区表的二级索引创建方法。
本发明实施例所提供的技术方案中,首先在接收到二级索引创建指令后,将所述指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态;通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充;检测到各叶子层分区子表完成索引数据填充后,将分区根表的二级索引的索引状态设置为有效状态,获得二级索引。本发明实施例,通过分配的异步子任务,对水平分区表中相应分区子表的二级索引进行索引数据填充,解决了二级索引创建时,耗时较长的问题,提升了二级索引创建的效率,从而提升了用户体验。与现有技术相比,所采用的水平分区表的二级索引创建方法,解决了async异步创建索引,在异步创建索引过程中,分区表数据发生变化时,索引数据与分区表中实际数据不一致的问题,同时解决了parallel指定并行度创建索引时,资源消耗高的问题,在一定程度上提升了效率。
附图说明
图1为本发明实施例一提供的一种水平分区表的二级索引创建方法的流程图;
图2为本发明实施例二提供的一种水平分区表的二级索引创建方法的流程图;
图3为本发明实施例二提供的一种水平分区表的二级索引创建方法的流程图;
图4为本发明实施例三提供的一种水平分区表的二级索引创建装置的结构示意图;
图5为本发明实施例四提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种水平分区表的二级索引创建方法的流程图,本实施例可适用于二级索引创建时效率低的情况,该方法可以由一种水平分区表的二级索引创建装置来执行,该装置可以采用硬件和/或软件的方式来实现,通常可配置于计算机设备中。具体包括如下步骤:
S110、接收到二级索引创建指令后,将指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态。
其中,二级索引创建指令可以理解为水平分区表的二级索引创建时产生的指令。
在本实施例中,水平分区表可以理解为将一个具有大量数据的表,拆分为具有相同表结构的若干子表。根据分区表所在层级,可以将其分为:分区根表、中间表、叶子层分区子表。其中,只有分区表层级的最底层才会存放数据,即只有叶子层分区子表中才会存放数据。
需要说明的是,二级索引的索引状态可以包括有效状态和无效状态。其中有效状态可以理解为二级索引的索引状态为存在且可用的状态;无效状态可以理解为二级索引的索引状态为存在但不可用的状态。
需要说明的是,由于在创建二级索引过程中,需要封锁水平分区表,此时需要将水平分区表中分区根表的二级索引的索引状态设置为无效状态,这样可以避免水平分区表被用户DROP删除;同时,避免创建索引过程中,用户对水平分区表进行插入、删除、更新等操作,导致聚集索引和二级索引中的数据不一致的问题;但是允许对水平分区表进行查询操作。其中,聚集索引可以理解为数据库表中数据的物理顺序与键值的逻辑(索引)顺序相同,一个数据表只能有一个聚集索引。
在本实施例中,在接收到水平分区表的二级索引创建指令后,需要将指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态,以便进行下一步的操作。
S120、通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充。
其中,异步子任务可以理解为异步子进程或者异步子线程。在创建索引的时候,有主任务,也有异步子任务,主任务将一部分执行任务交给异步子任务执行相应的操作。其中,主任务可以理解为主进程或主线程。
在本实施例中,索引数据填充可以理解为通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行数据填充的过程。可以理解的是,基于水平分区表的特性,数据只存储在叶子层分区子表上,每个叶子层分区子表的二级索引b树是独立的。此时,填充的数据可以理解为叶子层分区子表的数据,且各个叶子层分区子表可以并行进行填充数据。
在本实施例中,通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充的方式可以为,首先确定异步子任务的任务个数,然后按照设定分配规则结合任务个数依次为各叶子层分区子表分配异步子任务,并通过异步子任务将相应叶子层分区子表的数据填充在对应的二级索引中。
可选的,通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充,包括:
确定异步子任务的任务个数;
按照设定分配规则结合任务个数依次为各叶子层分区子表分配异步子任务,并通过异步子任务将相应叶子层分区子表的数据填充在对应的二级索引中。
其中,设定分配规则可以理解为预先设置的分配规则,设定分配规则可以根据二级索引创建的执行环境的异步子任务空闲链表来确定,也可以根据异步子任务使用链表来确定,还可以根据执行状态来确定,本实施例在此不做限制。
需要说明的是,确定异步子任务的任务个数的方式可以为,通过获取用户预先指定的任务个数以确定异步子任务的任务个数;也可以为根据数据库运行环境、水平分区表中叶子层分区子表的子表个数以及各叶子层分区子表的数据量,以确定异步子任务的任务个数;本实施例在此不做限制。
需要说明的是,按照设定分配规则结合所述任务个数依次为各叶子层分区子表分配异步子任务,并通过异步子任务,将相应叶子层分区子表的数据填充在对应的二级索引中的方式可以为,首先获取用于二级索引创建的执行环境的初始信息,初始信息中包括:长度等于任务个数的异步子任务空闲链表、长度为0的异步子任务使用链表,以及初值为正常状态的执行状态,从水平分区表中选定一个待进行索引数据填充的叶子层分区子表,作为当前叶子层分区子表;然后在当前执行状态为正常状态时,为当前叶子层分区子表从异步子任务空闲链表中确定当前异步子任务节点,并将当前异步子任务节点添加至异步子任务使用链表,返回继续执行当前叶子层分区子表的选定操作,直至所有叶子层分区子表都被分配了异步子任务;针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中;最后当当前异步子任务完成索引数据填充时,将当前异步子任务对应节点从所述异步子任务使用链表中移除,重新添加至异步子任务空闲链表。
S130、检测到各叶子层分区子表完成索引数据填充后,将分区根表的二级索引的索引状态设置为有效状态,获得二级索引。
在本实施中,通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充,在检测到各叶子层分区子表完成索引数据填充后,将分区根表的二级索引的索引状态设置为有效状态,获得二级索引。
本发明实施例所提供的技术方案中,首先接收到二级索引创建指令后,将指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态;通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充;检测到各叶子层分区子表完成索引数据填充后,将分区根表的二级索引的索引状态设置为有效状态,获得二级索引。本发明实施例,通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充,解决了二级索引创建时,耗时较长的问题,提升了二级索引创建的效率,从而提升了用户体验。与现有技术相比,所采用的水平分区表的二级索引创建方法,解决了async异步创建索引,在异步创建索引过程中,分区表数据发生变化时,索引数据与分区表中实际数据不一致的问题,同时解决了parallel指定并行度创建索引时,资源消耗高的问题,在一定程度上提升了效率。
可选的,在将分区根表的二级索引的索引状态设置为有效状态之前,还包括:
销毁用于二级索引创建的执行环境;
相应的,在将分区根表的二级索引的索引状态设置为有效状态之后,还包括:
更新水平分区表在系统表中对应的分区表信息,并清理水平分区表在数据库运行过程中的缓存信息。
其中,执行环境可以理解为用于二级索引创建的环境。执行环境的相关信息可以包括异步子任务空闲链表、异步子任务使用链表、互斥量等等,本实施例在此不做限制。
在本实施例中,在将分区根表的二级索引的索引状态设置为有效状态之前,需要销毁用于二级索引创建的执行环境,相应的,在将分区根表的二级索引的索引状态设置为有效状态之后,还包括:更新水平分区表在系统表中对应的分区表信息,并清理水平分区表在数据库运行过程中的缓存信息。例如可以是,水平分区表最后修改时间等等;同时,在水平分区表信息发生变更后,需要清理水平分区表在数据库运行过程中的缓存信息,例如可以是,由于在创建索引过程中,允许对水平分区表进行查询操作,若查询语句的执行计划被缓存,则再次执行该查询语句时仍然不会使用新创建的二级索引,只有清理缓存后查询语句再次执行时,才会重新构造新的执行计划。
实施例二
图2为本发明实施例二提供的一种水平分区表的二级索引创建方法的流程图,本实施例在上述各实施例地基础上,进一步进行了细化。具体可以包含如下步骤:
S210、接收到二级索引创建指令后,将指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态。
S220、获取用户预先指定的任务个数;或者,
根据数据库运行环境、水平分区表中叶子层分区子表的个数以及各叶子层分区子表的数据量,确定异步子任务的任务个数。
其中,数据库运行环境可以包含数据库所在的操作系统、磁盘IO、内存等有关信息。
需要说明的是,若用户创建索引时,指定了异步子任务数,则可以直接使用指定个数的异步子任务;若用户创建索引时,未指定异步子任务数,则需要根据数据库运行环境、叶子层分区子表的个数、各叶子层分区子表的数据量等综合因素确定异步子任务数。在本实施中,不对异步子任务的任务个数做限制。
在本实施例中,在创建索引时,需要考虑到数据库运行环境的资源问题,根据数据库运行环境确认异步子任务数。异步并行创建索引时,需要考虑资源问题,每个叶子层分区子表都需要对各自分区子表中数据进行排序并填充到二级索引中,因此若资源紧张,则可能会使得异步子任务过多时,导致执行效率降低的问题。示例性的,当异步子任务都对叶子层分区数据进行读取,并将二级索引数据刷盘到物理页,这会引发频繁的磁盘读/写(I/O),可能会造成I/O瓶颈。
在本实施例中,在创建索引时,需要考虑到水平分区表中叶子层分区子表的子表个数问题,根据叶子层分区子表的个数确认异步子任务数。异步子任务数小于等于叶子层分区子表的个数,一个叶子层分区子表单独使用一个异步子任务填充二级索引数据,异步子任务数过多没有意义。
在本实施例中,在创建索引时,需要考虑到叶子层分区子表的数据量,根据叶子层分区子表的数据量确认异步子任务数。示例性的,当出现各分区子表的数据量过大时,需要考虑分批对各个分区子表进行索引数据填充,因为若子表的数据量过大,数据库运行环境可能不足以支撑所有叶子层分区子表同时异步并行排序和填充数据,此时需要考虑分批对各个分区子表进行索引数据填充。
S230、获取用于二级索引创建的执行环境的初始信息,初始信息中包括:长度等于任务个数的异步子任务空闲链表、长度为0的异步子任务使用链表,以及初值为正常状态的执行状态。
需要说明的是,根据异步子任务的个数,初始化二级索引创建的执行环境,可以包括:长度等于任务个数的异步子任务空闲链表、长度为0的异步子任务使用链表,还可以包括执行状态、互斥量等等,本实施例在此不做限制。其中,异步子任务空闲链表的长度初值与异步子任务的个数相等;异步子任务使用链表的长度初值为0;其中,执行状态可以理解为水平分区表二级索引异步并行创建的执行状态,可以包含正常状态、异常状态,其初值为正常状态;互斥量可以用于保证主任务和异步子任务正常配合完成工作,当主任务和异步子任务同时访问同一资源时,需要进行互斥量保护。
S240、从水平分区表中选定一个待进行索引数据填充的叶子层分区子表,作为当前叶子层分区子表。
其中,当前叶子层分区子表可以理解为当前待进行索引数据填充的叶子层分区子表。
在本实施例中,在获取用于二级索引创建的执行环境的初始信息后,从水平分区表中选定一个待进行索引数据填充的叶子层分区子表,作为当前叶子层分区子表。
S250、在当前执行状态为正常状态时,为当前叶子层分区子表从异步子任务空闲链表中确定当前异步子任务节点,并将当前异步子任务节点添加至异步子任务使用链表,返回继续执行当前叶子层分区子表的选定操作,直至所有叶子层分区子表都被分配了异步子任务。
其中,异步子任务节点可以理解为链表中存储异步子任务信息的一个节点。链表中的节点可以理解为一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表中每一个元素称为节点,链表由一个或多个节点组成,节点中存储异步子任务信息,异步子任务可以在运行时动态生成。
在本实施例中,主任务可以理解为主进程或主线程,主任务是产生其他异步子任务的任务,子任务可以理解为子进程或子线程。
需要说明的是,当前执行状态为正常状态时,说明主任务与异步子任务均为正常状态,此时可以为当前叶子层分区子表从异步子任务空闲链表中,确定当前异步子任务节点,并将当前异步子任务节点添加至异步子任务使用链表。在本实施例中,当前执行状态可以包含正常状态和异常状态,初始状态为正常状态。
在本实施例中,为当前叶子层分区子表从异步子任务空闲链表中确定当前异步子任务节点的方式可以为,判断是否存在空闲的异步子任务节点,若异步子任务空闲链表中存在空闲的异步子任务节点,则从空闲异步子任务节点中选定一个作为当前异步子任务节点;否则,主任务定期监测所述异步子任务空闲链表的长度,等待其它异步子任务执行结束才能为当前叶子层分区子表分配异步子任务。
可选的,当前叶子层分区子表从异步子任务空闲链表中确定当前异步子任务节点,包括:
如果异步子任务空闲链表的长度大于0,则选定一个作为当前异步子任务节点;否则,主任务定期监测异步子任务空闲链表的长度,等待其它异步子任务执行结束才能为当前叶子层分区子表分配异步子任务。
在本实施例中,若异步子任务空闲链表的长度大于0,则选定一个作为当前异步子任务节点;否则,需要主任务定期监测异步子任务空闲链表的长度,等待其它异步子任务执行结束才能为当前叶子层分区子表分配异步子任务。
S260、针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中。
在本实施例中,主任务逐个为叶子层分区子表申请异步子任务以填充二级索引数据。其中,为叶子层分区子表申请异步子任务时,首先需要从异步子任务空闲链表中取出一个当前异步子任务节点,并将此节点添加到异步子任务使用链表中;当一个异步子任务执行完成后,需要将对应节点从异步子任务使用链表中移除,并添加到异步子任务空闲链表中。
需要说明的是,当所有叶子层分区子表都被分配了异步子任务后,主任务进入等待状态,定期检查各分配的异步子任务是否都结束了,即异步子任务使用链表的长度是否为0,若为0则表示所有异步子任务都执行结束了,此时才能执行后续操作。
在本实施例中,通过当前异步子任务将当前叶子层分区子表中数据按照设定填充规则填充至相应的二级索引。在按照设定填充规则填充数据时,需要主任务和异步子任务协同完成,在当前叶子层分区子表中数据按照设定填充规则进行二级索引数据填充过程中,需要定期监测执行状态。
需要说明的是,针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中的方式可以为,首先通过当前异步子任务,将当前叶子层分区子表的指定列数据有序填充至相应的二级索引中,然后在二级索引的数据填充过程中,定期监测执行状态,如果为异常状态则提前结束当前异步子任务,如果为正常状态则继续填充数据直至数据填充完成;若二级索引数据填充过程中,当前异步子任务自身异常,则结束当前异步子任务并调整执行状态为异常状态。
可选的,针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中,包括:
通过当前异步子任务,将当前叶子层分区子表的指定列数据有序填充至相应的二级索引中;
在二级索引的数据填充过程中,定期监测执行状态,如果为异常状态则提前结束当前异步子任务,如果为正常状态则继续填充数据直至数据填充完成;
如果二级索引数据填充过程中,当前异步子任务自身异常,则结束当前异步子任务并调整执行状态为异常状态。
其中,定期监测执行状态可以用于检测索引数据填充状态是否正常。
在本实施例中,数据填充状态可以包括索引数据填充异常和索引数据填充正常。
在本实施例中,当前叶子层分区子表二级索引填充数据,需要主任务和异步子任务协同完成,在进行索引数据填充的过程中,需要定期检测数据填充状态是否正常。在二级索引数据填充过程中,若当前异步子任务自身出现异常,则结束当前异步子任务并将执行状态从正常状态调整为异常状态。
需要说明的是,当索引数据填充异常,并调整为异常状态后,若主任务监测到执行状态为异常状态,则停止所有正在执行的异步子任务,并报错结束;若异步子任务监测到执行状态为异常状态,则提前结束当前异步子任务。
S270、当当前异步子任务完成索引数据填充时,将当前异步子任务对应节点从异步子任务使用链表中移除,重新添加至异步子任务空闲链表。
需要说明的是,二级索引的索引数据填充的过程,会持续从水平分区表中选取待填充索引数据的叶子区分区子表,为其分配异步子任务,每分配一个异步子任务之后,就接着选取下一个待填充索引数据的叶子层分区子表分配异步子任务。
在本实施例中,在当前异步子任务完成索引数据填充时,需要将当前异步子任务对应节点从异步子任务使用链表中移除,重新添加至异步子任务空闲链表。
S280、检测到各叶子层分区子表完成索引数据填充后,将水平分区表中分区根表的二级索引的索引状态设置为有效状态,获得二级索引。
在本实施例中,检测到各叶子层分区子表完成索引数据填充后,将水平分区表中分区根表的二级索引的索引状态设置为有效状态,获得二级索引。
本发明实施例所提供的技术方案中,通过接收到二级索引创建指令后,将指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态,然后获取用户预先指定的任务个数;或者,根据数据库运行环境、水平分区表中叶子层分区子表的个数以及各叶子层分区子表的数据量,确定异步子任务的任务个数,获取用于二级索引创建的执行环境的初始信息,然后从水平分区表中选定一个待进行索引数据填充的叶子层分区子表,作为当前叶子层分区子表;在当前执行状态为正常状态时,为当前叶子层分区子表从异步子任务空闲链表中确定当前异步子任务节点,并将当前异步子任务节点添加至异步子任务使用链表,返回继续执行当前叶子层分区子表的选定操作,直至所有叶子层分区子表都被分配了异步子任务;针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中;当当前异步子任务完成索引数据填充时,将当前异步子任务对应节点从异步子任务使用链表中移除,重新添加至异步子任务空闲链表,检测到各叶子层分区子表完成索引数据填充后,将水平分区表中分区根表的二级索引的索引状态设置为有效状态,获得二级索引。本发明实施例,通过在当前执行状态为正常状态时,为当前叶子层分区子表从所述异步子任务空闲链表中确定当前异步子任务节点,针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中,进一步提升了二级索引创建的效率,从而提升了用户体验。
可选的,主任务或任意一个异步子任务执行出错时,相应的执行状态从正常状态调整为异常状态;相应的,在当前执行状态为异常状态时,还包括:
任意一个正在执行的异步子任务监测到异常状态时,结束当前异步子任务;
主任务监测到异常状态时,停止所有正在执行的异步子任务,并报错结束。
在本实施例中,若主任务或任意一个异步子任务执行出错时,相应的执行状态从正常状态调整为异常状态。当任意一个正在执行的异步子任务监测到异常状态时,结束当前异步子任务;当主任务监测到异常状态时,停止所有正在执行的异步子任务,并报错结束。示例性的,主任务发生异常可以为用户连接断开,也可以为当服务器执行时间太长时,客户端强制将连接会话断开的情况;本实施例在此不做限制。异步子任务发生异常可以为索引表达式计算出错、列排序出错、空间不足等,本实施例在此不做限制。
需要说明的是,若当前主任务发生异常,则调整执行状态为异常状态,并报错结束。其中,主任务报错结束前,会对出错的语句进行异常处理,水平分区表异步并行创建二级索引的异常处理为,停止相关的所有正在执行的异步子任务。主任务等待异步子任务结束过程中,主任务调整为等待状态,以设定周期监测异步子任务使用链表的长度,当异步子任务使用链表长度为0时,则认为相关的所有正在执行的异步子任务都已结束,此时才能执行后续的报错结束操作。
在本实施例中,当所有叶子层分区子表都成功申请了异步子任务填充二级索引数据后,主任务调整为等待状态,定期检查异步子任务是否都结束了,即异步子任务使用链表长度是否为0,若为0则表示所有异步子任务都执行结束了,此时才能执行后续操作。主任务等待过程中,若发现执行状态为异常状态,则等待所有异步子任务执行结束释放资源后,向用户报错返回。
示例性的,为便于更好的理解水平分区表的二级索引创建方法,图3为本发明实施例二提供的一种水平分区表的二级索引创建方法的流程图,如图3所示,在实际场景下,水平分区表的二级索引创建方法流程如下:
S301、接收到二级索引创建指令后,将指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态。
S302、确认异步执行SQL的子任务数。
S303、初始化会话上水平分区表二级索引异步并行创建环境。
S304、持续检查是否有叶子层分区子表待填充数据,若是,则执行步骤S305,若否,则执行步骤S309。
S305、取出单个叶子层分区子表。
S306、是否有空闲异步子任务,若是,则执行步骤S308,若否,则执行步骤S307。
S307、等待空闲异步子任务,定期检查是否有空闲异步子任务。
S308、异步子任务为叶子层分区子表填充二级索引数据,定期检查执行状态。
S3081、叶子层分区子表二级索引填充数据是否正常,若是,则执行S3082;若否,则执行S3084。
S3082、定期检查执行状态是否正常,若是,则执行S3083;若否,则执行S3084。
S3083、继续填充二级索引数据,等待二级索引数据填充完成;完成后执行S3085。
S3084、提前结束当前异步子任务,并调整异步执行状态为异常状态。
S3085、正常结束当前异步子任务。
S309、等待所有异步子任务完成。
S3091、定期检查执行状态是否正常,若是,则等待所有异步子任务完成,完成后执行S310;若否,则执行S312。
S310、销毁会话上水平分区表二级索引异步并行执行环境,并更新水平分区表中分区根表的二级索引的索引状态为有效状态。
S311、成功返回用户。
S312、向用户报错返回。
示例性的:水平分区表单个索引异步并行创建的性能测试结论如下表所示:随着异步子任务个数的提升,异步并行创建索引性能逐步提升,但是当达到最优值后,随着异步子任务个数的提升性能则开始下降,因此根据数据库运行环境、叶子层分区子表的个数、叶子层分区子表的数据量等综合因素合理地选择异步子任务个数是非常重要的。
实施例三
图4为本发明实施例三提供的一种水平分区表的二级索引创建装置的结构示意图,本实施例所提供的一种水平分区表的二级索引创建装置可以通过软件和/或硬件来实现,可配置于服务器中来实现本发明实施例中的一种水平分区表的二级索引创建方法。如图4所示,该装置具体可包括:状态设置模块410、数据填充模块420和索引获得模块430。
其中,状态设置模块410,用于接收到二级索引创建指令后,将所述指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态。
数据填充模块420,用于通过分配的异步子任务,对所述水平分区表中相应叶子层分区子表的二级索引进行索引数据填充。
索引获得模块430,用于检测到各所述叶子层分区子表完成索引数据填充后,将所述分区根表的二级索引的索引状态设置为有效状态,获得所述二级索引。
本发明实施例所提供的技术方案中,首先状态设置模块接收到二级索引创建指令后,将指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态;然后数据填充模块通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充;索引获得模块检测到各叶子层分区子表完成索引数据填充后,将分区根表的二级索引的索引状态设置为有效状态,获得二级索引。本发明实施例,通过分配的异步子任务,对水平分区表中相应叶子层分区子表的二级索引进行索引数据填充,解决了二级索引创建时,耗时较长的问题,提升了二级索引创建的效率,从而提升了用户体验。
可选的,所述水平分区表的二级索引创建装置,还包括:
环境销毁模块,用于在将所述分区根表的二级索引的索引状态设置为有效状态之前,销毁用于二级索引创建的执行环境。
相应的,所述水平分区表的二级索引创建装置,还包括:
信息清理模块,用于在将所述分区根表的二级索引的索引状态设置为有效状态之后,更新所述水平分区表在系统表中对应的分区表信息,并清理所述水平分区表在数据库运行过程中的缓存信息。
可选的,数据填充模块420,可以包括:
子任务生成单元,用于确定异步子任务的任务个数。
数据填充单元,用于按照设定分配规则结合任务个数依次为各所述叶子层分区子表分配异步子任务,并通过异步子任务将相应叶子层分区子表的数据填充在对应的二级索引中。
可选的,子任务生成单元,用于获取用户预先指定的任务个数;或者,
根据数据库运行环境、所述水平分区表中叶子层分区子表的个数以及各所述叶子层分区子表的数据量,确定异步子任务的任务个数。
可选的,数据填充单元,可以包括:
信息获取子单元,用于获取用于二级索引创建的执行环境的初始信息,所述初始信息中包括:长度等于所述任务个数的异步子任务空闲链表、长度为0的异步子任务使用链表,以及初值为正常状态的执行状态。
子表选定子单元,用于从水平分区表中选定一个待进行索引数据填充的叶子层分区子表,作为当前叶子层分区子表。
子任务节点完成单元,用于在当前执行状态为正常状态时,为所述当前叶子层分区子表从所述异步子任务空闲链表中确定当前异步子任务节点,并将所述当前异步子任务节点添加至所述异步子任务使用链表,返回继续执行当前叶子层分区子表的选定操作,直至所有叶子层分区子表都被分配了异步子任务。
索引填充子单元,用于针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中。
链表重新添加子单元,用于当所述当前异步子任务完成索引数据填充时,将所述当前异步子任务对应节点从所述异步子任务使用链表中移除,重新添加至所述异步子任务空闲链表。
可选的,当主任务或任意一个异步子任务执行出错时,相应的执行状态从正常状态调整为异常状态;相应的,在当前执行状态为异常状态时,还包括:
子任务异常处理单元,用于任意一个正在执行的异步子任务监测到所述异常状态时,结束当前异步子任务。
主任务异常处理单元,用于主任务监测到所述异常状态时,停止所有正在执行的异步子任务,并报错结束。
可选的,链表重新添加子单元,可以用于:
如果所述异步子任务空闲链表的长度大于0,则选定一个作为当前异步子任务节点;否则,主任务定期监测所述异步子任务空闲链表的长度,等待其它异步子任务执行结束才能为当前叶子层分区子表分配异步子任务。
可选的,索引填充子单元,可以用于:
通过所述当前异步子任务,将所述当前叶子层分区子表中数据填充至相应的二级索引。
通过所述当前异步子任务,将所述当前叶子层分区子表的指定列数据有序填充至相应的二级索引中。
在所述二级索引的数据填充过程中,定期监测执行状态,如果为异常状态则提前结束所述当前异步子任务,如果为正常状态则继续填充数据直至数据填充完成。
如果所述二级索引数据填充过程中,所述当前异步子任务自身异常,则结束所述当前异步子任务并调整执行状态为异常状态。
本发明实施例所提供的水平分区表的二级索引创建装置可执行本发明任意实施例所提供的水平分区表的二级索引创建方法,具备执行方法相应的功能模块和有益效果。
实施例四
图5为本发明实施例四提供的一种计算机设备的结构示意图,如图5所示,该计算机设备包括处理器510、存储器520、输入装置530和输出装置540;计算机设备中处理器510的数量可以是一个或多个,图5中以一个处理器510为例;计算机设备中的处理器510、存储器520、输入装置530和输出装置540可以通过总线或其他方式连接,图5中以通过总线连接为例。
存储器520作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的水平分区表的二级索引创建方法对应的程序指令/模块(例如,水平分区表的二级索引创建装置中的状态设置模块410、数据填充模块420和索引获得模块430)。处理器510通过运行存储在存储器520中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的水平分区表的二级索引创建方法。
存储器520可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器520可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器520可进一步包括相对于处理器510远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置530可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置540可包括显示屏等显示设备。
实施例五
本发明实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种水平分区表的二级索引创建方法,该方法包括:
接收到二级索引创建指令后,将所述指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态。
通过分配的异步子任务,对所述水平分区表中相应叶子层分区子表的二级索引进行索引数据填充。
检测到各所述叶子层分区子表完成索引数据填充后,将所述分区根表的二级索引的索引状态设置为有效状态,获得所述二级索引。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的水平分区表的二级索引创建方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述搜索装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (11)
1.一种水平分区表的二级索引创建方法,其特征在于,包括:
接收到二级索引创建指令后,将所述指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态;
通过分配的异步子任务,对所述水平分区表中相应叶子层分区子表的二级索引进行索引数据填充;
检测到各所述叶子层分区子表完成索引数据填充后,将所述分区根表的二级索引的索引状态设置为有效状态,获得所述二级索引。
2.根据权利要求1所述的方法,其特征在于,通过分配的异步子任务,对所述水平分区表中相应叶子层分区子表的二级索引进行索引数据填充,包括:
确定异步子任务的任务个数;
按照设定分配规则结合所述任务个数依次为各所述叶子层分区子表分配异步子任务,并通过异步子任务将相应叶子层分区子表的数据填充在对应的二级索引中。
3.根据权利要求2所述的方法,其特征在于,所述确定异步子任务的任务个数,包括:
获取用户预先指定的任务个数;或者,
根据数据库运行环境、所述水平分区表中叶子层分区子表的个数以及各所述叶子层分区子表的数据量,确定异步子任务的任务个数。
4.根据权利要求2所述的方法,其特征在于,所述按照设定分配规则结合所述任务个数依次为各所述叶子层分区子表分配异步子任务,并通过异步子任务将相应叶子层分区子表的数据填充在对应的二级索引中,包括:
获取用于二级索引创建的执行环境的初始信息,所述初始信息中包括:长度等于所述任务个数的异步子任务空闲链表、长度为0的异步子任务使用链表,以及初值为正常状态的执行状态;
从水平分区表中选定一个待进行索引数据填充的叶子层分区子表,作为当前叶子层分区子表;
在当前执行状态为正常状态时,为所述当前叶子层分区子表从所述异步子任务空闲链表中确定当前异步子任务节点,并将所述当前异步子任务节点添加至所述异步子任务使用链表,返回继续执行当前叶子层分区子表的选定操作,直至所有叶子层分区子表都被分配了异步子任务;
针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中;
当所述异步子任务完成索引数据填充时,将所述当前异步子任务对应节点从所述异步子任务使用链表中移除,重新添加至所述异步子任务空闲链表。
5.根据权利要求4所述的方法,其特征在于,当主任务或任意一个异步子任务执行出错时,相应的执行状态从正常状态调整为异常状态;
相应的,在当前执行状态为异常状态时,还包括:
任意一个正在执行的异步子任务监测到所述异常状态时,结束当前异步子任务;
主任务监测到所述异常状态时,停止所有正在执行的异步子任务,并报错结束。
6.根据权利要求4所述的方法,其特征在于,所述为所述当前叶子层分区子表从所述异步子任务空闲链表中确定当前异步子任务节点,包括:
如果所述异步子任务空闲链表的长度大于0,则选定一个作为当前异步子任务节点;否则,主任务定期监测所述异步子任务空闲链表的长度,等待其它异步子任务执行结束才能为当前叶子层分区子表分配异步子任务。
7.根据权利要求4所述的方法,其特征在于,所述针对分配并生成的每个异步子任务,将相对应叶子层分区子表的指定列数据有序填充至相应的二级索引中,包括:
通过所述当前异步子任务,将所述当前叶子层分区子表的指定列数据有序填充至相应的二级索引中;
在所述二级索引的数据填充过程中,定期监测执行状态,如果为异常状态则提前结束所述当前异步子任务;如果为正常状态则继续填充数据,直至数据填充完成;
如果所述二级索引数据填充过程中,所述当前异步子任务自身异常,则结束所述当前异步子任务并调整执行状态为异常状态。
8.根据权利要求1-7任一项所述的方法,其特征在于,在将所述分区根表的二级索引的索引状态设置为有效状态之前,还包括:
销毁用于二级索引创建的执行环境;
相应的,在将所述分区根表的二级索引的索引状态设置为有效状态之后,还包括:
更新所述水平分区表在系统表中对应的分区表信息,并清理所述水平分区表在数据库运行过程中的缓存信息。
9.一种水平分区表的二级索引创建装置,其特征在于,包括:
状态设置模块,用于接收到二级索引创建指令后,将所述指令所对应水平分区表中分区根表的二级索引的索引状态设置为无效状态;
数据填充模块,用于通过分配的异步子任务,对所述水平分区表中相应叶子层分区子表的二级索引进行索引数据填充;
索引获得模块,用于检测到各所述叶子层分区子表完成索引数据填充后,将所述分区根表的二级索引的索引状态设置为有效状态,获得所述二级索引。
10.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述水平分区表的二级索引创建方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-8中任一所述水平分区表的二级索引创建方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111491682.7A CN114168594A (zh) | 2021-12-08 | 2021-12-08 | 一种水平分区表的二级索引创建方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111491682.7A CN114168594A (zh) | 2021-12-08 | 2021-12-08 | 一种水平分区表的二级索引创建方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114168594A true CN114168594A (zh) | 2022-03-11 |
Family
ID=80484551
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111491682.7A Pending CN114168594A (zh) | 2021-12-08 | 2021-12-08 | 一种水平分区表的二级索引创建方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114168594A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115809268A (zh) * | 2022-11-23 | 2023-03-17 | 深圳计算科学研究院 | 一种基于分片索引的自适应查询方法和装置 |
-
2021
- 2021-12-08 CN CN202111491682.7A patent/CN114168594A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115809268A (zh) * | 2022-11-23 | 2023-03-17 | 深圳计算科学研究院 | 一种基于分片索引的自适应查询方法和装置 |
CN115809268B (zh) * | 2022-11-23 | 2024-01-16 | 深圳计算科学研究院 | 一种基于分片索引的自适应查询方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9619430B2 (en) | Active non-volatile memory post-processing | |
US8417991B2 (en) | Mitigating reduction in availability level during maintenance of nodes in a cluster | |
CN110399535B (zh) | 一种数据查询方法、装置及设备 | |
WO2017101475A1 (zh) | 一种基于Spark大数据处理平台的查询方法 | |
CN110147407B (zh) | 一种数据处理方法、装置及数据库管理服务器 | |
US11475006B2 (en) | Query and change propagation scheduling for heterogeneous database systems | |
US20070250517A1 (en) | Method and Apparatus for Autonomically Maintaining Latent Auxiliary Database Structures for Use in Executing Database Queries | |
CN113157411B (zh) | 一种基于Celery的可靠可配置任务系统及装置 | |
US20240061712A1 (en) | Method, apparatus, and system for creating training task on ai training platform, and medium | |
US20130159287A1 (en) | Database query optimizer that takes network choice into consideration | |
CN113391913A (zh) | 一种基于预测的分布式调度方法和装置 | |
CN114090580A (zh) | 数据处理方法、装置、设备、存储介质及产品 | |
CN112052082A (zh) | 任务属性优化方法、装置、服务器及存储介质 | |
US6549931B1 (en) | Distributing workload between resources used to access data | |
CN112035578A (zh) | 基于众核处理器的数据并行处理方法及装置 | |
CN114168594A (zh) | 一种水平分区表的二级索引创建方法、装置、设备及存储介质 | |
CN116719626B (zh) | 海量数据拆分的多线程并行处理方法及其处理系统 | |
CN111506400A (zh) | 计算资源分配系统、方法、装置和计算机设备 | |
CN114240632A (zh) | 批量作业执行方法、装置、设备、介质和产品 | |
WO2021114549A1 (zh) | 一种指令执行方法、装置、设备及存储介质 | |
CN114020446A (zh) | 一种跨多引擎的路由处理方法、装置、设备及存储介质 | |
CN111949687A (zh) | 基于共享内存和多进程的分布式数据库架构及其实现方法 | |
CN110297692A (zh) | 一种分布式软件任务动态管理的方法及其系统 | |
CN117251383B (zh) | 基于缓存的软件成分检测方法、装置、设备及存储介质 | |
CN118503311B (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 |