一种面向列存储dwms的b+树索引方法

文档序号:6363741阅读:295来源:国知局
专利名称:一种面向列存储dwms的b+树索引方法
技术领域
本发明涉及一种面向列存储DWMS (Data Warehouse Management System)的B+树索引技术。
背景技术
互联网应用的高度发展,高吞吐量和大存储量成为现如今数据库产品所必备的特点,对于事务处理和查询分析高性能的要求日益迫切。传统的行存储数据库并不能像处理事务应用一样为企业决策提供高效的查询分析,近年列存储的数据库架构被重新审视,对于数据仓库中或者分析支持应用中读优化的查询型工作,列存储表现出比行存储具有更加显著的性能。由于关系表在对外表现上,仍为逻辑行,因此元组重构与多表连接是列存储中影响查询性能的重要因素。索引是提高查询效率的重要技术之一。B+树索引能够保持数据有序存储,并具有允许查找、顺序存取、插入和删除的优点,使得它在事务环境中成为数据库系统使用最广泛的索引结构。在传统的数据库系统中,频繁的数据插入和修改带来的B+树结构的变化是很大的。为了降低数据插入和修改时造成结点分裂的可能性,B+树的结点并不是填满的。但是在数据仓库系统中,几乎没有数据插入和修改操作。将传统B+树应用于海量数据存储的数据仓库系统中将造成空间的浪费。同时,由于结点并未完全填充,数据存储需要更多的结点,这将增加B+树索引的高度,降低数据的查询效率。

发明内容
本发明的目的是提供一种应用于列存储DWMS的B+树索引,克服传统B+树索引的局限性,提高数据的查询效率。为了达到上述目的,本发明的技术方案是提供了一种面向列存储DWMS的B+树索引方法,其特征在于,步骤为步骤I、列数据生成导入用户数据,将原始按行存储的数据垂直划分为单列,为每一列的每一项数据根据其所在的行号,添加用于元组重建的行号项,形成二元组(行号, 列值),申请数据段,将新产生的每列值数据保存在一个数据段中;步骤2、若B+树关键字为行号数据,则转向步骤4进行创建;若B+树关键字为列值数据,转步骤3首先对列值进行排序;步骤3、将多路归并和堆排序组合使用对列值数据进行排序;步骤4、B+树索弓I初始化;步骤5、创建B+树叶子结点申请B+树的叶子结点,将数据项直接填充入叶子结点得到数据块,构成B+树第O层;步骤5的特点在于根据列存储特点,叶子块中直接保存数据信息,而非键值与指向数据块的指针。这样在查找过程中通过叶子结点可直接获取数据,减少一次I/o;结点填充时不再考虑稀疏系数,树中的每个结点都是填满的,采用了“查找键个数和指针个数一致”的原则,提升空间利用率。步骤6、产生中间结点由下至上迭代建立B+树的中间层结点直到整棵B+树创建结束。优选地,所述步骤3包括步骤3. I、初始化在内存中申请一个排序区,其大小记为K,令K是块大小的整数倍。若待排序数据块数Blk_num>K,将采用多路归并外排序的方法。计算多路归并时M的大小,M为归并时的子列表个数,令M =「Blk_num/Kl每个待归并的子列表内块数D = Blk_ num/Mo步骤3. 2、读取段中源数据,把数据块二元组中的列值数据拆分出来,装入 dataitem数组,放入排序区。使用堆排序算法将dataitem数组作为输入参数,对dataitem 数组进行排序;若Blk_num <= K,则排序结束;否则,把排好序的数据项重新组装成块,写回临时段中。步骤3. 3、对M个临时段进行归并排序。优选地,所述步骤6包括步骤6. I、生成索引项,索引项为由下一层块中的第一个列值、对应的行号以及该块的块号构成的三元组;步骤6. 2、判断列值类型是定长数据或变长数据,若是定长列值,计算得到索引项的长度,进而可得索引块中的索引项个数=索引块空间大小/索引项长度,第一层中的索弓I块个数=第O层中的数据块个数/每个结点中的索引项个数。申请索引块空间,将索引项批量插入到索引块中;若是变长列值,先申请一个索引块,然后依次插入三元组,直到放不下时才申请新的索引块;步骤6. 3、一层创建完成后,转向步骤5. 1,按照同样的过程创建上一层中间结点, 直到整棵B+树创建结束。本发明提供一种应用于列存储DWMS的B+树索引具有如下优点I)提供改进的B+树索引结点,叶子结点直接存储列数据,中间结点不再考虑稀疏系数,全部填满,增加了空间利用率。对于相同个数的数据,该结构保证B树层次最短,减少了查找次数;2)B+树的建立抛弃了传统的插入法,使用自底向上构造B+树的方法。使用这种方法不需要考虑分裂操作,减少了大量的开销;3)对列存储系统中行号和列值数据分别建立B+树索引,保持数据有序存储,便于元组重构与多表连接。


