基于学习索引的LSM树层设计方法及系统
文献发布时间:2024-04-18 20:00:50
技术领域
本发明涉及学习索引领域,具体地,涉及一种基于学习索引的LSM树层设计方法及系统。
背景技术
学习索引是一种使用机器学习来优化查询性能的数据结构。与使用固定规则的传统数据库索引不同,学习索引根据传入查询不断调整其结构和优化策略。这允许它动态调整自身,以便在查询工作负载随时间变化时提供更快的查找和更高的效率。由于同一层中含有许多的键值对,因此在层中搜索键将变得非常耗时。
Bourbon是一个使用学习索引来加速文件中的键搜索的LSM树。具体来说,Bourbon使用贪心PLR(分段线性表示)算法为每个文件建立模型(称为文件模型),其中键为横坐标,对应键值对在文件中的位置为纵坐标。因此,一个文件中的所有键值对在直角坐标系中形成了许多离散分布的数据点。用这些数据点以及给定的误差值δ进行训练,以获得由若干线段组成的文件模型,这些线段都单调递增且定义域首尾相连。
为了找到键的位置,Bourbon首先使用二分查找在文件模型中找到具体的线段,然后通过线段的参数计算位置(即y=kx+b,其中x是键,y是键值对在文件中的位置)。如果键值对存在,则一定在[y-δ,y+δ]的范围内。
对于L
但是,这对于键值对数量很多的层来说是不够的,因为定位文件的二分查找(即第一次二分查找)也需要相当多的时间。因此需要提出一种新的学习索引模型,能够消除两次二分查找的时间,直接定位要查找的键在层中的位置。
专利文献CN116382588A公开了一种基于学习索引的LSM树存储引擎读放大问题优化方法,利用键值分离方法改进SSTable文件记录的排列组织方式,使其能够应用于学习索引,进而将SSTable文件的稀疏索引替换为SSTable学习索引,并利用层级学习索引加速SSTable元数据的检索;在两个学习索引中利用误差有界的PLR模型作为底层模型,使用递归结构表示复杂的数据分布。但该发明不是基于LSM树且依赖学习索引模型加速查找的键值存储中引入针对层级模型的部分训练方法。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于学习索引的LSM树层设计方法及系统。
根据本发明提供的一种基于学习索引的LSM树层设计方法,包括:
步骤S1:将多个文件模型拼接为一个层级模型,对于每一层维护一个在内存中的层级模型;
步骤S2:使用基数表定位段位置;
步骤S3:在每次合并完成后,通过替换层级模型中的部分文件模型,加速训练层级模型的过程。
优选地,在所述步骤S1中:
一个层级模型由多个文件模型经过修改后拼接而成,文件模型以文件中能容纳的最大键值对数量对齐后,再拼接为一个层级模型;
max_num_key为文件中能容纳的最大键值对数量,将(i-1)*max_num_key添加到第i个文件模型中每个线段的截距上;
在层中查找一个键时,如果层级模型能够查找,将该键输入层级模型中,得到该键在整层中的位置pos,由于位置pos与max_num_key对齐,因此pos/max_num_key为包含该键的文件在层中的索引,pos%max_num_key为该键在文件中的索引,根据这两个索引将要查找的键对应的值从文件中读出来。
优选地,在所述步骤S2中:
在层级模型之上建立一个基数表,在查找层级模型之前先查找基数表,定位要查找的段在层级模型中的位置,其中,基数表的大小是能够调整的参数,基数表通过键的前缀定位需要查找段存在的区间,基数表越大,前缀划分越细,定位到的区间更小;
基于基数表的层级模型由一个基数表和一个层级模型组成,基数表维护从每个固定长度键的前缀到第一个可能包含具有该前缀的最小键的段的映射;要搜索键,首先使用键的前缀从基数表中获取两个段,如果目标键存在,则其存储在两个段之间的某一个段中,当一个新的PLR段被生成时,通过从新段的下界前缀到指向该段的指针的映射更新基数表。
优选地,在所述步骤S3中:
受合并影响的有两层,对于上层的层级模型,删除其中参与合并的文件对应的文件模型;对于下层的层级模型,需要删除其中旧的文件模型,并加入新生成的文件模型;对于受影响的两个层级模型,都需要保证其中的所有文件模型以文件中能容纳的最大键值对数量对齐。
优选地,当发生一次合并,导致L
对于L
对于L
根据本发明提供的一种基于学习索引的LSM树层设计系统,包括:
模块M1:将多个文件模型拼接为一个层级模型,对于每一层维护一个在内存中的层级模型;
模块M2:使用基数表定位段位置;
模块M3:在每次合并完成后,通过替换层级模型中的部分文件模型,加速训练层级模型的过程。
优选地,在所述模块M1中:
一个层级模型由多个文件模型经过修改后拼接而成,文件模型以文件中能容纳的最大键值对数量对齐后,再拼接为一个层级模型;
max_num_key为文件中能容纳的最大键值对数量,将(i-1)*max_num_key添加到第i个文件模型中每个线段的截距上;
在层中查找一个键时,如果层级模型能够查找,将该键输入层级模型中,得到该键在整层中的位置pos,由于位置pos与max_num_key对齐,因此pos/max_num_key为包含该键的文件在层中的索引,pos%max_num_key为该键在文件中的索引,根据这两个索引将要查找的键对应的值从文件中读出来。
优选地,在所述模块M2中:
在层级模型之上建立一个基数表,在查找层级模型之前先查找基数表,定位要查找的段在层级模型中的位置,其中,基数表的大小是能够调整的参数,基数表通过键的前缀定位需要查找段存在的区间,基数表越大,前缀划分越细,定位到的区间更小;
基于基数表的层级模型由一个基数表和一个层级模型组成,基数表维护从每个固定长度键的前缀到第一个可能包含具有该前缀的最小键的段的映射;要搜索键,首先使用键的前缀从基数表中获取两个段,如果目标键存在,则其存储在两个段之间的某一个段中,当一个新的PLR段被生成时,通过从新段的下界前缀到指向该段的指针的映射更新基数表。
优选地,在所述模块M3中:
受合并影响的有两层,对于上层的层级模型,删除其中参与合并的文件对应的文件模型;对于下层的层级模型,需要删除其中旧的文件模型,并加入新生成的文件模型;对于受影响的两个层级模型,都需要保证其中的所有文件模型以文件中能容纳的最大键值对数量对齐。
优选地,当发生一次合并,导致L
对于L
对于L
与现有技术相比,本发明具有如下的有益效果:
本发明在基于LSM树且依赖学习索引模型加速查找的键值存储中引入了针对层级模型的部分训练方法,不仅提出了一种查找速度比文件模型更快的层级模型,还提出了一种加快层级模型训练速度的部分训练方法,在一定程度上加快了在LSM树中的查找。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明中由文件模型组成的层级模型的示意图;
图2为本发明中基于基数表的层级模型的示意图;
图3为本发明中部分训练方法对L
图4为本发明中部分训练方法对L
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
实施例1:
本发明涉及基于LSM树的键值存储领域以及机器学习中的学习索引领域,本发明提供了一种基于学习索引的LSM树层设计方法,包括:一、一种全新的LSM树层设计方法,使用多个文件模型组成一个层级模型,并作为一个内存组件,以加速在层中的查找;二、一种基于基数表的层级模型,使用基数表加速在层级模型中定位具体段的过程;三、一种针对层级模型的部分训练方法,能够避免重新训练整个层级模型,而只需重新训练其中的某一部分,极大程度上加速层级模型的训练。本发明设计了一种崭新的LSM树层的组织方式以及一种加速层级模型训练的部分训练方法,能够在保证正确性的前提下,提高层级模型的训练速度,使得层级模型在基于LSM树的键值存储中使能成为可能。
根据本发明提供的一种基于学习索引的LSM树层设计方法,如图1-图4所示,包括:
步骤S1:将多个文件模型拼接为一个层级模型,对于每一层维护一个在内存中的层级模型;
具体地,在所述步骤S1中:
一个层级模型由多个文件模型经过修改后拼接而成,文件模型以文件中能容纳的最大键值对数量对齐后,再拼接为一个层级模型;
max_num_key为文件中能容纳的最大键值对数量,将(i-1)*max_num_key添加到第i个文件模型中每个线段的截距上;
在层中查找一个键时,如果层级模型能够查找,将该键输入层级模型中,得到该键在整层中的位置pos,由于位置pos与max_num_key对齐,因此pos/max_num_key为包含该键的文件在层中的索引,pos%max_num_key为该键在文件中的索引,根据这两个索引将要查找的键对应的值从文件中读出来。
步骤S2:使用基数表定位段位置;
具体地,在所述步骤S2中:
在层级模型之上建立一个基数表,在查找层级模型之前先查找基数表,定位要查找的段在层级模型中的位置,其中,基数表的大小是能够调整的参数,基数表通过键的前缀定位需要查找段存在的区间,基数表越大,前缀划分越细,定位到的区间更小;
基于基数表的层级模型由一个基数表和一个层级模型组成,基数表维护从每个固定长度键的前缀到第一个可能包含具有该前缀的最小键的段的映射;要搜索键,首先使用键的前缀从基数表中获取两个段,如果目标键存在,则其存储在两个段之间的某一个段中,当一个新的PLR段被生成时,通过从新段的下界前缀到指向该段的指针的映射更新基数表。
步骤S3:在每次合并完成后,通过替换层级模型中的部分文件模型,加速训练层级模型的过程。
具体地,在所述步骤S3中:
受合并影响的有两层,对于上层的层级模型,删除其中参与合并的文件对应的文件模型;对于下层的层级模型,需要删除其中旧的文件模型,并加入新生成的文件模型;对于受影响的两个层级模型,都需要保证其中的所有文件模型以文件中能容纳的最大键值对数量对齐。
具体地,当发生一次合并,导致L
对于L
对于L
实施例2:
实施例2为实施例1的优选例,以更为具体地对本发明进行说明。
本发明还提供一种基于学习索引的LSM树层设计系统,所述基于学习索引的LSM树层设计系统可以通过执行所述基于学习索引的LSM树层设计方法的流程步骤予以实现,即本领域技术人员可以将所述基于学习索引的LSM树层设计方法理解为所述基于学习索引的LSM树层设计系统的优选实施方式。
根据本发明提供的一种基于学习索引的LSM树层设计系统,包括:
模块M1:将多个文件模型拼接为一个层级模型,对于每一层维护一个在内存中的层级模型;
具体地,在所述模块M1中:
一个层级模型由多个文件模型经过修改后拼接而成,文件模型以文件中能容纳的最大键值对数量对齐后,再拼接为一个层级模型;
max_num_key为文件中能容纳的最大键值对数量,将(i-1)*max_num_key添加到第i个文件模型中每个线段的截距上;
在层中查找一个键时,如果层级模型能够查找,将该键输入层级模型中,得到该键在整层中的位置pos,由于位置pos与max_num_key对齐,因此pos/max_num_key为包含该键的文件在层中的索引,pos%max_num_key为该键在文件中的索引,根据这两个索引将要查找的键对应的值从文件中读出来。
模块M2:使用基数表定位段位置;
具体地,在所述模块M2中:
在层级模型之上建立一个基数表,在查找层级模型之前先查找基数表,定位要查找的段在层级模型中的位置,其中,基数表的大小是能够调整的参数,基数表通过键的前缀定位需要查找段存在的区间,基数表越大,前缀划分越细,定位到的区间更小;
基于基数表的层级模型由一个基数表和一个层级模型组成,基数表维护从每个固定长度键的前缀到第一个可能包含具有该前缀的最小键的段的映射;要搜索键,首先使用键的前缀从基数表中获取两个段,如果目标键存在,则其存储在两个段之间的某一个段中,当一个新的PLR段被生成时,通过从新段的下界前缀到指向该段的指针的映射更新基数表。
模块M3:在每次合并完成后,通过替换层级模型中的部分文件模型,加速训练层级模型的过程。
具体地,在所述模块M3中:
受合并影响的有两层,对于上层的层级模型,删除其中参与合并的文件对应的文件模型;对于下层的层级模型,需要删除其中旧的文件模型,并加入新生成的文件模型;对于受影响的两个层级模型,都需要保证其中的所有文件模型以文件中能容纳的最大键值对数量对齐。
具体地,当发生一次合并,导致L
对于L
对于L
实施例3:
实施例3为实施例1的优选例,以更为具体地对本发明进行说明。
一种基于学习索引的LSM树层设计方法,包括:
LSM树层设计方法:由于文件模型先于层级模型完成训练,为了节省CPU时间,可以将多个文件模型拼接为一个层级模型,对于每一层维护一个在内存中的层级模型,以进一步加快在层中的查找;
基于基数表的层级模型:层级模型中段的数量很多,二分查找不够快,因此提出使用基数表快速定位段位置;使用基数表加快在层级模型中定位段位置的速度,省去在层级模型中二分定位段位置的耗时;
针对层级模型的部分训练方法:基于新的层级模型组织方式,在每次合并完成后,通过修改层级模型中的部分文件模型来加速训练层级模型的过程;由于重新训练层级模型非常耗时,因此基于新的层级模型组织方式,提出了一种只需改变层级模型中一小部分的训练方法,大大加快训练速度。
只是简单地将文件模型拼接成一个大的层级模型是不行的,会导致查找不到要寻找的键值对,需要将所有文件模型以文件中能容纳的最大键值对数量对齐。
文件模型要以文件中能容纳的最大键值对数量对齐后,再拼接为一个层级模型,以保证层级模型的正确性。
通过在层级模型之上建立一个基数表,可以在查找层级模型之前先查找基数表,快速定位要查找的段在层级模型中的位置,其中,基数表的大小是一个可以调整的参数,基数表越大,定位到的段越精确,同时带来的内存开销也会更大。
基数表通过键的前缀快速定位要查找段存在的区间,基数表越大,前缀划分越细,定位到的区间更小。
受合并影响的有两层,对于上层的层级模型来说,只需删除其中参与合并的文件对应的文件模型即可,而对于下层的层级模型来说,不仅需要删除其中旧的文件模型,还要加入新生成的文件模型,并且对于受影响的两个层级模型来说,都需要保证其中的所有文件模型以文件中能容纳的最大键值对数量对齐。
该部分训练方法依赖于之前提出的层级模型组织方式。对于受合并影响的两层,两者的层级模型都要进行部分训练,且训练方式不同。
实施例4:
实施例4为实施例1的优选例,以更为具体地对本发明进行说明。
本发明提供了一种基于学习索引的LSM树层设计方法,包括以下三个方面(为了简化描述,在接下来的描述中用max_num_key代表文件中能容纳的最大键值对数量):
一、如图1所示,每个文件模型被视为层级模型的一部分,并通过拼接一层中的所有文件模型来构建层级模型。由于文件模型的输出是要查找的键在文件中的位置,因此简单的拼接显然会导致错误。需要将每个文件模型与max_num_key对齐,以确保拼接后层级模型的正确性。换句话说,将(i-1)*max_num_key添加到第i个文件模型中每个线段的截距(即y=kx+b中的b)上。
在层中查找一个键时,如果层级模型可以查找,则将该键输入层级模型中,得到该键在整层中的位置pos,由于该位置是与max_num_key对齐的,因此pos/max_num_key为包含该键的文件在层中的索引,pos%max_num_key为该键在文件中的索引,根据这两个索引即可将要查找的键对应的值从文件中读出来。
二、如图2所示,基于基数表的层级模型由一个基数表和一个层级模型组成。基数表维护从每个固定长度键的前缀到第一个可能包含具有该前缀的最小键的段的映射。要搜索键,首先使用键的前缀从基数表中获取两个段。如果目标键存在,则其一定存储在两个段之间的某一个段中。当一个新的PLR段被生成时,需要通过从新段的下界前缀到指向该段的指针的映射来更新基数表。基数表避免了对一层中所有段的二分查找,大大减少了定位段的时间,从而有效地提高了在层级模型中的查找速度。
三、当发生一次合并,导致L
1、对于L
2、对于L
实施例5:
实施例5为实施例1的优选例,以更为具体地对本发明进行说明。
本发明虽然是在基于LSM树的键值存储中实现的,但是其思想也可以应用于其他应用场景。例如,对于学习索引在数据库场景中的应用,现有研究通常采用RMI模型。类似LSM树,RMI模型也是一个多层结构,每层由若干个学习索引模型组成,在查找时,将从上到下依次检索层中对应的学习索引模型,每次检索都会缩减要查找的键范围,直到最后一层定位到一个很小的键范围,再去其中查找。
但是,RMI模型有一些很明显的缺陷,例如不支持更新、需要检索多个学习索引模型等等。下面将展示如何将本发明的思想应用于RMI模型:
步骤S1:只保留RMI模型中的最后一层,将层中的多个学习索引模型拼接为一个层级模型;
具体地,在所述步骤S1中:
一个层级模型由多个学习索引模型经过修改后拼接而成,学习索引模型以学习索引模型能够覆盖的最大键值对数量对齐后,再拼接为一个层级模型;
max_num_key为学习索引模型能够覆盖的最大键值对数量,将(i-1)*max_num_key添加到第i个学习索引模型中每个线段的截距上;
在层中查找一个键时,如果层级模型能够查找,将该键输入层级模型中,得到该键在整层中的位置pos,由于位置pos与max_num_key对齐,因此pos%max_num_key即为该键的索引,根据该索引以及对应的误差范围可以定位要查找键的具体位置。
步骤S2:使用基数表定位段位置;
具体地,在所述步骤S2中:
在层级模型之上建立一个基数表,在查找层级模型之前先查找基数表,定位要查找的段在层级模型中的位置,其中,基数表的大小是能够调整的参数,基数表通过键的前缀定位需要查找段存在的区间,基数表越大,前缀划分越细,定位到的区间更小;
基于基数表的层级模型由一个基数表和一个层级模型组成,基数表维护从每个固定长度键的前缀到第一个可能包含具有该前缀的最小键的段的映射;要搜索键,首先使用键的前缀从基数表中获取两个段,如果目标键存在,则其存储在两个段之间的某一个段中,当一个新的PLR段被生成时,通过从新段的下界前缀到指向该段的指针的映射更新基数表。
步骤S3:在每次合并完成后,通过替换层级模型中的部分学习索引模型,加速训练层级模型的过程。
具体地,在所述步骤S3中:
虽然RMI模型并没有合并操作,但是我们可以为每个学习索引模型预先分配一段键范围,对每个键范围内的更新会先缓存在一个缓冲区中。在达到缓冲区容量上限后,执行“合并”操作,即根据更新后的数据重新训练对应的学习索引模型,以max_num_key对齐后替换原有的学习索引模型,以达到避免重新训练整个层级模型的目的。
综上所述,本发明提出了一种新的基于学习索引的LSM树层设计方法,以及一种快速重新训练层级模型的方法,相比于单纯的文件模型,能够更快地定位段在模型中的位置,在一定程度上提高了基于LSM树的键值存储的查找性能。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
- 一种基于笛卡尔自适应重构技术的二维结冰数值模拟方法
- 一种基于二维Logistic混沌系统算法的图像加密方法
- 一种基于二维码与图像识别防伪的混凝土试件见证取样系统及方法
- 一种基于图像技术的二维结构模型重构方法及系统
- 基于图像结构模型的压缩感知图像重构方法