掌桥专利:专业的专利平台
掌桥专利
首页

一种面向更新分布的学习索引模型

文献发布时间:2023-06-19 18:37:28


一种面向更新分布的学习索引模型

技术领域

本发明属于一维数据索引技术领域,具体涉及一种面向更新分布的学习索引模型。

背景技术

数据索引一直是计算机领域的核心问题之一,而处理数据插入则是数据索引领域最重要的问题之一;随着大数据时代的到来,支持频繁的数据插入与高效查询的需求与日俱增。过去几十年,一维数据一般采用B-树及其变体来索引,然而随着数据量的增加以B-树为基础的传统数据库索引往往需要较大的IO开销以及较高的空间代价,寻找一种IO开销与空间开销比B-树更小同时可以有效处理频繁数据插入的新型索引结构是很有意义且必要的。

近年来,学习索引的概念被提出,它的主要思想是索引可以看作模型,可以使用简单的机器学习模型来代替被广泛使用的传统的一维数据索引结构B-树。使用机器学习模型来索引一维数据,通过这种方式可以有效避免传统索引每次查询的多次间接搜索,大大提高了以为数据的检索速度;另外,由于机器学习模型只在节点内存储模型参数等信息,因此一维学习索引的空间代价也比B-树小很多,这种思路十分新颖同时也很有研究价值。然而,最初的学习索引只能处理静态查询,不能有效处理数据插入,因为该学习索引将键都存放在一个密集的内存数组中,数据插入代价太大,但在大多数实际应用中,都存在数据插入的情况。

当前,B-树及其变体是被广泛应用的一维数据索引结构,然而B-树所需的空间开销以及时间开销均比较大;目前的学习索引虽然有效处理了数据查询但无法高效处理频繁的数据插入,因此急需一种基于更好的索引结构来高效处理频繁数据插入的方法。

发明内容

鉴于上述问题,本发明提供了一种面向更新分布的学习索引模型,主要解决的问题是使用简单的机器学习模型来代替以B-树为基础的传统一维数据索引,学习数据更新分布来提高现有学习索引处理频繁数据插入的能力,利用机器学习模型的强大表达能力,减小索引结构的存储开销、查询开销,提高索引结构处理频繁插入的能力。

本发明采用的技术方案为:一种面向更新分布的学习索引模型,包括如下步骤:

(1)使用开销模型将键构建为RMI结构;

(2)在每个内部节点利用数据的累积分布函数均匀划分数据的范围,保证每个内部节点内的数据空间间隔相同;

(3)在每个叶子节点构建一个单调的带间隙的一元线性回归模型,利用该模型使用基于模型导向的方法插入键;

(4)在构建索引过程中学习数据更新分布,根据数据更新分布为插入数据预留间隙等待插入;

(5)在叶子节点内使用指数搜索进行键查询与插入;

(6)插入一定量数据后,对模型进行扩展或分裂操作,以有效处理后续插入。

进一步地,所述步骤(1)的具体实现方式为:首先将所有键按从小到大进行排序,然后根据键的分布,使用开销模型计算每层开销直至开销增长,RMI结构的内部节点进行数据范围划分,叶子节点进行数据拟合与预测,所述的键即为一维数据。

进一步地,所述步骤(2)的具体实现方式为:学习数据的累积分布函数,根据数据的累积分布函数计算内部节点的模型参数,使得该线性回归模型可以将数据按范围均分到其对应的孩子节点中,将键值输入该模型中,取模型输出结果的整数部分作为该键所属孩子节点的序号。

进一步地,所述步骤(3)的具体实现方式为:使用一元线性拟合的方式训练每个叶子节点内的数据,将键值输入到该线性回归模型中,取模型输出结果的整数部分作为该键所在内存数组中的位置,当预测位置不是间隙时,通过移动少量数据完成插入,保证键真实位置与预测位置误差较小,所属的间隙即为内存数组的位置没有存储数据。

