一种复合索引方法,及装置的制造方法

文档序号:8223480阅读:195来源:国知局
一种复合索引方法,及装置的制造方法【
技术领域
】[0001]本发明实施例涉及计算机
技术领域
,特别涉及一种复合索引方法,及装置。【
背景技术
】[0002]复合索引,也叫组合索引,是大多数关系数据库系统都提供的一种快速查询机制,允许用户可以在多个列上建立索引,如:[0003]createindexComIdxontableX(coll,col2,col3);[0004]这种索引通常都是基于传统链式Hash(哈希)结构来实现的。链式Hash采用链表来处理Hash碰撞问题,但若hash函数选择不当,或者数据偏斜,会造成链表过长,一方面造成大量空间浪费,另一方面使得0(1)量级的Hash查找蜕化成O(η)量级的顺序查找。[0005]2001年提出了一种新的Hash冲突处理技术:CuckooHashing(布谷哈希)技术,其核心思想是使用2个hash函数hi和h2,为每个key产生2个候选插入位置,尽量均匀的利用存储空间。[0006]经典布谷哈希的单桶容量太小,很容易造成超长插入路径,甚至无限循环,且空间利用率也不高,因此后来又陆续出现多种扩展版本,主要有以下几种改进方式:[0007]1、通过增加哈希函数进一步提高空间利用率;[0008]2、增加哈希表,每个哈希函数对应多个哈希表,每次选择多张表中空余位置进行放置;[0009]3、改进存储方式,使用key-overload(键值过载)的方式存储,overload(过载)通常用一个指针引用表示。[0010]布谷哈希作为数据库复合索引存在以下问题:1、布谷哈希需要计算多次hash函数,同时遍历hash桶的多个数据项;2、数据库复合索引的key是多个属性的组合,每个组合类型各异,大小不一,会大大增加Hash表的结构复杂性和空间开销。因此目前布谷哈希的复合索引方案效率较低。【
发明内容】[0011]本发明实施例提供了一种复合索引方法,及装置,用于提高复合索引的效率。[0012]本发明实施例一方面提供了一种复合索引方法,包括:[0013]获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将所述合并哈希代码右移设定位得到所述待探测键值的标签;[0014]将所述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;[0015]通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量;[0016]根据比较的结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象。[0017]结合一方面的实现方式,在第一种可能的实现方式中,所述通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量,包括:[0018]使用第一哈希函数计算所述待探测键值所属的第一桶,使用第二哈希函数计算所述待探测键值所属的第二桶;将第一桶和第二桶中的所述待探测键值的标签的序列以所述单指令多数据流的位宽为单位进行分组存入目标寄存器中;[0019]每次从所述第一桶中取出所述待探测键值内的设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从所述第一桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第一位掩码执行逻辑与操作;每次从所述第二桶中取出所述待探测键值内的所述设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从所述第二桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;[0020]所述根据比较的结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象,包括:[0021]依据所述逻辑或操作的结果确定探测是否成功,若探测成功则返回所述操作结果的指针所指向的映像表中的键组对象的弓I用地址内的元组对象。[0022]结合一方面的第一种可能得实现方式,在第二种可能的实现方式中,在返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,还包括:[0023]对所述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;[0024]所述返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回所述键组对象的引用地址内的元组对象,否则返回探测失败。[0025]结合一方面的第一种可能得实现方式,在第三种可能的实现方式中,所述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。[0026]结合一方面的第三种可能得实现方式,在第四种可能的实现方式中,所述映像表为所述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在所述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。[0027]结合一方面的第四种可能得实现方式,在第五种可能的实现方式中,所述方法,还包括:[0028]检测所述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在所述索引列的映射表存储所述地址链的首地址。[0029]结合一方面的第一种可能得实现方式,在第六种可能的实现方式中,在获取待探测键值之前,还包括:[0030]构造部分键布谷哈希表,所述部分键布谷哈希表包含η个桶,所述η由所述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储所述复合索引键的待探测键值的标签,后m个槽存储复合索引在印象表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为所述单指令多数据流的位宽的整数倍。[0031]结合一方面的第一、第二、第三、第四、第五或者第六种可能得实现方式,在第七种可能的实现方式中,所述方法,还包括:[0032]接收待插入的数据,并获取待插入数据的键值的标签;所述待插入数据的键值的标签由所述待插入数据的键值经哈希计算得到哈希代码后右移所述设定位得到;[0033]选择一个哈希函数计算所述待插入数据的键值的标签的第一位置对应的桶i,选择另一哈希函数计算所述待插入数据的键值的标签的第二位置对应的桶j;其中j为所述i与所述待插入数据的键值的标签的异或结果;[0034]若所述桶i和/或所述桶j空闲,则将所述待插入的数据插入任意一个空闲的桶中;若所述桶i和所述桶j均满,则按照预定算法踢出所述待插入的数据将占据的条目,并将被踢出的条目作为待插入数据,计算踢出的条目所属的桶,直到被踢出的条目被插入桶中。[0035]结合一方面的第七种可能得实现方式,在第八种可能的实现方式中,所述方法,还包括:[0036]若踢出条目的次数大于预定阈值则更换用于计算待插入数据的键值的标签对应的桶的哈希函数,或者增大哈希表的桶数组。[0037]本发明实施例二方面提供了一种复合索引装置,包括:[0038]标签计算单元,用于获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将所述合并哈希代码右移设定位得到所述待探测键值的标签;[0039]向量计算单元,用于将所述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;[0040]比较单元,用于通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量;[0041]探测单元,用于根据所述比较单元的比较结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象。[0042]结合二方面的实现方式,在第一种可能的实现方式中,所述比较单元包括:[0043]桶计算单元,用于使用第一哈希函数计算所述待探测键值所属的第一桶,使用第二哈希函数计算所述待探测键值所属的第二桶;将第一桶和第二桶中的所述待探测键值的标签的序列以所述单指令多数据流的位宽为单位进行分组存入目标寄存器中;[0044]比较计算单元,每次从所述第一桶中取出所述待探测键值内的设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从所述第一桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第一位掩码执行逻辑与操作;每次从所述第二桶中取出所述待探测键值内的所述设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从所述第二桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;[0045]所述探测单元,具体用于依据所述比较计算单元计算的逻辑或操作的结果确定探测是否成功,若探测成功则返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象。[0046]结合二方面的第一种可能得实现方式,在第二种可能的实现方式中,所述探测单元,还用于在返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,对所述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;所述返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回所述键组对象的引用地址内的元组对象,否则返回探测失败。[0047]结合二方面的第一种可能得实现方式,在第三种可能的实现方式中,所述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。[0048]结合二方面的第三种可能得实现方式,在第四种可能的实现方式中,所述映像表为所述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在所述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。[0049]结合二方面的第四种可能得实现方式,在第五种可能的实现方式中,所述装置,还包括:[0050]冗余处理单元,用于检测所述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在所述索引列的映射表存储所述地址链的首地址。[0051]结合二方面的第一种可能得实现方式,在第六种可能的实现方式中,所述装置,还包括:[0052]哈希表构造单元,用于在所述标签计算单元获取待探测键值之前,构造部分键布谷哈希表,所述部分键布谷哈希表包含η个桶,所述η由所述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储所述复合索引键的待探测键值的标签,后m个槽存储复合索引在印象表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为所述单指令多数据流的位宽的整数倍。[0053]结合二方面的第一、第二、第三、第四、第五或者第六种可能得实现方式,在第七种可能的实现方式中,所述装置,当前第1页1 2 3 4 5 
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1