当前位置: 首页 > 专利查询>东北大学专利>正文

一种并发的内存数据库分裂的方法技术

技术编号:38872014 阅读:17 留言:0更新日期:2023-09-22 14:07
本发明专利技术提供一种并发的内存数据库分裂的方法,涉及数据库技术领域。针对ART索引进行改进,得到IART索引,并在IART索引的基础上提出IARTC算法,IARTC算法使用IART索引作为分裂索引来驱动数据库分裂;同时基于IARTC算法得到一种新的数据库分裂并发算法PIARTC,PIARTC算法通过乐观锁耦合的并发策略来对IART索引上的节点进行加解锁控制,以实现并发的分裂和索引的更新,使其在并发执行过程中保持小的锁定粒度。与现有算法相比,在面对动态环境以及大规模数据集查询的情况下,本发明专利技术提出的两种自适应索引在单核和多核系统中均表现出良好的查询性能,且仍保持原始数据库分裂算法轻量级的特性。的特性。的特性。

【技术实现步骤摘要】
一种并发的内存数据库分裂的方法


[0001]本专利技术涉及数据库
,尤其涉及一种并发的内存数据库分裂的方法。

技术介绍

[0002]随着物联网、云计算、大数据等新兴信息技术的飞速发展,数据量呈指数增长趋势,到2020年数据总量已突破40ZB。在如此海量的数据中快速准确的检索出所查询的数据始终是数据库领域研究的焦点。创建高性能的数据库索引就是其中一种重要技术,自适应索引技术的出现,尤其是数据库分裂技术,克服了传统索引技术存在的不足,其索引的构建不需要提前、不需要决策、不需要为全部的数据构建,而是依赖于动态变化的工作负载,按需以自适应的、连续的、增量的、部分的方式维护索引物理设计的变化。
[0003]数据库分裂技术是最早引入的自适应索引技术,该技术的主要概念是在查询执行的过程中自适应的、增量的创建和维护索引,将每个传入请求视为优化索引结构的建议。分裂过程非常类似于快速排序,其中每个查询在一个分区上执行,并根据查询谓词对元组进行重组。通过这种方式,索引创建过程分布在多个后续查询上,每个查询都能从前面的查询中受益。
[0004]S.Idreos等人在CIDR 2007上发布的论文“Database Cracking”上首次提出了标准数据库分裂算法,标准数据库分裂算法中实现分裂索引的数据结构为AVL

Tree,其存在以下性能瓶颈:分裂索引AVL

Tree虽然驻留在内存中,在查询时驱动数据库分裂,但AVL

Tree并不是针对内存进行优化的索引,其对于范围查询而言缓存效率低;在数据库分裂算法的每次查询中均需要细化更新索引,AVL

Tree大量的平衡操作带来较大的开销;在数据集增大或查询工作负载变化时,该方法的查询效率并不高,这会对数据库分裂的整体性能产生较大的影响。
[0005]Goetz Graefe等人在PVLDB2012上发布的论文“Concurrency Control for Adaptive Indexing”上首次对标准数据库分裂的并发算法PSC(Parallel Standard Cracking)做了详细介绍,其主要通过对标准数据库分裂算法中使用的分裂列和AVL索引加解闩锁来实现并发控制。PSC通过对数据库分裂相关的数据结构加解锁或者并发分块来实现数据库分裂的并发算法,但这种实现方式带来了较大的锁的竞争和加解锁开销,成为了数据库分裂并发算法的主要瓶颈。
[0006]此外,数据库分裂算法应该赶上内存索引技术的发展,随着越来越优的内存数据库索引的出现,如ART索引等,与这些索引相比,数据库分裂算法的查询效率仍有待提高。

技术实现思路

