CN102609490A - 一种面向列存储dwms的b+树索引方法 - Google Patents
一种面向列存储dwms的b+树索引方法 Download PDFInfo
- Publication number
- CN102609490A CN102609490A CN2012100199355A CN201210019935A CN102609490A CN 102609490 A CN102609490 A CN 102609490A CN 2012100199355 A CN2012100199355 A CN 2012100199355A CN 201210019935 A CN201210019935 A CN 201210019935A CN 102609490 A CN102609490 A CN 102609490A
- Authority
- CN
- China
- Prior art keywords
- data
- tree
- index
- row
- train value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种面向列存储DWMS的B+树索引方法,其特征在于,步骤为:步骤1、列数据生成;步骤2、若B+树关键字为行号,则转向步骤4进行创建,否则转步骤3进行排序;步骤3、将多路归并和堆排序组合使用对列值数据进行排序;步骤4、B+树索引初始化;步骤5、创建叶子结点;步骤6、自底向上产生中间结点。本发明提供一种应用于列存储DWMS的B+树索引具有如下优点:1)保证B树层次最短,减少了查找次数;2)B+树的建立抛弃了传统的***法,使用自底向上构造B+树的方法。使用这种方法不需要考虑***操作,减少了大量的开销。
Description
技术领域
本发明涉及一种面向列存储DWMS(Data Warehouse Management System)的B+树索引技术。
背景技术
互联网应用的高度发展,高吞吐量和大存储量成为现如今数据库产品所必备的特点,对于事务处理和查询分析高性能的要求日益迫切。传统的行存储数据库并不能像处理事务应用一样为企业决策提供高效的查询分析,近年列存储的数据库架构被重新审视,对于数据仓库中或者分析支持应用中读优化的查询型工作,列存储表现出比行存储具有更加显著的性能。由于关系表在对外表现上,仍为逻辑行,因此元组重构与多表连接是列存储中影响查询性能的重要因素。索引是提高查询效率的重要技术之一。B+树索引能够保持数据有序存储,并具有允许查找、顺序存取、***和删除的优点,使得它在事务环境中成为数据库***使用最广泛的索引结构。
在传统的数据库***中,频繁的数据***和修改带来的B+树结构的变化是很大的。为了降低数据***和修改时造成结点***的可能性,B+树的结点并不是填满的。但是在数据仓库***中,几乎没有数据***和修改操作。将传统B+树应用于海量数据存储的数据仓库***中将造成空间的浪费。同时,由于结点并未完全填充,数据存储需要更多的结点,这将增加B+树索引的高度,降低数据的查询效率。
发明内容
本发明的目的是提供一种应用于列存储DWMS的B+树索引,克服传统B+树索引的局限性,提高数据的查询效率。
为了达到上述目的,本发明的技术方案是提供了一种面向列存储DWMS的B+树索引方法,其特征在于,步骤为:
步骤1、列数据生成:导入用户数据,将原始按行存储的数据垂直划分为单列,为每一列的每一项数据根据其所在的行号,添加用于元组重建的行号项,形成二元组(行号,列值),申请数据段,将新产生的每列值数据保存在一个数据段中;
步骤2、若B+树关键字为行号数据,则转向步骤4进行创建;若B+树关键字为列值数据,转步骤3首先对列值进行排序;
步骤3、将多路归并和堆排序组合使用对列值数据进行排序;
步骤4、B+树索引初始化;
步骤5、创建B+树叶子结点:申请B+树的叶子结点,将数据项直接填充入叶子结点得到数据块,构成B+树第0层;
步骤5的特点在于:
根据列存储特点,叶子块中直接保存数据信息,而非键值与指向数据块的指针。这样在查找过程中通过叶子结点可直接获取数据,减少一次I/O;结点填充时不再考虑稀疏系数,树中的每个结点都是填满的,采用了“查找键个数和指针个数一致”的原则,提升空间利用率。
步骤6、产生中间结点:由下至上迭代建立B+树的中间层结点直到整棵B+树创建结束。
优选地,所述步骤3包括:
步骤3.1、初始化:在内存中申请一个排序区,其大小记为K,令K是块大小的整数倍。若待排序数据块数Blk_num>K,将采用多路归并外排序的方法。计算多路归并时M的大小,M为归并时的子列表个数,令每个待归并的子列表内块数D=Blk_num/M。
步骤3.2、读取段中源数据,把数据块二元组中的列值数据拆分出来,装入dataitem数组,放入排序区。使用堆排序算法将dataitem数组作为输入参数,对dataitem数组进行排序;若Blk_num<=K,则排序结束;否则,把排好序的数据项重新组装成块,写回临时段中。
步骤3.3、对M个临时段进行归并排序。
优选地,所述步骤6包括:
步骤6.1、生成索引项,索引项为由下一层块中的第一个列值、对应的行号以及该块的块号构成的三元组;
步骤6.2、判断列值类型是定长数据或变长数据,若是定长列值,计算得到索引项的长度,进而可得索引块中的索引项个数=索引块空间大小/索引项长度,第一层中的索引块个数=第0层中的数据块个数/每个结点中的索引项个数。申请索引块空间,将索引项批量***到索引块中;若是变长列值,先申请一个索引块,然后依次***三元组,直到放不下时才申请新的索引块;
步骤6.3、一层创建完成后,转向步骤5.1,按照同样的过程创建上一层中间结点,直到整棵B+树创建结束。
本发明提供一种应用于列存储DWMS的B+树索引具有如下优点:
1)提供改进的B+树索引结点,叶子结点直接存储列数据,中间结点不再考虑稀疏系数,全部填满,增加了空间利用率。对于相同个数的数据,该结构保证B树层次最短,减少了查找次数;
2)B+树的建立抛弃了传统的***法,使用自底向上构造B+树的方法。使用这种方法不需要考虑***操作,减少了大量的开销;
3)对列存储***中行号和列值数据分别建立B+树索引,保持数据有序存储,便于元组重构与多表连接。
附图说明
图1为B+树内部结点(索引项)的结构;
图2为B+树叶结点(数据页)的结构。
具体实施方式
为使本发明更明显易懂,兹以一优选实施例详细说明如下。
本发明提供了一种面向列存储DWMS的B+树索引方法,其步骤为:
步骤1、列数据生成:导入用户数据,将原始按行存储的数据垂直划分为单列,为每一列的每一项数据根据其所在的行号,添加用于元组重建的行号项,形成二元组(行号,列值),申请数据段,将新产生的每列值数据保存在一个数据段中;
步骤2、若B+树关键字为行号数据,则转向步骤4进行创建;若B+树关键字为列值数据,转步骤3首先对列值进行排序;
步骤3、将多路归并和堆排序组合使用对列值数据进行键值排序,本步骤包括:
步骤3.1、初始化:在内存中申请一个排序区,其大小记为K,令K是块大小的整数倍。若待排序数据块数Blk_num>K,将采用多路归并外排序的方法。计算多路归并时M的大小,M为归并时的子列表个数,令每个待归并的子列表内块数D=Blk_num/M。
步骤3.2、读取段中源数据,把数据块二元组中的列值数据拆分出来,装入dataitem数组,放入排序区。使用堆排序算法将dataitem数组作为输入参数,对dataitem数组进行排序;若Blk_num<=K,则排序结束;否则,把排好序的数据项重新组装成块,写回临时段中。
步骤3.3、对M个临时段进行归并排序。
步骤4、B+树初始化,具体包括对B+树的描述信息进行赋值,需要赋值的内容如下:
(1)B+树索引键值的类型,包括定/变长、是否数值类型。定长的键值类型包括:SMALLINT、INT、NUMBER、CHAR、DATE、TIME;变长的键值类型有包括VARCHAR。
(2)列的信息,包括列名、列类型、列长,如果列是变长,则指定最大长度。
(3)为B+树根块分配空间。
(4)设置B+树的level值为0。
步骤5、创建叶子结点:申请B+树的叶子结点,将数据项直接填充入叶子结点得到数据块,构成B+树第0层;本步骤根据列存储特点,叶子块中直接保存数据信息,而非键值与指向数据块的指针。这样在查找过程中通过叶子结点可直接获取数据,减少一次I/O。此外,结点填充时不再考虑稀疏系数,树中的每个结点都是填满的,提升空间利用率,如图1及图2所示。图中的KEYi由<行号,列值>两部分组成。
步骤6、产生中间结点:由下至上迭代建立B+树的中间层结点直到整棵B+树创建结束,其步骤为:
步骤6.1、生成索引项,索引项由下一层块中的第一个列值、对应的行号以及该块的块号构成的三元组,计算索引项的长度,记为TL;
步骤6.2、申请索引块空间:根据步骤4中初始化信息判断列值是定长或变长的,若是定长列值,计算得到索引项的长度。索引块中的索引项个数=每个索引块空间大小/索引项长度TL。计算第一层中的索引块个数=第0层中的数据块个数/每个索引块中的索引项个数。申请该层的索引块空间。将索引项批量***到索引块中;若是变长列值,先申请一个索引块,然后依次***三元组,直到放不下时才申请新的索引块。
步骤6.3、一层创建完成后,level=level+1;转向步骤6.1,按照同样的过程创建上一层中间结点,不同之处在于计算当前层的索引块个数=下一层的索引块个数/每个索引块中的索引项个数。当该层中的索引块个数为1时,迭代结束,该索引块即为B+树的根结点。
Claims (3)
1.一种面向列存储DWMS的B+树索引方法,其特征在于,步骤为:
步骤1、列数据生成:导入用户数据,将原始按行存储的数据垂直划分为单列,为每一列的每一项数据根据其所在的行号,添加用于元组重建的行号项,形成二元组(行号,列值),申请数据段,将新产生的每列值数据保存在一个数据段中;
步骤2、若B+树关键字为行号数据,则转向步骤4进行创建;若B+树关键字为列值数据,转步骤3首先对列值进行排序;
步骤3、将多路归并和堆排序组合使用对列值数据进行排序;
步骤4、B+树索引初始化;
步骤5、创建B+树叶子结点:申请B+树的叶子结点,将数据项直接填充入叶子结点得到数据块,构成B+树第0层;
步骤6、产生中间结点:由下至上迭代建立B+树的中间层结点直到整棵B+树创建结束。
2.如权利要求1所述的一种面向列存储DWMS的B+树索引方法,其特征在于,所述步骤3包括:
步骤3.1、初始化:在内存中申请一个排序区,其大小记为K,令K是块大小的整数倍。若待排序数据块数Blk_num>K,将采用多路归并外排序的方法。计算多路归并时M的大小,M为归并时的子列表个数,令每个待归并的子列表内块数D=Blk_num/M;
步骤3.2、读取段中源数据,把数据块二元组中的列值数据拆分出来,装入dataitem数组,放入排序区。使用堆排序算法将dataitem数组作为输入参数,对dataitem数组进行排序;若Blk_num<=K,则排序结束;否则,把排好序的数据项重新组装成块,写回临时段中;
步骤3.3、对M个临时段进行归并排序。
3.如权利要求1所述的一种面向列存储DWMS的B+树索引方法,其特征在于,所述步骤6包括:
步骤6.1、生成索引项,索引项为由下一层块中的第一个列值、对应的行号以及该块的块号构成的三元组;
步骤6.2、判断列值类型是定长数据或变长数据,若是定长列值,计算得到索引项的长度,进而可得索引块中的索引项个数=索引块空间大小/索引项长度,第一层中的索引块个数=第0层中的数据块个数/每个结点中的索引项个数。申请索引块空间,将索引项批量***到索引块中;若是变长列值,先申请一个索引块,然后依次***三元组,直到放不下时才申请新的索引块;
步骤6.3、一层创建完成后,转向步骤5.1,按照同样的过程创建上一层中间结点,直到整棵B+树创建结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210019935.5A CN102609490B (zh) | 2012-01-20 | 2012-01-20 | 一种面向列存储dwms的b+树索引方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210019935.5A CN102609490B (zh) | 2012-01-20 | 2012-01-20 | 一种面向列存储dwms的b+树索引方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102609490A true CN102609490A (zh) | 2012-07-25 |
CN102609490B CN102609490B (zh) | 2014-07-02 |
Family
ID=46526862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210019935.5A Expired - Fee Related CN102609490B (zh) | 2012-01-20 | 2012-01-20 | 一种面向列存储dwms的b+树索引方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102609490B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103870492A (zh) * | 2012-12-14 | 2014-06-18 | 腾讯科技(深圳)有限公司 | 一种基于键排序的数据存储方法和装置 |
CN104268146A (zh) * | 2014-08-21 | 2015-01-07 | 南京邮电大学 | 一种适合分析型应用的静态b+树索引方法 |
CN104601732A (zh) * | 2015-02-12 | 2015-05-06 | 北京金和软件股份有限公司 | 一种快速实现多路数据归并的方法 |
CN106980796A (zh) * | 2017-03-27 | 2017-07-25 | 河南科技大学 | 云环境下基于mdb+树的多域连接关键词的搜索方法 |
CN107066551A (zh) * | 2017-03-23 | 2017-08-18 | 中国科学院计算技术研究所 | 一种树状数据的行式和列式存储方法及*** |
CN107273483A (zh) * | 2017-06-06 | 2017-10-20 | 贵州易鲸捷信息技术有限公司 | 稀疏数据的访问方法及*** |
CN108920708A (zh) * | 2018-07-20 | 2018-11-30 | 新华三技术有限公司 | 一种数据处理方法及装置 |
CN109522271A (zh) * | 2018-10-22 | 2019-03-26 | 郑州云海信息技术有限公司 | 一种b+树节点的批量***和删除方法及装置 |
CN111275203A (zh) * | 2020-02-11 | 2020-06-12 | 深圳前海微众银行股份有限公司 | 基于列存储的决策树构造方法、装置、设备及存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109284299B (zh) * | 2015-06-08 | 2021-08-10 | 南京航空航天大学 | 重构具有存储感知的混合索引的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751406A (zh) * | 2008-12-18 | 2010-06-23 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
-
2012
- 2012-01-20 CN CN201210019935.5A patent/CN102609490B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751406A (zh) * | 2008-12-18 | 2010-06-23 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
Non-Patent Citations (2)
Title |
---|
李晔锋: "数据仓库的存储研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
胡玉乐: "RB+数-一种列存储数据的树型索引结构", 《计算机研究与发展》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103870492A (zh) * | 2012-12-14 | 2014-06-18 | 腾讯科技(深圳)有限公司 | 一种基于键排序的数据存储方法和装置 |
CN103870492B (zh) * | 2012-12-14 | 2017-08-04 | 腾讯科技(深圳)有限公司 | 一种基于键排序的数据存储方法和装置 |
CN104268146A (zh) * | 2014-08-21 | 2015-01-07 | 南京邮电大学 | 一种适合分析型应用的静态b+树索引方法 |
CN104601732B (zh) * | 2015-02-12 | 2018-01-23 | 北京金和软件股份有限公司 | 一种快速实现多路数据归并的方法 |
CN104601732A (zh) * | 2015-02-12 | 2015-05-06 | 北京金和软件股份有限公司 | 一种快速实现多路数据归并的方法 |
CN107066551B (zh) * | 2017-03-23 | 2020-04-03 | 中国科学院计算技术研究所 | 一种树状数据的行式和列式存储方法及*** |
CN107066551A (zh) * | 2017-03-23 | 2017-08-18 | 中国科学院计算技术研究所 | 一种树状数据的行式和列式存储方法及*** |
CN106980796B (zh) * | 2017-03-27 | 2020-03-06 | 河南科技大学 | 云环境下基于mdb+树的多域连接关键词的搜索方法 |
CN106980796A (zh) * | 2017-03-27 | 2017-07-25 | 河南科技大学 | 云环境下基于mdb+树的多域连接关键词的搜索方法 |
CN107273483A (zh) * | 2017-06-06 | 2017-10-20 | 贵州易鲸捷信息技术有限公司 | 稀疏数据的访问方法及*** |
CN107273483B (zh) * | 2017-06-06 | 2019-11-05 | 贵州易鲸捷信息技术有限公司 | 稀疏数据的访问方法及*** |
CN108920708A (zh) * | 2018-07-20 | 2018-11-30 | 新华三技术有限公司 | 一种数据处理方法及装置 |
CN108920708B (zh) * | 2018-07-20 | 2021-04-27 | 新华三技术有限公司 | 一种数据处理方法及装置 |
CN109522271A (zh) * | 2018-10-22 | 2019-03-26 | 郑州云海信息技术有限公司 | 一种b+树节点的批量***和删除方法及装置 |
WO2020082597A1 (zh) * | 2018-10-22 | 2020-04-30 | 郑州云海信息技术有限公司 | 一种b+树节点的批量***和删除方法及装置 |
CN109522271B (zh) * | 2018-10-22 | 2021-05-18 | 郑州云海信息技术有限公司 | 一种b+树节点的批量***和删除方法及装置 |
CN111275203A (zh) * | 2020-02-11 | 2020-06-12 | 深圳前海微众银行股份有限公司 | 基于列存储的决策树构造方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102609490B (zh) | 2014-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102609490B (zh) | 一种面向列存储dwms的b+树索引方法 | |
CN102890722B (zh) | 应用于时序历史数据库的索引方法 | |
Song et al. | HaoLap: A Hadoop based OLAP system for big data | |
CN103631907B (zh) | 一种将关系型数据迁移至HBase的方法及*** | |
CN101673307B (zh) | 空间数据索引方法及*** | |
CN102270232B (zh) | 一种存储优化的语义数据查询*** | |
CN102722531B (zh) | 一种云环境中基于分片位图索引的查询方法 | |
CN110275920A (zh) | 数据查询方法、装置、电子设备及计算机可读存储介质 | |
CN103123650B (zh) | 一种基于整数映射的xml数据库全文索引方法 | |
CN102982103A (zh) | 一种olap海量多维数据维存储方法 | |
Wang et al. | Distributed storage and index of vector spatial data based on HBase | |
CN103745008A (zh) | 一种大数据索引的排序方法 | |
CN103390038A (zh) | 一种基于HBase的构建和检索增量索引的方法 | |
CN105095520A (zh) | 面向结构化数据的分布式内存数据库索引方法 | |
CN102737123B (zh) | 一种多维数据分布方法 | |
CN104090949B (zh) | 面向水利数据整合与共享的索引方法 | |
CN106708996A (zh) | 用于对关系数据库进行全文搜索的方法及*** | |
CN104112011B (zh) | 一种海量数据提取的方法及装置 | |
CN103198151A (zh) | 区域性城市公交车辆运行信息的索引查询***及方法 | |
CN108009265B (zh) | 一种云计算环境下的空间数据索引方法 | |
CN104391908B (zh) | 一种图上基于局部敏感哈希的多关键字索引方法 | |
CN103678550A (zh) | 一种基于动态索引结构的海量数据实时查询方法 | |
CN106991149B (zh) | 一种融合编码和多版本数据的海量空间对象存储方法 | |
Wang et al. | Massive remote sensing image data management based on HBase and GeoSOT | |
CN105677625A (zh) | 多层级汇总统计报表协同填报处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140702 Termination date: 20170120 |