【技术实现步骤摘要】
一种并发的内存数据库分裂的方法
[0001]本专利技术涉及数据库
,尤其涉及一种并发的内存数据库分裂的方法。
技术介绍
[0002]随着物联网、云计算、大数据等新兴信息技术的飞速发展,数据量呈指数增长趋势,到2020年数据总量已突破40ZB。在如此海量的数据中快速准确的检索出所查询的数据始终是数据库领域研究的焦点。创建高性能的数据库索引就是其中一种重要技术,自适应索引技术的出现,尤其是数据库分裂技术,克服了传统索引技术存在的不足,其索引的构建不需要提前、不需要决策、不需要为全部的数据构建,而是依赖于动态变化的工作负载,按需以自适应的、连续的、增量的、部分的方式维护索引物理设计的变化。
[0003]数据库分裂技术是最早引入的自适应索引技术,该技术的主要概念是在查询执行的过程中自适应的、增量的创建和维护索引,将每个传入请求视为优化索引结构的建议。分裂过程非常类似于快速排序,其中每个查询在一个分区上执行,并根据查询谓词对元组进行重组。通过这种方式,索引创建过程分布在多个后续查询上,每个查询都能从前面的查询中受益。
[0004]S.Idreos等人在CIDR 2007上发布的论文“Database Cracking”上首次提出了标准数据库分裂算法,标准数据库分裂算法中实现分裂索引的数据结构为AVL
‑
Tree,其存在以下性能瓶颈:分裂索引AVL
‑
Tree虽然驻留在内存中,在查询时驱动数据库分裂,但AVL
‑
Tree并不是针对内存进行优化的索引,其对 ...
【技术保护点】
【技术特征摘要】
1.一种并发的内存数据库分裂的方法,其特征在于:针对ART索引进行改进,得到一种支持数据库分裂技术的新的增量自适应基数树索引结构,即IART索引;并在IART索引的基础上提出基于增量自适应基数树的分裂算法,即IARTC算法,IARTC算法使用IART索引作为分裂索引来驱动数据库分裂;同时基于IARTC算法得到一种新的数据库分裂并发算法,即PIARTC算法,PIARTC算法通过乐观锁耦合的并发策略来对IART索引上的节点进行加解锁控制,以实现并发的分裂和索引的更新,使其在并发执行过程中保持小的锁定粒度;所述IART索引在ART索引基础上根据不同的内部节点类型分别添加parent、minKey、maxKey以及多级支持,使得能够通过查询IART索引获得分裂的枢轴分区的上下界,并将其作为算法中的分裂索引去驱动数据库分裂;所述IARTC算法包括索引枢轴分区、重组分裂列、更新索引、查询结果四个步骤,其中索引枢轴分区和更新索引是在ART索引的基础上对原标准数据库分裂算法做出改进。2.根据权利要求1所述的并发的内存数据库分裂的方法,其特征在于:所述IART索引内部Node4类型节点的数据结构如下:首先为IART索引的Node4类型内部节点增添一个parent指针,代表指向其父亲节点的指针;如果当前查找的键不存在,需要到其父亲节点或者祖先节点中继续查找键的上下界,这在IART其他类型的内部节点中也是必须的;然后为Node4类型节点添加多级支持。3.根据权利要求2所述的并发的内存数据库分裂的方法,其特征在于:所述IART索引内部Node16类型节点的数据结构如下:为Node16类型节点添加指向父亲节点的指针和多级支持。4.根据权利要求3所述的并发的内存数据库分裂的方法,其特征在于:所述IART索引内部Node48类型节点的数据结构如下:为Node48类型节点添加指向父亲节点的指针,同时添加两个附加的key,即maxkey和minkey;其中maxkey表示当前Node48内部所存储key的最大值,minkey表示当前Node48内部所存储key的最小值。5.根据权利要求4所述的并发的内存数据库分裂的方法,其特征在于:所述IART索引内部Node256类型节点的数据结构如下:为Node256节点添加指向父亲节点的指针parent、Node256内部存储key的最大值maxkey以及Node256内部存储key的最小值minkey。6.根据权利要求5所述的并发的内存数据库分裂的方法,其特征在于:所述IARTC算法中的索引枢轴分区的具体实现如下:分为查询成功和查询失败两种情况:如果范围查询的值在IART索引上已经存在,则直接返回当前值在分裂列上的位置,并且无需其他分裂操作;如果范围查询的值不在IART索引上,则需要给出当前值所要查找的枢轴分区的上界和下界,其分为以下三个方面:(a)当使用范围查询的边界值在IART索引上搜索,遍历至叶子节点匹配失败时,如果当前查询的值小于当前叶子节点的值,则当前查询值的枢轴分区的上界为该叶子节点的值,其下界为该节点左侧所有叶子节点中的最大值;如果当前查询的值大于当前叶子节点的值,当前查询值的枢轴分区下界为该叶子节点的值,上界为该节点右侧所有叶子节点中的
最小值;(b)当使用范围查询的边界值在IART索引上搜索,遍历发生和内部节点前缀不匹配的情况,需要根据前缀与当前值的大小做不同处理;如果当前查询的值小于当前内部节点前缀的值,则当前查询值的枢轴分区的上界为当前内部节点的最小值,其下界为该节点左侧所有叶子节点中的最大值;如果当前查询的值大于当前内部节点前缀的值,则当前查询值的枢轴分区的下界为当前内部节点的最大值,其上界为该节点右侧所有叶子节点中的最小值;(c)当使用范围查询的值在IART索引上搜索的时候,查询找到的值为空值的情况,则需要根据父亲节点的类型去做不同的处理,具体如下:如果父亲节点为Node4类型节点,首先根据当前查询的值和父亲节点里的值进行对比;当前查询的值小于父亲节点保存的最小值时,则当前所查询值的枢轴分区的下界为当前层叶子节点的最小值,上界为该节点左侧所有叶子节点中的最大值;当前查询的值大于父亲节点保存的最大值时,则当前所查询值的枢轴分区的下界为当前层叶子节点的最大值,上界为该节点右侧所有叶...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。