[0007]本专利技术要解决的技术问题是针对上述现有技术的不足,提供一种并发的内存数据库分裂的方法,一种缓存效率和查询效率更好的内存数据库索引去驱动数据库分裂,将内存数据库索引与数据库分裂技术相结合,以对数据库分裂算法进行优化,同时,基于优化算法提出更优的数据库分裂的并发策略。
[0008]为解决上述技术问题,本专利技术所采取的技术方案是:
[0009]一种并发的内存数据库分裂的方法,针对ART索引进行改进,得到一种支持数据库分裂技术的新的增量自适应基数树索引结构,即IART索引;并在IART索引的基础上提出基于增量自适应基数树的分裂算法,即IARTC算法,IARTC算法使用IART索引作为分裂索引来驱动数据库分裂;同时基于IARTC算法得到一种新的数据库分裂并发算法,即PIARTC算法,PIARTC算法通过乐观锁耦合的并发策略来对IART索引上的节点进行加解锁控制,以实现并发的分裂和索引的更新,使其在并发执行过程中保持小的锁定粒度;
[0010]所述IART索引在ART索引基础上根据不同的内部节点类型分别添加parent、minKey、maxKey以及多级支持,使得能够通过查询IART索引获得分裂的枢轴分区的上下界,并将其作为算法中的分裂索引去驱动数据库分裂;
[0011]所述IARTC算法包括索引枢轴分区、重组分裂列、更新索引、查询结果四个步骤,其中索引枢轴分区和更新索引是在ART索引的基础上对原标准数据库分裂算法做出改进。
[0012]进一步地,所述IART索引内部Node4类型节点的数据结构如下:
[0013]首先为IART索引的Node4类型内部节点增添一个parent指针,代表指向其父亲节点的指针;如果当前查找的键不存在,需要到其父亲节点或者祖先节点中继续查找键的上下界,这在IART其他类型的内部节点中也是必须的;然后为Node4类型节点添加多级支持;
[0014]进一步地,所述IART索引内部Node16类型节点的数据结构如下:
[0015]为Node16类型节点添加指向父亲节点的指针和多级支持。
[0016]进一步地,所述IART索引内部Node48类型节点的数据结构如下:
[0017]为Node48类型节点添加指向父亲节点的指针,同时添加两个附加的key,即maxkey和minkey;其中maxkey表示当前Node48内部所存储key的最大值,minkey表示当前Node48内部所存储key的最小值。
[0018]进一步地,所述IART索引内部Node256类型节点的数据结构如下:
[0019]为Node256节点添加指向父亲节点的指针parent、Node256内部存储key的最大值maxkey以及Node256内部存储key的最小值minkey。
[0020]进一步地,所述IARTC算法中的索引枢轴分区的具体实现如下:
[0021]分为查询成功和查询失败两种情况:
[0022]如果范围查询的值在IART索引上已经存在,则直接返回当前值在分裂列上的位置,并且无需其他分裂操作;
[0023]如果范围查询的值不在IART索引上,则需要给出当前值所要查找的枢轴分区的上界和下界,其分为以下三个方面:
[0024](a)当使用范围查询的边界值在IART索引上搜索,遍历至叶子节点匹配失败时,如果当前查询的值小于当前叶子节点的值,则当前查询值的枢轴分区的上界为该叶子节点的值,其下界为该节点左侧所有叶子节点中的最大值。如果当前查询的值大于当前叶子节点的值,当前查询值的枢轴分区下界为该叶子节点的值,上界为该节点右侧所有叶子节点中的最小值。
[0025](b)当使用范围查询的边界值在IART索引上搜索,遍历发生和内部节点前缀不匹配的情况,需要根据前缀与当前值的大小做不同处理;
[0026]如果当前查询的值小于当前内部节点前缀的值,则当前查询值的枢轴分区的上界
为当前内部节点的最小值,其下界为该节点左侧所有叶子节点中的最大值。
[0027]如果当前查询的值大于当前内部节点前缀的值,则当前查询值的枢轴分区的下界为当前内部节点的最大值,其上界为该节点右侧所有叶子节点中的最小值。
[0028](c)当使用范围查询的值在IART索引上本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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类型节点,首先根据当前查询的值和父亲节点里的值进行对比;当前查询的值小于父亲节点保存的最小值时,则当前所查询值的枢轴分区的下界为当前层叶子节点的最小值,上界为该节点左侧所有叶子节点中的最大值;当前查询的值大于父亲节点保存的最大值时,则当前所查询值的枢轴分区的下界为当前层叶子节点的最大值,上界为该节点右侧所有叶...

【专利技术属性】
技术研发人员:孙悦程顾昱昊徐嘉怡吴刚
申请(专利权)人:东北大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1