发明名称 一种面向列存储的桶内索引哈希连接方法
摘要 本发明涉及一种面向列存储的桶内索引哈希连接方法,其特征在于,步骤为:步骤1、初始化;步骤2、将数据Si按大小有序填充到相应的桶结点适当的位置中;步骤3、判断当前桶内的元素个数是否大于容忍值T,若大于则转向步骤4建立桶内索引,否则按照普通的哈希散列算法将其散列到桶中,并转向步骤5;步骤4、建立桶内索引;步骤5、建立桶内索引数组;步骤6、匹配连接。本发明的优点是:通过在桶内构建索引,克服传统哈希连接的缺陷,减少查找匹配时间,提高哈希连接的效率的哈希连接方法。
申请公布号 CN102609487B 申请公布日期 2014.04.02
申请号 CN201210019277.X 申请日期 2012.01.20
申请人 东华大学 发明人 王梅;乐嘉锦;夏小玲;郝大腾
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 上海申汇专利代理有限公司 31001 代理人 翁若莹;柏子雵
主权项 一种面向列存储的桶内索引哈希连接方法,其特征在于,步骤为:步骤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中没有此项,则数据连接不成功。
地址 201620 上海市松江区人民北路2999号