图I为B+树内部结点(索引项)的结构;图2为B+树叶结点(数据页)的结构。
具体实施例方式为使本发明更明显易懂,兹以一优选实施例详细说明如下。
本发明提供了一种面向列存储DWMS的B+树索引方法,其步骤为步骤I、列数据生成导入用户数据,将原始按行存储的数据垂直划分为单列,为每一列的每一项数据根据其所在的行号,添加用于元组重建的行号项,形成二元组(行号, 列值),申请数据段,将新产生的每列值数据保存在一个数据段中;步骤2、若B+树关键字为行号数据,则转向步骤4进行创建;若B+树关键字为列值数据,转步骤3首先对列值进行排序;步骤3、将多路归并和堆排序组合使用对列值数据进行键值排序,本步骤包括步骤3. I、初始化在内存中申请一个排序区,其大小记为K,令K是块大小的整数倍。若待排序数据块数Blk_num>K,将采用多路归并外排序的方法。计算多路归并时M的大小,M为归并时的子列表个数,令M =「Blk_num /Kl每个待归并的子列表内块数D = Blk_ num/Mo步骤3. 2、读取段中源数据,把数据块二元组中的列值数据拆分出来,装入 dataitem数组,放入排序区。使用堆排序算法将dataitem数组作为输入参数,对dataitem 数组进行排序;若Blk_num <= K,则排序结束;否则,把排好序的数据项重新组装成块,写回临时段中。步骤3. 3、对M个临时段进行归并排序。步骤4、B+树初始化,具体包括对B+树的描述信息进行赋值,需要赋值的内容如下(I)B+树索引键值的类型,包括定/变长、是否数值类型。定长的键值类型包括: SMALLINT、INT、NUMBER、CHAR、DATE、TIME ;变长的键值类型有包括 VARCHAR。(2)列的信息,包括列名、列类型、列长,如果列是变长,则指定最大长度。(3)为B+树根块分配空间。(4)设置B+树的level值为O。步骤5、创建叶子结点申请B+树的叶子结点,将数据项直接填充入叶子结点得到数据块,构成B+树第O层;本步骤根据列存储特点,叶子块中直接保存数据信息,而非键值与指向数据块的指针。这样在查找过程中通过叶子结点可直接获取数据,减少一次I/O。 此外,结点填充时不再考虑稀疏系数,树中的每个结点都是填满的,提升空间利用率,如图I 及图2所示。图中的KEYi由<行号,列值>两部分组成。步骤6、产生中间结点由下至上迭代建立B+树的中间层结点直到整棵B+树创建结束,其步骤为步骤6. I、生成索引项,索引项由下一层块中的第一个列值、对应的行号以及该块的块号构成的三元组,计算索引项的长度,记为TL ;步骤6. 2、申请索引块空间根据步骤4中初始化信息判断列值是定长或变长的, 若是定长列值,计算得到索引项的长度。索引块中的索引项个数=每个索引块空间大小/ 索引项长度TL。计算第一层中的索引块个数=第O层中的数据块个数/每个索引块中的索引项个数。申请该层的索引块空间。将索引项批量插入到索引块中;若是变长列值,先申请一个索引块,然后依次插入三元组,直到放不下时才申请新的索引块。步骤6. 3、一层创建完成后,level = level+1 ;转向步骤6. I,按照同样的过程创建上一层中间结点,不同之处在于计算当前层的索引块个数=下一层的索引块个数/每个索引块中的索引项个数。当该层中的索引块个数为I时,迭代结束,该索引块即为B+树的根结点。
权利要求
1.一种面向列存储DWMS的B+树索引方法,其特征在于,步骤为步骤I、列数据生成导入用户数据,将原始按行存储的数据垂直划分为单列,为每一列的每一项数据根据其所在的行号,添加用于元组重建的行号项,形成二元组(行号,列值),申请数据段,将新产生的每列值数据保存在一个数据段中;步骤2、若B+树关键字为行号数据,则转向步骤4进行创建;若B+树关键字为列值数据,转步骤3首先对列值进行排序;步骤3、将多路归并和堆排序组合使用对列值数据进行排序;步骤4、B+树索引初始化;步骤5、创建B+树叶子结点申请B+树的叶子结点,将数据项直接填充入叶子结点得到数据块,构成B+树第O层;步骤6、产生中间结点由下至上迭代建立B+树的中间层结点直到整棵B+树创建结束。
2.如权利要求I所述的一种面向列存储DWMS的B+树索引方法,其特征在于,所述步骤 3包括步骤3. I、初始化在内存中申请一个排序区,其大小记为K,令K是块大小的整数倍。若待排序数据块数Blk_num > K,将采用多路归并外排序的方法。计算多路归并时M的大小,M 为归并时的子列表个数,令M =「Blk—num / Kl每个待归并的子列表内块数D = Blk_num/M ;步骤3. 2、读取段中源数据,把数据块二元组中的列值数据拆分出来,装入dataitem数组,放入排序区。使用堆排序算法将dataitem数组作为输入参数,对dataitem数组进行排序;SBlk_num<= K,则排序结束;否则,把排好序的数据项重新组装成块,写回临时段中;步骤3. 3、对M个临时段进行归并排序。
3.如权利要求I所述的一种面向列存储DWMS的B+树索引方法,其特征在于,所述步骤 6包括步骤6. I、生成索引项,索引项为由下一层块中的第一个列值、对应的行号以及该块的块号构成的三元组;步骤6. 2、判断列值类型是定长数据或变长数据,若是定长列值,计算得到索引项的长度,进而可得索引块中的索引项个数=索引块空间大小/索引项长度,第一层中的索引块个数=第O层中的数据块个数/每个结点中的索引项个数。申请索弓I块空间,将索弓I项批量插入到索引块中;若是变长列值,先申请一个索引块,然后依次插入三元组,直到放不下时才申请新的索引块;步骤6. 3、一层创建完成后,转向步骤5. 1,按照同样的过程创建上一层中间结点,直到整棵B+树创建结束。
全文摘要
本发明涉及一种面向列存储DWMS的B+树索引方法,其特征在于,步骤为步骤1、列数据生成;步骤2、若B+树关键字为行号,则转向步骤4进行创建,否则转步骤3进行排序;步骤3、将多路归并和堆排序组合使用对列值数据进行排序;步骤4、B+树索引初始化;步骤5、创建叶子结点;步骤6、自底向上产生中间结点。本发明提供一种应用于列存储DWMS的B+树索引具有如下优点1)保证B树层次最短,减少了查找次数;2)B+树的建立抛弃了传统的插入法,使用自底向上构造B+树的方法。使用这种方法不需要考虑分裂操作,减少了大量的开销。
文档编号G06F17/30GK102609490SQ20121001993
公开日2012年7月25日 申请日期2012年1月20日 优先权日2012年1月20日
发明者乐嘉锦, 夏小玲, 李晔锋, 王梅 申请人:东华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1