进一步地,所述步骤(4)的具体实现方式为:首先在批量加载数据之前,根据插入频率得到插入数据进而计算更新数据分布,在批量加载数据时,利用提前学习到的更新分布划分内部节点范围,并根据更新分布设置叶子节点容量,为即将插入的数据预留间隙等待数据插入,若模型预测的插入位置是一个间隙同时满足数据有序排列,可以直接插入到预测位置;否则,由于为即将插入数据预留的间隙是根据步骤(3)的基于模型导向的方法计算,因此模型预测位置比较准确,使用指数搜索确定插入位置。

进一步地,所述步骤(5)的具体实现方式为:根据步骤(3)中训练的线性回归模型与基于模型导向的插入方法,键真实位置与模型预测位置相近,从模型预测位置开始使用指数搜索进而实现快速查找。

进一步地,所述步骤(6)的具体实现方式为:当在某一叶子节点频繁插入数据时,模型有效性随之下降,因此当某一叶子节点对应数组的数据量到达扩展阈值时,扩展叶子节点模型与数组容量;当叶子节点数据量到达分裂阈值时,将当前叶子节点内数据重新训练为内部节点,并将数据按范围分配到对应的叶子节点中。

本发明提出了一种索引键是一维空间中的学习索引模型,并假设插入数据在批量加载之前是已知的,使用机器学习模型代替以B-树为基础的传统一维索引结构,利用数据更新分布调整节点容量与模型参数,利用了机器学习模型的强大表达能力与数据更新分布的特性,使索引结构的空间与时间开销大大减少,同时可以高效处理频繁的数据插入。

附图说明

图1为本发明基于学习索引模型的面向更新分布的数据查询与更新方法的整体流程示意图;

图2为本发明与其他现有传统索引结构以及学习索引结构对于数据插入性能的横向比较示意图。

具体实施方式

为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行清楚、完整地描述。

实施例:

本实施里我们考虑如下应用场景:社交媒体平台用户登录与注册,用一个数据库存储平台用户账号信息,当用户登录其社交媒体账户时,手机可以自动弹出其账户密码使用户快速登陆,即为一次数据查询;当今主要社交媒体平台如QQ、微信、微博等都可看到其应用身影。当一个用户申请注册社交媒体账号时,即为一次数据插入,用户希望尽快完成账号的注册。

为了叙述的方便性,我们首先使用抽象的语言来描述该场景,在社交媒体平台上,用户登录信息由用户账号与账号密码组成,该信息可以表示为一个键值对,用户账号可以作为为键,唯一标识用户的账号,对应账号密码为键对应的值,所有用户的账号我们称之为一维键空间,因此该场景可以抽象为给定查询键,查找查询键对应的值并返回或给定插入键与其对应的值将该键值对插入到对应的位置。

为解决上述查询与插入问题,采用本发明技术方案具体实施的过程如图1所示,包括如下步骤:

(1)使用开销模型将键构建为RMI结构。

为了适应不同的数据分布,本发明使用开销模型实现自适应构建,分析影响索引性能的因素,包括从根节点遍历到叶子节点的开销、在叶子数组内使用指数搜索的开销、插入数据导致的数据滑动的开销等,根据它们不同的影响程度分别设置相应权重,在索引构建时计算每一层各个节点的开销总和,直至层级开销连续增加,之后自底向上开始节点合并,如果两个节点合并节约的开销大于0,说明合并这两个节点会产生更好的性能,直到所有节点遍历结束,索引构建完成。

(2)在每个内部节点利用数据的累积分布函数均匀划分数据的范围,保证每个内部节点内的数据空间间隔相同。

首先对数据进行升序排序,确定最大值max_key与最小值min_key,根据数据的累积分布函数进行内部节点的训练,使得将所有数据按范围均分到各个孩子节点中。

内部节点模型的斜率计算公式为:

内部节点模型的截距计算公式为:

