CN113157694A - 一种基于强化学习的数据库索引生成方法 - Google Patents
一种基于强化学习的数据库索引生成方法 Download PDFInfo
- Publication number
- CN113157694A CN113157694A CN202110301421.8A CN202110301421A CN113157694A CN 113157694 A CN113157694 A CN 113157694A CN 202110301421 A CN202110301421 A CN 202110301421A CN 113157694 A CN113157694 A CN 113157694A
- Authority
- CN
- China
- Prior art keywords
- index
- index block
- abstract
- block
- blocks
- 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
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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于强化学习的数据库索引生成方法。建立树型结构的通用索引架构,节点的抽象索引块分为有序索引块和无序索引块,含有由循环神经网络进行调优的参数,相邻抽象索引块组成索引块组;最底层抽象索引块链接到数据集;对数据集和工作负载,控制器模型自顶向下逐层构建索引架构的参数序列,每一层包含多个索引块组参数,生成参数形成参数序列;索引构建器加载索引架构的参数序列建立逻辑索引;将数据集逐条扫描加载到逻辑索引架构中,并经过实体化过程形成物理索引;使用物理索引执行给定工作负载,得到执行时延以及空间利用率并反馈更新;重复步骤循环迭代。本发明所生成的混合索引架构可支持各种复杂应用场景,并实现更好的性能。
Description
技术领域
本发明涉及数据库索引技术领域的一种数据库索引处理方法,尤其涉及一种基于强化学习的自动索引架构生成方法。
背景技术
随着云计算商业模式越来越趋于成熟,数百万的用户在云服务器上部署了各种应用程序,并将云数据库用作其数据管理系统,云计算产品服务也越来越受到性能和效率的压力。云服务提供商的关键任务之一是利用有限的云资源来优化用户的数据访问,提升程序的响应能力,为用户带来更好的使用体验,其中索引起着至关重要的作用。然而,对索引架构进行性能优化非常具有挑战性,传统的调优技术将需要一个经验丰富的数据库管理员(Database Administrator,简称DBA)针对特定数据集与工作负载花费数周的努力进行大量的手动调优。由于不同应用程序的数据多样性以及用户访问模式的差异,例如,一个在线购物平台与一个智能移动办公应用软件在数据分布和访问模式上必然大相径庭,若在后者的应用场景下直接重复采用与前者相同的索引配置,往往难以提供令人满意的性能。在理想情况下,DBA应该为每一个应用程序提供定制化的索引配置,然而这对于云服务提供商而言是不可能实现的。
经观察,通常情况下,一个应用程序具有固定的访问模式(即大多数查询遵循一些预定义的模板,只有少数特殊查询不遵循),并且其数据也显示出相对稳定的分布。实际上,DBA在进行索引配置调优时,首先会根据他们的经验选择一种索引架构,其次再根据访问模式和数据分布逐渐对索引参数进行改进。然而,DBA将仍然面临两个挑战。
第一,鉴于现有索引架构种类繁多,目前尚不存在一种索引架构可在任意场景下保持最佳性能。一个保守的做法是,对于需要频繁范围查找的列采用B+ 树索引(B+Tree),对于需要快速查找的列采用哈希索引(Hash)。但是在大多数情况下,它们均不是最佳的设计方案,甚至可以说现有的任何一种索引架构都无法针对特定应用程序有效地适应其访问模式,此时可能需要设计一种新的索引架构。实际上,“新”索引的架构并不一定是全新的。目前大多数提出的索引架构之间存在着相似的通用基本构件(例如,基于哈希的分区,基于搜索键的分区等),并且经过多年的研究分析,我们已熟知这些基本构件的优缺点,现有的大多数索引架构均可被视为是这些基本构件的一种新颖组合。
第二,即使将索引选择空间限制为一些常用索引,例如B+树、跳表(SkipList)、哈希索引,但它们依然存在许多可调参数,例如B+树的节点大小和扇出,SkipList 的增长概率以及哈希索引的存储桶数等。为了找到最适合给定应用场景的参数配置,需要运行一系列的A/B测试,历时多天。此外,当应用程序的访问模式发生变化后,还需相应地调整参数值甚至修改索引架构。
针对上述问题,本文提出了一种基于强化学习的索引架构搜索方法NIS,该方法可以自动为给定的数据集和查询工作负载设计索引架构,从而使得DBA摆脱繁重的索引构建和调整工作。
发明内容
本发明的目的在于针对现有技术的不足,提供一种基于强化学习的数据库索引生成方法。
本发明运用强化学习对工作负载的感知记忆能力和学习探索能力,针对不同的数据集与工作负载学习出相应最合适的索引架构以及参数,以达到最优的服务性能和最少的资源占用。
本发明解决其技术问题采用的技术方案如下:
步骤1,建立一种通用索引架构,通用索引架构为树型结构,树型结构的节点为抽象索引块,树型结构的根节点为一个抽象索引块,树型结构中根节点下的每一层均由多个抽象索引块组成,抽象索引块分为适用于范围查询的有序索引块和适用于点查询的无序索引块,每个抽象索引块含有多个由循环神经网络进行调优的参数;根据参数配置的情况将树型结构中位于同一层、连续相邻且具有相同参数的y个抽象索引块组成集合并形成作为一个长度为y的索引块组;上一层中的每一个抽象索引块与下一层中至少一个的x个索引块组之间存在父子关系,以上层的抽象索引块为父索引块,对应的下层索引块组为子索引块组;
通用索引架构最底层的抽象索引块将直接链接到数据集;
由此,通用索引架构内部的抽象索引块具有如下两种关系:
同一层中的分组关系:对于同一层中连续相邻且具有相同参数配置的y个抽象索引块所组成的集合作为一个长度为y的索引块组。
相邻两层间的父子关系:上层中的每一个抽象索引块与下层中x个索引块组之间存在父子关系,以上层的抽象索引块为父索引块,以对应的下层索引块组为子索引块组。
步骤2,针对所需处理的数据集D和工作负载W,控制器模型按照步骤1 的通用索引架构以自顶向下的方式逐层构建一个树型结构的索引架构的参数序列,,索引架构的每一层包含多个索引块组,控制器模型逐个为索引块组以及其中的每个抽象索引块生成参数;控制器模型内含循环神经网络,循环神经网络输入上一个抽象索引块的参数,进而处理预测输出抽象索引块的参数;各层所有索引块组的参数形成了索引架构的参数序列;
所述的工作负载是指针对用户给定数据集的一组具有共同特征的查询语句,查询语句的类型包括读取数据(包括点查询与范围查询操作)、插入数据、删除数据、修改数据。
步骤3,索引构建器加载步骤2中所生成的索引架构的参数序列,在树型结构的索引架构中建立逻辑索引;
索引构建器是本发明中负责构建索引架构的组件。控制器模型负责生成索引架构的参数序列,索引构建器负责构建索引架构。
步骤4,索引构建器将数据集D逐条扫描并流式加载到步骤3所构建的逻辑索引中去,并经过实体化过程形成物理索引;
步骤5,使用步骤4所生成的物理索引执行给定工作负载W,得到执行时延以及空间利用率,将执行时延以及空间利用率反馈到采用强化学习方法作为强化学习方法的奖励对控制器模型的循环神经网络进行更新;
以执行时延以及空间利用率作为强化学习模型的奖励(reward),采用PPO(Proximal Policy Optimization)强化学习方法对控制器模型进行更新。
步骤6,不断重复步骤2~5进行循环迭代,直到控制器模型收敛,则停止循环迭代,以最后获得的索引架构作为结果。
对需要执行的查询输入结果的索引架构中进行查询,以到达最底层链接到数据集中的对应数据作为查询结果返回。
所述步骤1包括:
步骤1-A,抽象索引块分为有序索引块和无序索引块,具体为:
对于有序索引块,表示为Io={So,F,[Lo,Uo),pto},其中So表示有序索引块内所有键的一个有序列表,[Lo,Uo)为有序索引块的键范围;F表示映射函数,映射函数F为一系列有序的键值对[(ki,vi)*],ki为第i个键,vi是指向树型结构中下一层对应抽象索引块的指针;指针pto指向与当前有序索引块右侧相邻的抽象索引块;
对于无序索引块,表示为Iu={Su,H,[Lu,Uu),ptu},其中Su表示无序索引块内所有键的一个无序集合,[Lu,Uu)为无序索引块的键范围;H表示哈希函数,指针ptu指向与当前有序索引块右侧相邻的抽象索引块;
右侧相邻的从左到右的顺序是针对同一层中而言,是按照循环神经网络的时间步的顺序。
步骤1-B,每一个抽象索引块包含的多个由循环神经网络调优的参数分别为:
(1)抽象索引块的类型Type;
(2)抽象索引块中键的初始数目x;
(3)判定抽象索引块为太满的键数目比例α;
(4)判定抽象索引块为太空的键数目比例β;
一个索引块组内包含多个连续相邻且具有相同参数配置的抽象索引块;
每一个索引块组的参数由内部的各个抽象索引块的参数和索引块组自身的参数组成,分别为以下六个参数:
(1)索引块组内部的抽象索引块的类型Type;
(2)索引块组内部的抽象索引块内键的初始数目x;
(3)判定索引块组内部的抽象索引块为太满的键数目比例α;
(4)判定索引块组内部的抽象索引块为太空的键数目比例β;
(5)索引块组内部包含的抽象索引块的总数目y;
(6)索引块组内部采用跳表设计,创建跳表中的跳远连接所采用的概率向量参数γ。
同一个索引块组内部的各个抽象索引块,具有相同的参数配置,即均包含相同的Type,x,α和β参数。
所述步骤2中,所述的控制器模型主要由多个基本网络块所组成,一个基本网络块对应处理一个索引块组,每个基本网络块包含依次连接的六个时间步模块,六个时间步模块按顺序依次预测生成一个索引块组的六个参数;
每个时间步模块均由三层神经层连接组成,分别为嵌入层、LSTM层、 Softmax输出层依次连接构成;嵌入层由一层全连接层实现,负责将不同维度的输入向量映射为固定维度大小的输入向量,进而向LSTM层传递;LSTM层学习各个时间步模块之间的相关性;Softmax层预测当前时间步模块所对应的参数值;将上一时间步模块中Softmax层的输出作为当前时间步模块的输入;
控制器模型自顶向下地逐层生成索引架构各层的参数序列,并存储在多路搜索树中,并维护树型结构中的父子关系。
控制器模型是用于生成索引架构参数的强化学习模型,控制器模型的网络结构主要采用循环神经网络实现,并应用PPO强化学习方法进行更新。
所述步骤3包括:
步骤3-1,首先,创建表示树型结构之间的父子关系的指针,指针是树型结构中从父索引块指向子索引块组;
步骤3-2,其次,更新每个抽象索引块的键范围:
如果父索引块是一个有序索引块,则将父索引块的键范围进行平均划分,并分配给各个子索引块组;如果父索引块是一个无序索引块,则将所有子索引块组均与父索引块共享相同的键范围;
步骤3-3,最后建立各个索引块组:
将索引块组的键范围平均划分,并根据索引块组的参数生成y个具有相同参数配置的抽象索引块,再根据概率向量参数γ在索引块组内部的抽象索引块间创建跳远连接。
所述步骤4中,实体化过程主要分为三个步骤:
步骤4-1,更新抽象索引块的键范围:
在实体化过程中,为每个抽象索引块建立了一组[min,max]数据,min、max 分别代表抽象索引块的键范围内的实际最小键和实际最大键;当数据集D的所有数据加载完毕后,去除删减不存在的键,从而更新缩减抽象索引块的键范围;
步骤4-2,为无序索引块设置哈希表:
在数据集D的数据载入进无序索引块时,先建立哈希表;然后根据索引块组内部的抽象索引块内键的初始数目x,在无序索引块中建立x个子索引块组,即存在x个哈希存储桶;对于无序索引块的键范围中每个键k,按照哈希表被索引到无序索引块下一层的第i个子索引块组中,其中i=hash(k)%x,其中hash() 表示哈希表所使用的哈希函数;
步骤4-3,创建指向磁盘数据的指针:
在键k被索引到树型结构的最底层的抽象索引块时,创建一个指向键k在数据集中对应数据的磁盘偏移量的指针。
所述步骤5包括:
步骤5-1,使用实体化后的物理索引执行查询工作负载W,得到查询的总处理时延以及索引空间的利用率,反馈作为控制器模型的奖励,采用PPO强化学习方法对控制器模型的模型参数进行更新;
步骤5-2,不断重复步骤2~5进行循环迭代,下一次迭代中用更新后的控制器模型与索引构建器生成一个新的索引架构;循环迭代直到控制器模型收敛为止。
所述步骤6之后,还进行步骤7,当数据集的分布或工作负载的分布发生变化后,采用增量更新模型来对索引架构进行微调更新。
所述步骤7包括:
步骤7-1,增量更新模型的主体是构建一个性能预测网络G;
针对每个抽象索引块,输入性能预测模型G均进行以下处理:
性能预测模型G输入抽象索引块的参数配置,处理预测获得抽象索引块的执行时延,并作为抽象索引块的性能,然后进行判断:
如果xt-x0>ωx0,x0为上一次索引架构更新后抽象索引块的性能,xt表示抽象索引块在第t个时间时刻后的性能,ω为可调超参数,则抽象索引块被标记为异常索引块;
步骤7-2,增量更新模型以树型结构中自底向上的方式按照步骤7-1对每个抽象索引块进行处理,识别异常索引块:
当一个抽象索引块被识别为异常索引块时,则继续检查该抽象索引块的父索引块下的其他所有子索引块,进而判断;
如果父索引块的其他所有子索引块均为异常,则该抽象索引块的父索引块被标记为异常索引块;否则停止向上检查;
步骤7-3,对于异常索引块,调用控制器模型为异常索引块及其下的所有子索引块单独重复步骤2~5进行更新获得异常索引块及其下的所有子索引块的新参数配置;对于不是异常索引块的抽象索引块,均保留自身的参数配置。
本发明设计了一种通用抽象的多层树型索引架构,提出了一种基于神经网络的索引搜索框架,并提出了一种用于维护索引的增量更新模型,以支持逐渐更新的查询模式。给定数据集及其查询工作负载,该方法应用强化学习模型为其自动搜索和调优最佳索引架构及其参数。
本发明具有的有益效果是:
本发明方法可以自动为给定的数据集和工作负载设计索引架构,从而使得 DBA摆脱繁重的索引构建和调整工作。
相对于多种现有常用数据库索引,本发明所生成的混合索引架构可支持各种复杂应用场景,并实现更好的性能。此外,本发明可支持逐渐更新的查询模式,以适应数据分布与查询分布的缓慢变化。
附图说明
图1是本发明定义的通用索引架构图。
图2是本发明实施整体框架流程图。
图3是控制器模型网络架构图。
图4是逻辑索引到物理索引的实体化过程示例图。
图5是点查询的搜索过程示意图。
图6是范围查询的搜索过程示意图。
图7是索引架构在不同场景下的表现性能图。
具体实施方式
现结合具体实施和示例对本发明的技术方案作进一步说明。
图2描述了本发明的整体框架流程。如图2所示,本发明具体实施过程和工作原理如下:
步骤1,建立一种通用索引架构,图1展示了通用索引架构的一种示例。通用索引架构为非平衡的树型结构,非平衡的是指树型结构中叶节点所在的抽象索引块到根节点所在的抽象索引块的路径长度是不同的。树型结构的节点为抽象索引块,树型结构最上层的根节点为一个索引块组,树型结构的根节点作为第一层,树型结构中根节点下的每一层均由多个抽象索引块组成,抽象索引块分为用于范围查询的有序索引块和用于点查询的无序索引块,每个抽象索引块含有多个由循环神经网络进行调优的参数。
通用索引架构最底层的叶节点的抽象索引块将直接链接到数据集;使用通用索引架构进行查询时,将以自顶向下的方式,从最顶部的抽象索引块开始进行查询,直至到达最底层链接到数据集而获取到数据集中的对应数据。
具体实施中,数据集通常例如是图像数据集、文本数据集,但不限于此。
步骤1-A,抽象索引块分为有序索引块和无序索引块,有序索引块和无序索引块分别实体化为两种常用的现有索引架构,具体为:
对于有序索引块,表示为Io={So,F,[Lo,Uo),pto},其中So表示有序索引块内所有键的一个有序列表,[Lo,Uo)为有序索引块的键范围;F表示映射函数,映射函数F为一系列有序的键值对[(ki,vi)*],ki为第i个键,vi是指向树型结构中下一层对应抽象索引块的指针;指针pto指向与当前有序索引块右侧相邻的抽象索引块;有序索引块采用B+树节点实现。
对于无序索引块,表示为Iu={Su,H,[Lu,Uu),ptu},其中Su表示无序索引块内所有键的一个无序集合,[Lu,Uu)为无序索引块的键范围;H表示哈希函数,哈希函数H将键映射到对应的存储桶中,存储桶指向树型结构中下一层对应的抽象索引块;指针ptu指向与当前有序索引块右侧相邻的抽象索引块;无序索引块采用哈希实现。
右侧相邻的从左到右的顺序是针对同一层中而言,是按照循环神经网络的时间步的顺序。
步骤1-B,每一个抽象索引块包含的多个由循环神经网络调优的参数分别为:
(1)抽象索引块的类型Type;
(2)抽象索引块中键的初始数目x;
(3)判定抽象索引块为太满的键数目比例α;
(4)判定抽象索引块为太空的键数目比例β;
根据参数配置的情况将树型结构中位于同一层、连续相邻且具有相同参数的y个抽象索引块组成集合并形成作为一个长度为y的索引块组;上一层中的每一个抽象索引块与下一层中至少一个的x个索引块组之间存在父子关系,以上层的抽象索引块为父索引块,对应的下层索引块组为子索引块组。
一个索引块组内包含多个连续相邻且具有相同参数配置的抽象索引块,同一个索引块组内的各个抽象索引块负责连续的键范围并且共享相同的参数配置;
每一个索引块组的参数由内部的各个抽象索引块的参数和索引块组自身的参数组成,分别为以下六个参数:
(1)索引块组内部的抽象索引块的类型Type;
(2)索引块组内部的抽象索引块内键的初始数目x;
(3)判定索引块组内部的抽象索引块为太满的键数目比例α,太满时将发生抽象索引块的分离;
(4)判定索引块组内部的抽象索引块为太空的键数目比例β,太空时将发生抽象索引块的合并;
(5)索引块组内部包含的抽象索引块的总数目y;
(6)索引块组内部采用跳表设计,创建跳表中的跳远连接所采用的概率向量参数γ。
同一个索引块组内部的各个抽象索引块,具有相同的参数配置,即均包含相同的Type,x,α和β参数。
步骤2,针对用户给定所需处理的数据集D和工作负载W,控制器模型按照步骤1的通用索引架构生成一个初始的树型结构的索引架构的参数序列,控制器模型以自顶向下的方式逐层构建,每一层包含多个索引块组,控制器模型从左到右逐个为索引块组中的每个抽象索引块生成参数;控制器模型中包含了神经网络,神经网络输入上一个抽象索引块的参数,进而处理预测输出抽象索引块的参数;控制器模型是本发明中用于生成索引架构参数的强化学习模型,控制器模型的网络架构如图3所示。
所有索引块组的参数形成了索引架构的参数序列;,具体实施中,用多路搜索树来存储控制器模型所生成的索引架构的参数序列,进而输入到索引构建器。
步骤2中,控制器模型的网络架构如图3所示,控制器模型主要由多个基本网络块所组成,基本网络块的结构如图3左下角所示,一个基本网络块对应处理一个索引块组,一个基本网络块用于预测一个索引块组的六个参数;每个基本网络块包含依次连接的六个时间步模块,六个时间步模块按顺序依次预测生成一个索引块组的六个参数(Type,x,y,α,β和γ);每个时间步模块均由三层神经层连接组成,分别为嵌入层、LSTM层、Softmax输出层依次连接构成;嵌入层由一层全连接层实现,负责将不同维度的输入向量映射为固定维度大小的输入向量,进而向LSTM层传递;LSTM层学习各个时间步模块之间的相关性;Softmax层预测当前时间步模块所对应的参数值;将上一时间步模块中Softmax层的输出作为当前时间步模块的输入;LSTM层即为LSTM神经网络结构。
如图3所示,多个基本网络块链接在一起,以预测同一层中多个索引块组的参数。基本网络块的数量和索引块组的数量相同。
控制器模型自顶向下地逐层生成索引架构各层的参数序列,并存储在多路搜索树中,并维护树型结构中的父子关系。当完成了一层索引的生成预测后,控制器模型可继续向下启动新的一层。来自父索引块的Softmax层输出会被堆叠在一起,作为子索引块组的输入。
步骤3,索引构建器加载步骤2中所生成的索引架构的参数序列,在树型结构的索引架构中建立逻辑索引;通过逻辑索引会最终创建出索引架构的基本框架,但无法支持查询。图4的上半部分展示了一个具有逻辑索引的索引架构(为简化该图,省略了索引块组内跳远连接的细节)。具体为:
步骤3-1,首先,创建表示树型结构之间的父子关系的指针,指针是树型结构中从父索引块指向子索引块组;
步骤3-2,其次,更新每个抽象索引块的键范围:
如果父索引块是一个有序索引块,则将父索引块的键范围进行平均划分,并分配给各个子索引块组;如果父索引块是一个无序索引块,则将所有子索引块组均与父索引块共享相同的键范围;
步骤3-3,最后建立各个索引块组:
将索引块组的键范围平均划分,并根据索引块组的参数生成y个具有相同参数配置的抽象索引块,y为预设值,再根据概率向量参数γ在索引块组内部的抽象索引块间创建跳远连接。
示例:如图4上半部分,第一层的索引块组1的参数x被控制器模型设为2,意味着索引块组1内部的所有索引块均会产生两个子索引块组,例如索引块组1 的第一个索引块的键范围被等分成两部分,分别在第二层中由索引块组2和索引块组3负责,其键范围分别是[0,99]和[100,199]。其中索引块组2的参数类型 Type被设置为有序,参数y被设置为3,于是该索引块组内创建了三个有序索引块,并将键范围均匀划分为[0,33]、[34,66]和[67,99]。索引块组3的参数类型Type被设置为无序,参数y被设置为4,通过统一划分键范围[100,199]来创建四个无序索引块。由于无序索引块应用哈希函数将键映射到其子索引块组,故子索引块组与其父级共享相同的键范围。索引块组4和索引块组5都具有与其父索引块相同的键范围[100,124]。但是,索引块组4和索引块组5并不共享参数配置,其中索引块组4内创建了三个有序索引块,而索引块组5内创建了两个有序索引块。
步骤4,索引构建器将数据集D逐条扫描并流式加载到步骤3所构建的逻辑索引中去,并经过实体化过程形成物理索引。
从逻辑索引到物理索引的转化过程称为实体化,该物理索引支持点查询、范围查询、增删更新。图4的下半部分展示了上半部分逻辑索引实体化后形成的物理索引。具体为:
步骤4-1,更新抽象索引块的键范围:
在实体化过程中,为每个抽象索引块建立了一组[min,max]数据,min、max 分别代表抽象索引块的键范围内的实际最小键和实际最大键;当数据集D的所有数据加载完毕后,去除删减不存在的键,从而更新缩减抽象索引块的键范围;
步骤4-2,为无序索引块设置哈希表:
在数据集D的数据载入进无序索引块时,先建立哈希表;然后根据索引块组内部的抽象索引块内键的初始数目x,在无序索引块中建立x个子索引块组,即存在x个哈希存储桶。对于无序索引块的键范围中每个键k,按照哈希表被索引到无序索引块下一层的第i个子索引块组中,其中i=hash(k)%x,其中hash() 表示哈希表所使用的哈希函数;
步骤4-3,创建指向磁盘数据的指针:
在键k被索引到树型结构的最底层的抽象索引块时,创建一个指向键k在数据集中对应数据的磁盘偏移量的指针。磁盘偏移量代表了数据在数据集中的位置。
示例:如图4中下半部分是上半部分的逻辑索引经过实体化后形成的物理索引。显然可以发现每个抽象索引块的键范围缩小了,例如,索引块组1中各个抽象索引块的键范围从[0,199],[200,399],[400,599],[600,799]缩减为[0,198],[212,352],[429,579],[654,760]。此外,哈希表也已建立,图中显式地展示了索引块组3的第三个无序索引块对应的哈希表(在实际实现过程中,不需要显式地维护哈希表,只需要知道所使用的哈希函数即可)。最后,在最底层创建了键到其磁盘偏移量的指针链接。图中索引块组2和索引块组6 中的空白节点表示该抽象索引块为空,因为数据载入后其键范围不包含任何数据集中的键。
步骤5,使用步骤4所生成的物理索引执行给定工作负载W,得到执行时延以及空间利用率,将执行时延以及空间利用率反馈到采用强化学习方法对控制器模型的循环神经网络进行更新,使得控制器模型在下一轮迭代中生成更优的索引架构;具体为:
步骤5-1,使用实体化后的物理索引执行查询工作负载W,得到查询的总处理时延以及索引空间的利用率,反馈作为控制器模型的奖励,采用PPO强化学习方法对控制器模型的模型参数进行更新,即循环神经网络的参数进行更新;
实体化后的物理索引可用于执行查询,包括点查询和范围查询。
示例:如图5中的点查询,查找键167,其搜索过程如下:首先检查索引块组1,由于它的第一个索引块的第二段键范围中包含167,故将进一步查找到其第二个子索引块组,即索引块组3。在索引块组3中,第一个索引块的键范围不包含指定键167,故基于跳远连接路由到第三个无序索引块。然后,应用哈希函数检索到下层中对应的索引块组7。由于在索引块组7中未设置跳远连接,故逐个扫描抽象索引块,直到找到键所在的对应抽象索引块。
示例:如图6中的范围查询,查找[118,124]范围内的键。查找方式与点查询类似,主要区别在于无序索引块的处理。当查询到无序索引块组3时,查询范围与其第一个无序索引块的键范围发生重叠,进而继续向下查找。由于哈希函数会将键乱序地分配给所有子索引块组(索引块组4和索引块组5),因此,范围查询将需要同时查询这两个索引块组。在每个索引块组中,通过跳远连接来找到查询范围的最小搜索键118,然后扫描后续的抽象索引块,直到找到最大搜索键124,该过程类似B+树的范围查找。
步骤5-2,如图2总体框架流程所示,不断重复步骤2~5进行循环迭代,下一次迭代中用更新后的控制器模型与索引构建器生成一个新的索引架构;循环迭代直到控制器模型收敛为止。最终,控制器模型为给定数据集D和工作负载 W返回最优的索引架构。
步骤6,不断重复步骤2~5进行循环迭代进行,直到控制器模型中的循环神经网络收敛,则停止循环迭代,以最后获得的索引架构作为结果。
具体实施例中,采用公开数据集osmc64,分别在四种不同类型的工作负载上进行测试,并与现有的常用索引(B+Tree、SkipList、ART、Bwtree、Masstree、 RMI)进行对比实验。分别为如下四种类型的工作负载:
工作负载W1:包含点查询操作;
工作负载W2:包含范围查询操作;
工作负载W3:包含点查询操作和插入操作;
工作负载W4:包含点查询操作、插入操作和范围查询操作。
实验结果如图7所示,本方法所设计的索引架构(表示为NIS)在不同场景下的表现均优于其他索引的性能,这表明该混合的索引设计可用于支持各种应用场景并搜索得到最佳索引结构与参数配置。
对需要执行的查询输入结果的索引架构中进行查询,以到达最底层链接到数据集中的对应数据作为查询结果返回。
步骤7,当数据集的分布或工作负载的分布发生变化后,采用增量更新模型来对索引架构进行微调更新,以维护索引使其保持优异性能,解决数据集与工作负载的分布发生缓慢变化的问题。具体为:
步骤7-1,增量更新模型的主体是构建一个性能预测网络G;
针对每个抽象索引块,输入性能预测模型G均进行以下处理:
性能预测模型G输入抽象索引块的参数配置,处理预测获得抽象索引块的执行时延,并作为抽象索引块的性能,然后进行判断:
如果xt-x0>ωx0,x0为上一次索引架构更新后抽象索引块的性能,xt表示抽象索引块在第t个时间时刻后的性能,ω为可调超参数,用于权衡索引调整开销与查询时延,则抽象索引块被标记为异常索引块;
性能预测网络采用树型LSTM网络架构,并与控制器模型同步进行训练。训练完毕后,性能预测网络将用于识别性能异常的抽象索引块。在查询执行期间,性能预测网络为各个抽象索引块定期进行性能预测。
步骤7-2,增量更新模型以树型结构中自底向上的方式按照步骤7-1对每个抽象索引块进行处理,识别异常索引块:
当一个抽象索引块被识别为异常索引块时,则继续检查该抽象索引块的父索引块下的其他所有子索引块,进而判断;
如果父索引块的其他所有子索引块均为异常,则该抽象索引块的父索引块被标记为异常索引块;否则停止向上检查;
步骤7-3,对于异常索引块,调用控制器模型为异常索引块及其下的所有子索引块单独重复步骤2-5进行更新获得异常索引块及其下的所有子索引块的新参数配置;对于不是异常索引块的抽象索引块,均保留自身的参数配置。
Claims (8)
1.一种基于强化学习的数据库索引生成方法,其特征在于:方法步骤如下:
步骤1,建立一种通用索引架构,通用索引架构为树型结构,树型结构的节点为抽象索引块,树型结构的根节点为一个抽象索引块,树型结构中根节点下的每一层均由多个抽象索引块组成,抽象索引块分为适用于范围查询的有序索引块和适用于点查询的无序索引块,每个抽象索引块含有多个由循环神经网络进行调优的参数;根据参数配置的情况将树型结构中位于同一层、连续相邻且具有相同参数的y个抽象索引块组成集合并形成作为一个长度为y的索引块组;上一层中的每一个抽象索引块与下一层中的x个索引块组之间存在父子关系,以上层的抽象索引块为父索引块,对应的下层索引块组为子索引块组;通用索引架构最底层的抽象索引块将直接链接到数据集;
步骤2,针对所需处理的数据集D和工作负载W,控制器模型按照步骤1的通用索引架构以自顶向下的方式逐层构建一个树型结构的索引架构的参数序列,,索引架构的每一层包含多个索引块组,控制器模型逐个为索引块组生成参数;控制器模型内含循环神经网络,循环神经网络输入上一个抽象索引块的参数,进而处理预测输出抽象索引块的参数;各层所有索引块组的参数形成了索引架构的参数序列;
步骤3,索引构建器加载步骤2中所生成的索引架构的参数序列,在树型结构的索引架构中建立逻辑索引;
步骤4,索引构建器将数据集D逐条扫描并流式加载到步骤3所构建的逻辑索引中去,并经过实体化过程形成物理索引;
步骤5,使用步骤4所生成的物理索引执行给定工作负载W,得到执行时延以及空间利用率,将执行时延以及空间利用率反馈到采用强化学习方法作为强化学习方法的奖励对控制器模型的循环神经网络进行更新;
步骤6,不断重复步骤2~5进行循环迭代,直到控制器模型收敛,则停止循环迭代,以最后获得的索引架构作为结果。
2.根据权利要求1所述的一种基于强化学习的数据库索引生成方法,其特征在于:所述步骤1包括:
步骤1-A,抽象索引块分为有序索引块和无序索引块,具体为:
对于有序索引块,表示为Io={So,F,[Lo,Uo),pto},其中So表示有序索引块内所有键的一个有序列表,[Lo,Uo)为有序索引块的键范围;F表示映射函数,映射函数F为一系列有序的键值对[(ki,vi)*],ki为第i个键,vi是指向树型结构中下一层对应抽象索引块的指针;指针pto指向与当前有序索引块右侧相邻的抽象索引块;
对于无序索引块,表示为Iu={Su,H,[Lu,Uu),ptu},其中Su表示无序索引块内所有键的一个无序集合,[Lu,Uu)为无序索引块的键范围;H表示哈希函数,指针ptu指向与当前有序索引块右侧相邻的抽象索引块;
步骤1-B,每一个抽象索引块包含的多个由循环神经网络调优的参数分别为:
(1)抽象索引块的类型Type;
(2)抽象索引块中键的初始数目x;
(3)判定抽象索引块为太满的键数目比例α;
(4)判定抽象索引块为太空的键数目比例β;
一个索引块组内包含多个连续相邻且具有相同参数配置的抽象索引块;
每一个索引块组的参数由内部的各个抽象索引块的参数和索引块组自身的参数组成,分别为以下六个参数:
(1)索引块组内部的抽象索引块的类型Type;
(2)索引块组内部的抽象索引块内键的初始数目x;
(3)判定索引块组内部的抽象索引块为太满的键数目比例α;
(4)判定索引块组内部的抽象索引块为太空的键数目比例β;
(5)索引块组内部包含的抽象索引块的总数目y;
(6)索引块组内部采用跳表设计,创建跳表中的跳远连接所采用的概率向量参数γ。
3.根据权利要求1所述的一种基于强化学习的数据库索引生成方法,其特征在于:所述步骤2中,所述的控制器模型主要由多个基本网络块所组成,一个基本网络块对应处理一个索引块组,每个基本网络块包含依次连接的六个时间步模块,六个时间步模块按顺序依次预测生成一个索引块组的六个参数;每个时间步模块均由三层神经层连接组成,分别为嵌入层、LSTM层、Softmax输出层依次连接构成;嵌入层由一层全连接层实现,负责将不同维度的输入向量映射为固定维度大小的输入向量,进而向LSTM层传递;LSTM层学习各个时间步模块之间的相关性;Softmax层预测当前时间步模块所对应的参数值;将上一时间步模块中Softmax层的输出作为当前时间步模块的输入;控制器模型自顶向下地逐层生成索引架构各层的参数序列,并存储在多路搜索树中,并维护树型结构中的父子关系。
4.根据权利要求1所述的一种基于强化学习的数据库索引生成方法,其特征在于:所述步骤3包括:
步骤3-1,首先,创建表示树型结构之间的父子关系的指针,指针是树型结构中从父索引块指向子索引块组;
步骤3-2,其次,更新每个抽象索引块的键范围:
如果父索引块是一个有序索引块,则将父索引块的键范围进行平均划分,并分配给各个子索引块组;如果父索引块是一个无序索引块,则将所有子索引块组均与父索引块共享相同的键范围;
步骤3-3,最后建立各个索引块组:
将索引块组的键范围平均划分,并根据索引块组的参数生成y个具有相同参数配置的抽象索引块,再根据概率向量参数γ在索引块组内部的抽象索引块间创建跳远连接。
5.根据权利要求1所述的一种基于强化学习的数据库索引生成方法,其特征在于:所述步骤4中,实体化过程主要分为三个步骤:
步骤4-1,更新抽象索引块的键范围:
在实体化过程中,为每个抽象索引块建立了一组[min,max]数据,min、max分别代表抽象索引块的键范围内的实际最小键和实际最大键;当数据集D的所有数据加载完毕后,去除删减不存在的键,从而更新缩减抽象索引块的键范围;
步骤4-2,为无序索引块设置哈希表:
在数据集D的数据载入进无序索引块时,先建立哈希表;然后根据索引块组内部的抽象索引块内键的初始数目x,在无序索引块中建立x个子索引块组,即存在x个哈希存储桶;对于无序索引块的键范围中每个键k,按照哈希表被索引到无序索引块下一层的第i个子索引块组中,其中i=hash(k)%x,其中hash()表示哈希表所使用的哈希函数;
步骤4-3,创建指向磁盘数据的指针:
在键k被索引到树型结构的最底层的抽象索引块时,创建一个指向键k在数据集中对应数据的磁盘偏移量的指针。
6.根据权利要求1所述的一种基于强化学习的数据库索引生成方法,其特征在于:所述步骤5包括:
步骤5-1,使用实体化后的物理索引执行查询工作负载W,得到查询的总处理时延以及索引空间的利用率,反馈作为控制器模型的奖励,采用PPO强化学习方法对控制器模型的模型参数进行更新;
步骤5-2,不断重复步骤2~5进行循环迭代,下一次迭代中用更新后的控制器模型与索引构建器生成一个新的索引架构;循环迭代直到控制器模型收敛为止。
7.根据权利要求1所述的一种基于强化学习的数据库索引生成方法,其特征在于:所述步骤6之后,还进行步骤7,当数据集的分布或工作负载的分布发生变化后,采用增量更新模型来对索引架构进行微调更新。
8.根据权利要求7所述的一种基于强化学习的数据库索引生成方法,其特征在于:所述步骤7包括:
步骤7-1,增量更新模型的主体是构建一个性能预测网络G;
针对每个抽象索引块,输入性能预测模型G均进行以下处理:
性能预测模型G输入抽象索引块的参数配置,处理预测获得抽象索引块的执行时延,并作为抽象索引块的性能,然后进行判断:
如果xt-x0>ωx0,x0为上一次索引架构更新后抽象索引块的性能,xt表示抽象索引块在第t个时间时刻后的性能,ω为可调超参数,则抽象索引块被标记为异常索引块;
步骤7-2,增量更新模型以树型结构中自底向上的方式按照步骤7-1对每个抽象索引块进行处理,识别异常索引块:
当一个抽象索引块被识别为异常索引块时,则继续检查该抽象索引块的父索引块下的其他所有子索引块,进而判断;
如果父索引块的其他所有子索引块均为异常,则该抽象索引块的父索引块被标记为异常索引块;否则停止向上检查;
步骤7-3,对于异常索引块,调用控制器模型为异常索引块及其下的所有子索引块单独重复步骤2~5进行更新获得异常索引块及其下的所有子索引块的新参数配置;对于不是异常索引块的抽象索引块,均保留自身的参数配置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110301421.8A CN113157694A (zh) | 2021-03-22 | 2021-03-22 | 一种基于强化学习的数据库索引生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110301421.8A CN113157694A (zh) | 2021-03-22 | 2021-03-22 | 一种基于强化学习的数据库索引生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113157694A true CN113157694A (zh) | 2021-07-23 |
Family
ID=76887786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110301421.8A Pending CN113157694A (zh) | 2021-03-22 | 2021-03-22 | 一种基于强化学习的数据库索引生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113157694A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114048216A (zh) * | 2022-01-12 | 2022-02-15 | 中兴通讯股份有限公司 | 索引选择方法、电子设备及存储介质 |
CN114328669A (zh) * | 2021-12-30 | 2022-04-12 | 北京诺司时空科技有限公司 | 基于深度学习的自动化时序数据库索引推荐方法、存储介质及设备 |
CN115017130A (zh) * | 2022-01-19 | 2022-09-06 | 昆明理工大学 | 基于深度强化学习的多属性索引选择 |
US11954345B2 (en) | 2021-12-03 | 2024-04-09 | Samsung Electronics Co., Ltd. | Two-level indexing for key-value persistent storage device |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083601A (zh) * | 2019-04-04 | 2019-08-02 | 中国科学院计算技术研究所 | 面向键值存储系统的索引树构建方法及系统 |
CN112035586A (zh) * | 2020-08-28 | 2020-12-04 | 南京航空航天大学 | 基于可扩展学习索引的空间范围查询方法 |
-
2021
- 2021-03-22 CN CN202110301421.8A patent/CN113157694A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083601A (zh) * | 2019-04-04 | 2019-08-02 | 中国科学院计算技术研究所 | 面向键值存储系统的索引树构建方法及系统 |
CN112035586A (zh) * | 2020-08-28 | 2020-12-04 | 南京航空航天大学 | 基于可扩展学习索引的空间范围查询方法 |
Non-Patent Citations (1)
Title |
---|
SAI WU等: "Progressive Neural Index Search for Database System", 《COMPUTER SCIENCE》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11954345B2 (en) | 2021-12-03 | 2024-04-09 | Samsung Electronics Co., Ltd. | Two-level indexing for key-value persistent storage device |
CN114328669A (zh) * | 2021-12-30 | 2022-04-12 | 北京诺司时空科技有限公司 | 基于深度学习的自动化时序数据库索引推荐方法、存储介质及设备 |
CN114048216A (zh) * | 2022-01-12 | 2022-02-15 | 中兴通讯股份有限公司 | 索引选择方法、电子设备及存储介质 |
CN115017130A (zh) * | 2022-01-19 | 2022-09-06 | 昆明理工大学 | 基于深度强化学习的多属性索引选择 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113157694A (zh) | 一种基于强化学习的数据库索引生成方法 | |
Liu et al. | A task scheduling algorithm based on classification mining in fog computing environment | |
Rahimian et al. | Ja-be-ja: A distributed algorithm for balanced graph partitioning | |
CN112398899B (zh) | 一种面向边缘云系统的软件微服务组合优化方法 | |
Zhao et al. | Dynamic stale synchronous parallel distributed training for deep learning | |
EP2212806B1 (en) | Allocation of resources for concurrent query execution via adaptive segmentation | |
CN110147377A (zh) | 大规模空间数据环境下基于二级索引的通用查询算法 | |
Schlag et al. | Scalable edge partitioning | |
CN101739398A (zh) | 分布式数据库多连接查询优化算法 | |
CN107016077A (zh) | 一种面向Web服务组合的优化方法 | |
CN102945283A (zh) | 一种语义Web服务组合方法 | |
US8434075B1 (en) | Branching optimization in a multi-database system | |
CN111324429B (zh) | 一种基于多代血统参考距离的微服务组合调度方法 | |
CN113791913B (zh) | 一种类脑计算机操作系统的任务迁移方法 | |
CN111414961A (zh) | 一种基于任务并行的细粒度分布式深度森林训练方法 | |
Zhang et al. | Reinforcement learning with actor-critic for knowledge graph reasoning | |
US20120265751A1 (en) | Optimizing the execution of a query in a multi-database system | |
Valavala et al. | Automatic database index tuning using machine learning | |
CN114490799A (zh) | 单个图的频繁子图挖掘方法及装置 | |
Laili et al. | Parallel transfer evolution algorithm | |
CN111107604B (zh) | 无人平台信息感知网络的快速优化方法和装置 | |
CN109918410B (zh) | 基于Spark平台的分布式大数据函数依赖发现方法 | |
Bai et al. | Skyline-join query processing in distributed databases | |
Mohan et al. | Graph matching algorithm for task assignment problem | |
Das et al. | Challenges and approaches for large graph analysis using map/reduce paradigm |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20210723 |