CN102609487B - 一种面向列存储的桶内索引哈希连接方法 - Google Patents
一种面向列存储的桶内索引哈希连接方法 Download PDFInfo
- Publication number
- CN102609487B CN102609487B CN201210019277.XA CN201210019277A CN102609487B CN 102609487 B CN102609487 B CN 102609487B CN 201210019277 A CN201210019277 A CN 201210019277A CN 102609487 B CN102609487 B CN 102609487B
- Authority
- CN
- China
- Prior art keywords
- data
- hash
- bucket
- index
- node
- 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.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种面向列存储的桶内索引哈希连接方法,其特征在于,步骤为:步骤1、初始化;步骤2、将数据Si按大小有序填充到相应的桶结点适当的位置中;步骤3、判断当前桶内的元素个数是否大于容忍值T,若大于则转向步骤4建立桶内索引,否则按照普通的哈希散列算法将其散列到桶中,并转向步骤5;步骤4、建立桶内索引;步骤5、建立桶内索引数组;步骤6、匹配连接。本发明的优点是:通过在桶内构建索引,克服传统哈希连接的缺陷,减少查找匹配时间,提高哈希连接的效率的哈希连接方法。
Description
技术领域
本发明涉及一种面向列存储的桶内索引哈希连接方法,适用于基于二元表即<行号,列值>的列存储数据库管理系统环境。
背景技术
连接(Join)在数据查询中占有非常重的比重,特别是在列存储数据系统中尤为重要。除了用户查询所需要的连接操作外,为了把各列数据重新合并成行,很多情况下就需要额外的同表各列的连接。数据库中的经典连接算法有嵌套循环连接、合并连接和哈希连接等实现方式。其中哈希连接是一种高效的连接算法,多数情况下其表现均优于传统的嵌套循环连接和合并连接。
然而哈希连接也存在一些缺陷,主要表现在两个方面。一是难以选择合适的桶数,二是难以选择恰当的散列函数。由于列存储分析型应用中数据往往具有“海量特点”,使得桶数和散列函数更加难以选择,上述问题表现更加明显。首先,若桶数过少,每个桶内的数据个数可能就会太多而致使连接效率低下,而如果桶数太多则又会造成内存浪费和管理成本的增加。其次,由于每次哈希连接所处理的数据特性都不同,很难找到一个通用的哈希函数使数据都能很好的均匀散列,因此选择一个通用的哈希散列函数也十分困难。
发明内容
本发明的目的是提供一种通过在桶内构建索引,克服传统哈希连接的缺陷,减少查找匹配时间,提高哈希连接的效率的哈希连接方法。
为了达到上述目的,本发明的技术方案是提供了一种面向列存储的桶内索引哈希连接方法,其特征在于,步骤为:
步骤1、初始化:解析哈希连接两表信息,确定哈希对象小表S,判断哈希关键字,初始化哈希表HT,设置桶的个数为B,散列函数为f(x);
步骤2、先创建桶结点,随后,对哈希对象小表S中数据Si使用散列函数f(x)计算哈希值,再根据计算的值将数据Si按大小有序填充到相应的桶结点适当的位置中,若数据按哈希关键字无序,桶内数据采用链表存储,若数据按哈希关键字有序,桶内数据采用数组存储,初始情况下仅为每个桶生成一个大小为容忍值长度的数组,当桶内的元组个数超过容忍值T时,再新动态生成一个容忍值长度的数组,填充时填充到当前数组尾部;
步骤3、判断当前桶内的元素个数是否大于容忍值T,若大于则转向步骤4建立桶内索引,否则按照普通的哈希散列算法将其散列到桶中,并转向步骤5;
步骤4、建立桶内索引:从第一个数据开始,将该数据重新插入到桶中,插入第一条数据记录时,建立第一个索引节点,该节点索引第一条记录位置,当有新的数据进入该桶时,首先查桶内索引链,找到合适的索引节点,从此索引节点索引的的第一个数据位置开始对比找到合适位置后插入,若此索引节点中数据个数count值超过容忍值T时,就从当前插入数据的位置,将这个索引节点一分为二,同时为新的索引节点赋值,该过程反复进行,直到每个索引节点中数据个数均小于容忍值T;
步骤5、建立桶内索引数组:当表中所有数据插入完成后,将各个桶的索引节点,按索引数据最小值的顺序存生成该表的索引数组,便于二分法查找;
步骤6、匹配连接:建立上述哈希桶后,利用桶内索引,进行匹配连接。
优选地,所述步骤6包括:
步骤6.1、取哈希大表中数据进行连接,该数据经过散列函数f(x)计算后,找到对应的桶;
步骤6.2、首先二分查找此桶对应的索引节点数组,找到对应的索引节点后,若数据按哈希关键字有序,则可取出对应的数组,继续使用二分查找;若数据按哈希关键字无序,则从索引节点中读出此索引节点中的第一条数据的位置,接下来从哈希大表中取出的数据就从该位置起依次与桶中数据一一比对;
步骤6.3、若遇到相同值则连接成功,并继续进行比对,到下一个不同的值结束;如果没有遇到相同的值,则比对到下一个索引点的开始数据就可以确定小表S中没有此项,则数据连接不成功。
本发明在桶内构建索引,其好处在于:一是不用过分考虑桶的个数。在桶数较少的情况下通过桶内的索引依然可以快速定位到所需要的元素。二是不用苛求一个适用于多数数据特征的哈希函数,即便哈希函数选择不够合理导致了一定程度上的数据分布不均匀,但是在数据分布较多的桶内索引又能使系统快速查找到所需元素。特别的,根据列存储特点,在桶内索引基础上提出哈希行号,在关键字有序数据下的散列与匹配算法,进一步提升桶内查找速度,提高哈希连接效率。
本发明的优点是:通过在桶内构建索引,克服传统哈希连接的缺陷,减少查找匹配时间,提高哈希连接的效率的哈希连接方法。
具体实施方式
为使本发明更明显易懂,兹以一优选实施例详细说明如下。
本发明提供了一种面向列存储的桶内索引哈希连接方法,其步骤为:
步骤1、初始化:解析哈希连接两表信息,确定哈希对象小表S,判断哈希关键字,初始化哈希表HT,设置桶的个数为B,散列函数为f(x),该散列函数即为哈希函数;
步骤2、先创建桶节点,随后,对哈希对象小表S中数据Si使用散列函数f(x)计算哈希值,再根据计算的值将数据Si按大小有序填充到相应的桶结点适当的位置中,若数据按哈希关键字无序,桶内数据采用链表存储,若数据按哈希关键字有序,桶内数据采用数组存储,初始情况下仅为每个桶生成一个大小为容忍值长度的数组,当桶内的元组个数超过容忍值T时,再新动态生成一个容忍值长度的数组,填充时填充到当前数组尾部;
步骤3、判断当前桶内的元素个数是否大于容忍值T,若大于则转向步骤4建立桶内索引,否则按照普通的哈希散列算法将其散列到桶中,并转向步骤5;
步骤4、建立桶内索引:从第一个数据开始,将该数据重新插入到桶中,插入第一条数据记录时,建立第一个索引节点,该节点索引第一条记录位置,当有新的数据进入该桶时,首先查桶内索引链,找到合适的索引节点,从此索引节点索引的的第一个数据位置开始对比找到合适位置后插入,若此索引节点中数据个数count值超过容忍值T时,就从当前插入数据的位置,将这个索引节点一分为二,同时为新的索引节点赋值,该过程反复进行,直到每个索引节点中数据个数均小于容忍值T;
步骤5、建立桶内索引数组:当表中所有数据插入完成后,将各个桶的索引节点,按索引数据最小值的顺序存生成该表的索引数组,便于二分法查找;
步骤6、匹配连接:建立上述哈希桶后,利用桶内索引,进行匹配连接,其步骤包括:
步骤6.1、取哈希大表中数据进行连接,该数据经过散列函数f(x)计算后,找到对应的桶;
步骤6.2、首先二分查找此桶对应的索引节点数组,找到对应的索引节点后,若数据按哈希关键字有序,则可取出对应的数组,继续使用二分查找;若数据按哈希关键字无序,则从索引节点中读出此索引节点中的第一条数据的位置,接下来从哈希大表中取出的数据就从该位置起依次与桶中数据一一比对;
步骤6.3、若遇到相同值则连接成功,并继续进行比对,到下一个不同的值结束;如果没有遇到相同的值,则比对到下一个索引点的开始数据就可以确定小表S中没有此项,则数据连接不成功。
Claims (1)
1.一种面向列存储的桶内索引哈希连接方法,其特征在于,步骤为:
步骤1、初始化:解析哈希连接两表信息,确定哈希对象小表S,判断哈希关键字,初始化哈希表HT,设置桶的个数为B,散列函数为f(x);
步骤2、先创建桶节点,随后,对哈希对象小表S中数据Si使用散列函数f(x)计算哈希值,再根据计算的值将数据Si按大小有序填充到相应的桶节点适当的位置中,若数据按哈希关键字无序,桶内数据采用链表存储,若数据按哈希关键字有序,桶内数据采用数组存储,初始情况下仅为每个桶生成一个大小为容忍值长度的数组,当桶内的元组个数超过容忍值T时,再新动态生成一个容忍值长度的数组,填充时填充到当前数组尾部;
步骤3、判断当前桶内的元素个数是否大于容忍值T,若大于则转向步骤4建立桶内索引,否则按照普通的哈希散列算法将其散列到桶中,并转向步骤5;
步骤4、建立桶内索引:从第一个数据开始,将该数据重新插入到桶中,插入第一条数据记录时,建立第一个索引节点,该节点索引第一条记录位置,当有新的数据进入该桶时,首先查桶内索引链,找到合适的索引节点,从此索引节点索引的的第一个数据位置开始对比找到合适位置后插入,若此索引节点中数据个数count值超过容忍值T时,就从当前插入数据的位置,将这个索引节点一分为二,同时为新的索引节点赋值,该过程反复进行,直到每个索引节点中数据个数均小于容忍值T;
步骤5、建立桶内索引数组: 当表中所有数据插入完成后,将各个桶的索引节点,按索引数据最小值的顺序生成该表的索引数组,便于二分法查找;
步骤6、匹配连接:建立上述哈希桶后,利用桶内索引,进行匹配连接,所述步骤6包括:
步骤6.1、取哈希大表中数据进行连接,该数据经过散列函数f(x)计算后,找到对应的桶;
步骤6.2、首先二分查找此桶对应的索引数组,找到对应的索引节点后,若数据按哈希关键字有序,则可取出对应的数组,继续使用二分查找;若数据按哈希关键字无序,则从索引节点中读出此索引节点中的第一条数据的位置,接下来从哈希大表中取出的数据就从该位置起依次与桶中数据一一对比;
步骤6.3、若遇到相同值则连接成功,并继续进行对比,到下一个不同的值结束;如果没有遇到相同的值,则对比到下一个索引节点的开始数据就可以确定哈希对象小表S中没有此项,则数据连接不成功。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210019277.XA CN102609487B (zh) | 2012-01-20 | 2012-01-20 | 一种面向列存储的桶内索引哈希连接方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210019277.XA CN102609487B (zh) | 2012-01-20 | 2012-01-20 | 一种面向列存储的桶内索引哈希连接方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102609487A CN102609487A (zh) | 2012-07-25 |
CN102609487B true CN102609487B (zh) | 2014-04-02 |
Family
ID=46526859
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210019277.XA Expired - Fee Related CN102609487B (zh) | 2012-01-20 | 2012-01-20 | 一种面向列存储的桶内索引哈希连接方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102609487B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104008111B (zh) * | 2013-02-27 | 2019-02-15 | 深圳市腾讯计算机系统有限公司 | 一种数据的存储管理方法及装置 |
CN104679757B (zh) * | 2013-11-27 | 2018-10-12 | 华为技术有限公司 | 数据处理方法及设备 |
CN105022763B (zh) * | 2014-04-30 | 2019-03-26 | 深圳市东方博雅科技有限公司 | 实现数据查询的方法和系统 |
CN107169097A (zh) * | 2017-05-15 | 2017-09-15 | 郑州云海信息技术有限公司 | 一种Spark Broadcasthashjoin操作的改进方法 |
CN110807030B (zh) * | 2019-09-27 | 2021-03-16 | 蚂蚁金服(杭州)网络技术有限公司 | 一种数据连接的方法、装置及电子设备 |
CN112199333B (zh) * | 2020-09-24 | 2022-11-22 | 武汉绿色网络信息服务有限责任公司 | 一种支持多值索引文件的存储方法和装置 |
CN112835907A (zh) * | 2021-02-08 | 2021-05-25 | 兴业数字金融服务(上海)股份有限公司 | 多次散列存储方法及系统 |
CN113111033A (zh) * | 2021-04-07 | 2021-07-13 | 山东英信计算机技术有限公司 | 一种分布式对象存储系统中桶索引动态重分的方法和系统 |
CN113672619B (zh) * | 2021-08-17 | 2024-02-06 | 天津南大通用数据技术股份有限公司 | 一种按照hash规则切分数据使其更均匀的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060218176A1 (en) * | 2005-03-24 | 2006-09-28 | International Business Machines Corporation | System, method, and service for organizing data for fast retrieval |
-
2012
- 2012-01-20 CN CN201210019277.XA patent/CN102609487B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
Non-Patent Citations (3)
Title |
---|
列存储数据查询中的连接策略选择方法;李静等;《计算机科学与探索》;20101231;第9卷(第4期);第850-858页 * |
张琦等.列存储数据仓库查询执行中重用缓冲区调度算法.《计算机研究与发展》.2011,第10卷(第48期),第1942-1950页. * |
李静等.列存储数据查询中的连接策略选择方法.《计算机科学与探索》.2010,第9卷(第4期),第850-858页. |
Also Published As
Publication number | Publication date |
---|---|
CN102609487A (zh) | 2012-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102609487B (zh) | 一种面向列存储的桶内索引哈希连接方法 | |
US11651036B2 (en) | Integrated index blocks and searching in blockchain systems | |
CN103902702B (zh) | 一种数据存储系统和存储方法 | |
CN104090962B (zh) | 面向海量分布式数据库的嵌套查询方法 | |
CN103678583B (zh) | 结构化数据比较的方法及系统 | |
CN103902701B (zh) | 一种数据存储系统和存储方法 | |
CN104077423A (zh) | 一种基于一致性散列的结构化数据存储、查询和迁移方法 | |
CN103049521B (zh) | 可实现多属性复合条件查询的虚拟表索引系统及方法 | |
CN102929900B (zh) | 一种字符串匹配的方法及装置 | |
US8812492B2 (en) | Automatic and dynamic design of cache groups | |
CN102110171B (zh) | 基于树形结构的布鲁姆过滤器的查询与更新方法 | |
CN102609493B (zh) | 一种基于列存储模型的连接顺序查询优化方法 | |
CN104268298A (zh) | 一种创建数据库索引及其查询的方法 | |
CN106815326A (zh) | 一种检测无主键数据表一致性的系统及方法 | |
CN104636349B (zh) | 一种索引数据压缩以及索引数据搜索的方法和设备 | |
CN105204920B (zh) | 一种基于映射聚合的分布式计算作业的实现方法及装置 | |
CN102799617B (zh) | 多层Bloom Filter的构建及查询优化方法 | |
CN104112011B (zh) | 一种海量数据提取的方法及装置 | |
CN104298736A (zh) | 数据集合连接方法、装置及数据库系统 | |
CN103049473A (zh) | 一种数据查询方法及装置 | |
CN106599091A (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN105740264A (zh) | 一种分布式xml数据库的排序方法及装置 | |
CN101887458A (zh) | 一种基于路径编码的xml文档索引方法 | |
CN105447030A (zh) | 一种索引处理方法与设备 | |
CN102890719A (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: 20140402 Termination date: 20170120 |