最终,得到内部节点模型公式:

y=a×x+b

给定查询键key,利用内部节点模型递归寻找键key所在节点,直至到达叶子节点,寻找键所在孩子节点的过程可以表示如下:

pos=a×fanout×key+b×fanout

其中,pos为查询键在下一层所属节点的编号,fanout为当前节点孩子节点的数量。

(3)在每个叶子节点构建一个单调的带间隙的一元线性回归模型,利用该模型使用基于模型导向的方法插入键。

划分为数据后,进行每个叶子节点数据的拟合。

叶子节点模型的斜率计算公式为:

叶子节点模型的截距计算公式为:

最终,得到叶子节点训练好的模型:

(4)在构建索引过程中学习数据更新分布,根据数据更新分布为插入数据预留间隙等待插入。

统计即将插入到每个叶子节点的数据量insertkeys,根据整体容量与密度要求缩放数组。

首先计算叶子节点的左边界值:

其中,i代表层数,level[i-1].irb该层中当前节点的前一个节点。

叶子节点的右边界值计算公式为:

其中,fanout代表该层的扇出数量,i代表层数,a、b分别代表斜率和截距,k表示插入数组的第一个键值。

最终,插入到叶子节点的数据量insertkeys计算如下:

insert_num_keys=irb-ilb

其中,insert_num_keys即为插入到叶子节点的数据量。

如果当前叶子节点的总数据量小于设置的容量阈值,则数组容量为:

capacity=(keys+insertkeys)/d

否则,数组容量为:

capacity=keys/d

其中,capacity为数组容量,keys为初始数据量,d为数组密度边界,d

最后,根据数组容量调整模型参数。

a=a×(capacity/num_keys)

b=b×(capacity/num_keys)

(5)在叶子节点内使用指数搜索进行键查询与插入。

利用叶子节点预测查询键位置后,判断当前位置是否为要查询的键,如果是要查询的键直接返回查询键对应的有效载荷值;如果不是要查询的键,从预测位置开始向前或向后使用指数搜索找到第一个不大于或不小于查询键的键值,最后在一个小范围内使用二分搜索进行查询键的搜索。如果查找到查询键,返回其对应的有效载荷值,否则说明该查询键不存在返回空,结束查询。

对于插入键,首先执行一次点查询,判断模型预测插入位置是否为一个间隙且插入到间隙后满足升序排列;如果满足该条件直接插入到间隙,插入结束;如果当前预测位置不是一个间隙,在保证升序排列的同时通过移动一些数据创造一个间隙完成插入。

(6)插入一定量数据后,对模型进行扩展或分裂操作,以有效处理后续插入。

插入一定量数据达到模型扩展阈值时,通过扩展数组容量与调整模型参数继续处理插入;继续在该叶子节点插入数据达到分裂阈值,触发模型分裂,当前叶子节点变为内部节点,根据数据范围将所有数据均分到新的叶子节点中,重新训练叶子节点模型并调整数组容量。

本发明的实验结果在沈阳航空航天大学数据库技术研究室的Ubuntu虚拟机上进行了实验,该实验使用了四个数据集:键是浮点型的LTD数据集和LAT数据集,键是无符号长整型的YCSB数据集以及键是有符号长整型的LNM数据集。

本发明的实验效果同时与其他几种一维数据索引结构得到的效果进行比较,包括B+树、ALEX和LIPP。

图2是本发明与其余几类方法对于数据查询与插入效果的横向比较,其中AveLookup Time表示某种索引执行一次点查询的平均查找时间其值在(0,+∞)之间,数值越小表示执行一次查询消耗的时间越少,效果越好;Ave Insert Time表示某种索引执行一次插入的平均插入时间其值在(0,+∞)之间,数值越小表示执行一次插入消耗的时间越少,效果越好;由于空间限制,这里只展示了两个实验结果。

上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明,熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。

技术分类

06120115635726