CN104536958B - 一种复合索引方法及装置 - Google Patents
一种复合索引方法及装置 Download PDFInfo
- Publication number
- CN104536958B CN104536958B CN201410504325.3A CN201410504325A CN104536958B CN 104536958 B CN104536958 B CN 104536958B CN 201410504325 A CN201410504325 A CN 201410504325A CN 104536958 B CN104536958 B CN 104536958B
- Authority
- CN
- China
- Prior art keywords
- key assignments
- detected
- label
- key
- bucket
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种复合索引方法,及装置。其中方法的实现包括:获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将所述合并哈希代码右移设定位得到所述待探测键值的标签;将所述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量;根据所述比较结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象。基于SIMD的并行探测每次可比较多个数据项,降低循环遍历带来的性能开销,并且避免多次计算哈希函数;待探测键值的标签属于部分键值的布谷哈希,可用降低哈希表的空间开销。
Description
技术领域
本发明实施例涉及计算机技术领域,特别涉及一种复合索引方法,及装置。
背景技术
复合索引,也叫组合索引,是大多数关系数据库***都提供的一种快速查询机制,允许用户可以在多个列上建立索引,如:
create index ComIdx on tableX(col1,col2,col3);
这种索引通常都是基于传统链式Hash(哈希)结构来实现的。链式Hash 采用链表来处理Hash碰撞问题,但若hash函数选择不当,或者数据偏斜,会造成链表过长,一方面造成大量空间浪费,另一方面使得O(1)量级的Hash查找蜕化成O(n)量级的顺序查找。
2001年提出了一种新的Hash冲突处理技术:Cuckoo Hashing(布谷哈希) 技术,其核心思想是使用2个hash函数h1和h2,为每个key产生2个候选***位置,尽量均匀的利用存储空间。
经典布谷哈希的单桶容量太小,很容易造成超长***路径,甚至无限循环,且空间利用率也不高,因此后来又陆续出现多种扩展版本,主要有以下几种改进方式:
1、通过增加哈希函数进一步提高空间利用率;
2、增加哈希表,每个哈希函数对应多个哈希表,每次选择多张表中空余位置进行放置;
3、改进存储方式,使用key-overload(键值过载)的方式存储,overload (过载)通常用一个指针引用表示。
布谷哈希作为数据库复合索引存在以下问题:1、布谷哈希需要计算多次 hash函数,同时遍历hash桶的多个数据项;2、数据库复合索引的key是多个属性的组合,每个组合类型各异,大小不一,会大大增加Hash表的结构复杂性和空间开销。因此目前布谷哈希的复合索引方案效率较低。
发明内容
本发明实施例提供了一种复合索引方法,及装置,用于提高复合索引的效率。
本发明实施例一方面提供了一种复合索引方法,包括:
获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将所述合并哈希代码右移设定位得到所述待探测键值的标签;
将所述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;
通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量;
根据比较的结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象。
结合一方面的实现方式,在第一种可能的实现方式中,所述通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量,包括:
使用第一哈希函数计算所述待探测键值所属的第一桶,使用第二哈希函数计算所述待探测键值所属的第二桶;将第一桶和第二桶中的所述待探测键值的标签的序列以所述单指令多数据流的位宽为单位进行分组存入目标寄存器中;
每次从所述第一桶中取出所述待探测键值内的设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从所述第一桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第一位掩码执行逻辑与操作;每次从所述第二桶中取出所述待探测键值内的所述设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从所述第二桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;
所述根据比较的结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象,包括:
依据所述逻辑或操作的结果确定探测是否成功,若探测成功则返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象。
结合一方面的第一种可能得实现方式,在第二种可能的实现方式中,在返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,还包括:
对所述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;
所述返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回所述键组对象的引用地址内的元组对象,否则返回探测失败。
结合一方面的第一种可能得实现方式,在第三种可能的实现方式中,所述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。
结合一方面的第三种可能得实现方式,在第四种可能的实现方式中,所述映像表为所述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在所述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。
结合一方面的第四种可能得实现方式,在第五种可能的实现方式中,所述方法,还包括:
检测所述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在所述映像表存储所述地址链的首地址。
结合一方面的第一种可能得实现方式,在第六种可能的实现方式中,在获取待探测键值之前,还包括:
构造部分键布谷哈希表,所述部分键布谷哈希表包含n个桶,所述n由所述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储所述复合索引键的待探测键值的标签,后m个槽存储复合索引在映像表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为所述单指令多数据流的位宽的整数倍。
结合一方面的第一、第二、第三、第四、第五或者第六种可能得实现方式,在第七种可能的实现方式中,所述方法,还包括:
接收待***的数据,并获取待***数据的键值的标签;所述待***数据的键值的标签由所述待***数据的键值经哈希计算得到哈希代码后右移所述设定位得到;
选择一个哈希函数计算所述待***数据的键值的标签的第一位置对应的桶i,选择另一哈希函数计算所述待***数据的键值的标签的第二位置对应的桶j;其中j为所述i与所述待***数据的键值的标签的异或结果;
若所述桶i和/或所述桶j空闲,则将所述待***的数据***任意一个空闲的桶中;若所述桶i和所述桶j均满,则按照预定算法踢出所述待***的数据将占据的条目,并将被踢出的条目作为待***数据,计算踢出的条目所属的桶,直到被踢出的条目被***桶中。
结合一方面的第七种可能得实现方式,在第八种可能的实现方式中,所述方法,还包括:
若踢出条目的次数大于预定阈值则更换用于计算待***数据的键值的标签对应的桶的哈希函数,或者增大哈希表的桶数组。
本发明实施例二方面提供了一种复合索引装置,包括:
标签计算单元,用于获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将所述合并哈希代码右移设定位得到所述待探测键值的标签;
向量计算单元,用于将所述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;
比较单元,用于通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量;
探测单元,用于根据所述比较单元的比较结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象。
结合二方面的实现方式,在第一种可能的实现方式中,所述比较单元包括:
桶计算单元,用于使用第一哈希函数计算所述待探测键值所属的第一桶,使用第二哈希函数计算所述待探测键值所属的第二桶;将第一桶和第二桶中的所述待探测键值的标签的序列以所述单指令多数据流的位宽为单位进行分组存入目标寄存器中;
比较计算单元,每次从所述第一桶中取出所述待探测键值内的设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从所述第一桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第一位掩码执行逻辑与操作;每次从所述第二桶中取出所述待探测键值内的所述设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从所述第二桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;
所述探测单元,具体用于依据所述比较计算单元计算的逻辑或操作的结果确定探测是否成功,若探测成功则返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象。
结合二方面的第一种可能得实现方式,在第二种可能的实现方式中,所述探测单元,还用于在返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,对所述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;所述返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回所述键组对象的引用地址内的元组对象,否则返回探测失败。
结合二方面的第一种可能得实现方式,在第三种可能的实现方式中,所述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。
结合二方面的第三种可能得实现方式,在第四种可能的实现方式中,所述映像表为所述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在所述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。
结合二方面的第四种可能得实现方式,在第五种可能的实现方式中,所述装置,还包括:
冗余处理单元,用于检测所述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在所述索引列的映像表存储所述地址链的首地址。
结合二方面的第一种可能得实现方式,在第六种可能的实现方式中,所述装置,还包括:
哈希表构造单元,用于在所述标签计算单元获取待探测键值之前,构造部分键布谷哈希表,所述部分键布谷哈希表包含n个桶,所述n由所述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储所述复合索引键的待探测键值的标签,后m个槽存储复合索引在映像表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为所述单指令多数据流的位宽的整数倍。
结合二方面的第一、第二、第三、第四、第五或者第六种可能得实现方式,在第七种可能的实现方式中,所述装置,还包括:
***计算单元,用于接收待***的数据,并获取待***数据的键值的标签;所述待***数据的键值的标签由所述待***数据的键值经哈希计算得到哈希代码后右移所述设定位得到;
选择一个哈希函数计算所述待***数据的键值的标签的第一位置对应的桶i,选择另一哈希函数计算所述待***数据的键值的标签的第二位置对应的桶j;其中j为所述i与所述待***数据的键值的标签的异或结果;
***执行单元,用于若所述桶i和/或所述桶j空闲,则将所述待***的数据***任意一个空闲的桶中;若所述桶i和所述桶j均满,则按照预定算法踢出所述待***的数据将占据的条目,并将被踢出的条目作为待***数据,计算踢出的条目所属的桶,直到被踢出的条目被***桶中。
结合二方面的第七种可能得实现方式,在第八种可能的实现方式中,所述装置,还包括:
***控制单元,用于若所述***执行单元踢出条目的次数大于预定阈值则更换用于计算待***数据的键值的标签对应的桶的哈希函数,或者增大哈希表的桶数组。
从以上技术方案可以看出,本发明实施例具有以下优点:基于SIMD (SingleInstruction Multiple Data,单指令多数据流)的并行探测方法,每次可比较多个数据项,降低循环遍历带来的性能开销,并且避免多次计算hash 函数;待探测键值的标签属于部分键值形式的布谷哈希,可以降低哈希表的空间开销。因此,可以提高复合索引的效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1A为本发明实施例方法流程示意图;
图1B为本发明实施例方法流程示意图;
图2为本发明实施例索引结构示意图;
图3为本发明实施例方法流程示意图;
图4为本发明实施例索引项结构示意图;
图5A为本发明实施例条目***过程示意图;
图5B为本发明实施例条目***过程示意图;
图5C为本发明实施例条目***过程示意图;
图6为本发明实施例条目***无限循环示意图;
图7为本发明实施例方法流程示意图;
图8A为本发明实施例装置结构示意图;
图8B为本发明实施例装置结构示意图;
图9为本发明实施例装置结构示意图;
图10为本发明实施例装置结构示意图;
图11为本发明实施例装置结构示意图;
图12为本发明实施例装置结构示意图;
图13为本发明实施例装置结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例提供了一种复合索引方法,如图1A所示,包括:
101A:获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将上述合并哈希代码右移设定位得到上述待探测键值的标签;
102A:将上述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;
103A:通过单指令多数据流的比较指令按组比较索引键向量和上述待探测键值的标签向量;
104A:根据比较的结果确定是否探测成功,若探测成功则返回上述待探测键值的索引地址内的元组对象。
本发明实施例,基于SIMD(Single Instruction Multiple Data,单指令多数据流)的并行探测方法,每次可比较多个数据项,降低循环遍历带来的性能开销,并且避免多次计算hash函数;待探测键值的标签属于部分键值形式的布谷哈希,可以降低哈希表的空间开销。因此,可以提高复合索引的效率。
本发明实施例还提供了以上步骤103A和104A的可选实现方案,需要说明的是按组比较的方式还可以有其他方式并不仅限于本发明实施例提供了一下方案,以下举例不应理解为对本发明实施例的唯一性限定,如图1B所示,具体如下:
101B:使用第一哈希函数计算上述待探测键值所属的第一桶,使用第二哈希函数计算上述待探测键值所属的第二桶;将第一桶和第二桶中的上述待探测键值的标签的序列以上述单指令多数据流的位宽为单位进行分组存入目标寄存器中;
102B:每次从上述第一桶中取出上述待探测键值内的设定个数键值与上述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从上述第一桶中,按与上述待探测键值的标签相同的顺序取出上述设定个数的指针,与上述第一位掩码执行逻辑与操作;每次从上述第二桶中取出上述待探测键值内的上述设定个数键值与上述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从上述第二桶中,按与上述待探测键值的标签相同的顺序取出上述设定个数的指针,与上述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;
103B:依据上述逻辑或操作的结果确定探测是否成功,若探测成功则返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象。
进一步地,由于本发明实施例采用的待探测键值的标签是缺省的键值信息,因此损失了一部分的键值信息,存在误判的可能性,因此可以继续对已经探测成功的指针指向的数据进一步进行逐个匹配来验证,避免误判,具体方案如下:在返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,还包括:
对上述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;
上述返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回上述键组对象的引用地址内的元组对象,否则返回探测失败。
本发明实施例还提供了实体表的实现方案如下:上述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。
本发明实施例还提供了映像表的构造方法,在本发明实施例中映像表对应的是Compound Keys Image Table(复合键图像表),具体如下:上述映像表为上述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在上述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。
进一步地,本发明实施例还提供了映像表中出现重复项目时的处理方法,具体如下:上述方法,还包括:检测上述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在上述索引列的映像表存储上述地址链的首地址。
本发明实施例还提供了构造Partial-Key(部分键)布谷哈希表的具体方案,如下:在获取待探测键值之前,还包括:构造部分键布谷哈希表,上述部分键布谷哈希表包含n个桶,上述n由上述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储上述复合索引键的待探测键值的标签,后m个槽存储复合索引在映像表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为上述单指令多数据流的位宽的整数倍。
本发明实施例还提供了计算索引项和计算***位置的具体方案,如下:上述方法,还包括:
接收待***的数据,并获取待***数据的键值的标签;上述待***数据的键值的标签由上述待***数据的键值经哈希计算得到哈希代码后右移上述设定位得到;
选择一个哈希函数计算上述待***数据的键值的标签的第一位置对应的桶i,选择另一哈希函数计算上述待***数据的键值的标签的第二位置对应的桶j;其中j为上述i与上述待***数据的键值的标签的异或结果;
若上述桶i和/或上述桶j空闲,则将上述待***的数据***任意一个空闲的桶中;若上述桶i和上述桶j均满,则按照预定算法踢出上述待***的数据将占据的条目,并将被踢出的条目作为待***数据,计算踢出的条目所属的桶,直到被踢出的条目被***桶中。
由于***的过程可能出现无限循环,本发明实施例提供了如下解决方案:上述方法,还包括:若踢出条目的次数大于预定阈值则更换用于计算待***数据的键值的标签对应的桶的哈希函数,或者增大哈希表的桶数组。
以下实施例将分别就本发明实施例的设备内部的存储结构、索引结构等的具体构造进行详细的举例说明。
一、核心设备的内部结构图及描述:
本发明实施例提供的SIMD敏感的基于Partial-Key(部分密钥)布谷哈希的索引结构图,如图2所示:
其中物理存储结构分为三层:从下至上依次为:Disk(磁盘)、Memory (存储器)以及SIMD register(SIMD寄存器),在图2中以横向虚线分隔。
投影(Project)是数据库的操作动词。
从中左向中右的箭头方向示意为偏移指针(offset pointer)的指向。
SIMD边界(SIMD boundary)对应第③个表。
在以上索引结构中,主要包含四个部分,包括三个表和一个SIMD寄存器,分别为:
①、实体表,以块的方式组织存储在Disk上,每个块中存储多个元组 (Tuple)。
②、索引列的映像表(即:compound keys inage table复合键图像表),该表是实体表在索引列上的投影,以顺序存储的方式分布在连续的内存页上,映像表中增设了一地址(address,Addr)列,用来存储相应元组所在磁盘物理地址,若投影后的复合索引存在多个重复值,则在映像表中消除重复值,并将每个重复值对应的元组地址构造一地址链,表中存储地址链的首地址。
③、Partial-Key布谷哈希表(partial-key cuckoo hash table,部分键布谷哈希表),该表在传统的布谷哈希表结构上进行扩展,设计n个Buckets(哈希桶),每个Buckets放置2m个Slots(槽),前m个Slots用来存放Partial-Key, 即每个Key的Tag,后m个Slots按照Tags相同的顺序存放每个Key在Image Table中的偏移地址,这样设计有利于将Tags和Pointers(指针)批量加载到 SIMD寄存器,提高数据的局部性和Cache的利用率。
④、SIMD寄存器,每次从Hash表的桶中取SIMD位宽的Tags或Pointers, 构造一个位向量加载到SIMD寄存器中进行向量运算。
基于以上索引结构,本发明实施例提供的方法实施例以复合索引结构的构建过程进行举例说明如下,图3所示,请一并参阅图2,包括如下步骤:
301:构造复合键图像表(Compound Keys Image Table),即构造图2中的表②:
对实体表(图2中的表①)的索引列进行投影操作,将其投影在内存中一个映像表中,映像表以顺序存储的方式分布在连续的内存页上,表增加一地址列,用来存储相应元组所在磁盘物理地址,若复合索引存在多条对应元组,则构造一地址链,表中存储地址链的首地址
302:构造Partial-Key(部分键)布谷哈希表;
部分键的布谷哈希表由n个Buckets(桶)构成,n的大小由映像表的size (大小)和最大填充度阈值共同决定,每个Bucket由2m个Slots(槽)组成,其中前m个Slots用来存储每个复合索引键的Partial-Key(部分键),称之为 Tag(标签),后m个Slots用来存储每个复合索引在映像表中的偏移地址指针 offset pointer,Tag与pointer需成对存储和维护,且需要保持顺序一致性,这样设计是为了提高数据的局部性,提高Cache的命中率。
因Tags需要以SIMD位宽为单位加载到SIMD寄存器中,为使内存对齐, m的大小需满足使得单个桶中所有Slots中的Tags的总位长为SIMD位宽的整数倍。假若每个Tag为32位,SIMD位宽为128,则m必须设置为4的整数倍
303:构造索引项;
从映像表中任取一个键组(key1,key2,…,keyk),对每个键Keyi依据其数据类型不同,选择合适的hash函数hi,计算其hashcode(哈希代码)值hi(keyi),再利用Hash合并函数hm,将k个hashcode进行Merge(合并),得到合并后的hashcode值hm(h1(key1),h2(key2),…,hk(keyk)),记作MergeHashCode,如图4所示。
304:计算***位置;
设计一个哈希函数Hb1,其输入为一个正整数MergeHashCode,输出一个0~n-1之间的随机整数,n为桶数组的size。
那么计算得到的桶i为:i=Hb1(MergeHashCode)
另一个候选位置j的计算以Hb2哈希函数来计算,因为Cuckoo Hash(布谷哈希)在***时,会频繁踢出已经存在Slot中的其他Item(条目),而计算被踢出的Item的另一个***位置时,必须依赖全键,这就会造成频繁的引用开销,为避免***时的引用开销,又能快速定位另一个候选***位置,因此在设计Hb2哈希函数时需要一定的技巧,这里给出一个设计方案:
uint32 Tag=MergeHashCode>>x;//Tag即Partial-Key
j=i xor Tag;
可见上式中j是一个部分依赖于i的随机变量,依赖程度取决于右移所舍弃的位数X的大小决定,即Tag引入的随机量大小。之所以这么设计,是因为i能够被以j和Tag为参数的计算公式重新计算出来,如下式:
i=j xor Tag
因为xor操作具有可逆性,这一特性确保索引项在候选的两个bucket之间移动时,无论索引下标是i还是j,从一个候选索引idx计算其对应的另一个候选索引idx’是可能的,只要tag与Pointer同时存储在idx桶中相应的Slot 上,即:
idx’=idx XOR tag
这样,***操作能够使用hash表中Slot所存储的Tag信息,而不用检索全键keys值,也可计算出相互对应的候选bucket(桶)索引,如此,即可减少Pointer的引用开销。
305:***索引项。
计算i和j,构造***的索引项的条目X(ItemX),ItemX在***和移动时,Tag及其对应的Pointer必须同步移动,Tag和Pointer各占用一个slot可以称为slot pair
对于两个候选桶buckets[i]和buckets[j],如果有空slot pair,则任选一空slot pair直接***ItemX;如果均满,则将buckets[i]中最先***的索引项ItemY 踢出,将ItemX***在ItemY所占据的slot pair;然后,将被踢出的ItemY作为新的***项,计算ItemY的另一个候选桶索引idx’,若桶buckets[idx’]有空slot pair,则将ItemY***在buckets[idx’]中;否则,再将buckets[idx’]中最早***的项ItemZ踢出,循环执行本段的步骤,直到找到空slot pair将被踢出的条目***为止,并完成***过程。
如图5A~5C所示,为ItemX的***过程,第一次计算得到图5A所示踢出了Itemb,***ItemX;第二次计算如图5B所示踢出了Itemg,***Itemb,第三次计算找到空闲的slotpair***被踢出的Itemg结束***过程。
在本发明实施例中,上述***过程有可能进入无限循环过程中,如图6 所示,待***的条目的键值为x,陷入无限循环的踢出条目的过程中。本发明实施例可以采用设置一个***次数的阈值(对应也是踢出条目的键值),当达到该阈值时,说明***路径已经很大,或者进入无限***循环中,应强制退出***循环,此时可以更改Hash函数或者调整hash表的桶数组n的大小,以提高容量。
基于以上复合索引结构,本发明实施例给出了探测过程,如图7所示,具体如下:
假定待探测的键值为k1,k2,…,kk,记作SearchKeys,则探测过程如图:
①、将SearchKeys(待探测的键值)进行Hash计算,计算其 <MergeHashCode>合并哈希代码。使用Tag=MergeHashCode>>x;计算 SearchKeys的Tag(类);其中>>是右移运算符;
②、将Tag按SIMD(Single Instruction Multiple Data,单指令多数据流) 位宽为基准进行复制和向量化处理,然后加载到SIMD寄存器中,下图假设 SIMD位宽为128,Tag为32位,则将Tag复制为4个双字[TS,TS,TS,TS],其中每个TS=Tag,然后加载到SIMD寄存器中;
③、用两个Hash函数Hb1和Hb2计算出SearchKeys的位置i和j,将桶 i和桶j中的Tags序列以SIMD位宽为单位进行分组,图7中假设Tag和Pointer (指针)都是32位,则每4个keys(键值)的Tags打包成一组,依次加入到SIMD寄存器中;
④、每次从Bucket(桶)中取4个keys的Tag加入到SIMD寄存器,如 [T1,T2,T3,T4],然后与searchKeys的Tag向量[Ts,Ts,Ts,Ts]执行SIMD的比较指令cmp-eq(cmp-eq为:比较指令,判断两组操作数是否相等),比较指令对源寄存器和目标寄存器(target)中的元素进行比较,并根据比较结果将目标寄存器中的对应双字设为全0(条件不成立)或者全1(条件成立),通过该操作会产生一个128位的位掩码mask。在本发明实施例中目标寄存器英文为target,源寄存器和目标寄存器分别存放在1组操作数中,中央处理器运算后把结果存放到目标计算器。
⑤、每次按与Tag相同的顺序依次取4个Pointers(指针)(设Pointer与 Tag都是32位),如[p1,p2,p3,p4],加载到SIMD的寄存器,然后与④所得到掩码mask执行SIMD-And(逻辑与)操作;
⑥、重复④⑤两步操作,直到两个候选桶i和j的所有Tags都加载比较完毕,并把每次SIMD-And的结果与前次SIMD-AND的结果执行SIMD-OR (逻辑或)操作;
⑦经过多次的SIMD-OR操作,最终匹配的结果保留在SIMD位向量的寄存器中,通过执行SIMD-OR-Across操作,将结果Px置放在SIMD最左边的 Slot中;
在本步骤中,目标寄存器和源寄存器是存在两个操作寄存器的情况下相对而言的,这里就是存放结果的寄存器不用特指,也可以不是专用寄存器。
⑧、通过SIMD的Extract操作(extact是SIMD指令中的一个,把操作向量提取到内存),将Px从SIMD位向量中提取到内存变量中,接下来判别 Px是否为0,若为0,则表明探测失败,数据表中不存在要探测的SearchKeys;若Px不为0,则继续往下处理;
⑨、由于Tag通过移位舍弃只抽取了部分键值信息,损失了一部分键值信息,存在误判的可能,所以对Tag匹配成功的指针Px所指向的Image Table (图像表)中的键组对象<(k’1,k’2,…,k’k),Addr>(和起始的搜索键k1,k2,…, kk相对,这里指最后检索到的结果,Addr是索引值,指向具体数据),还需要继续对k’1,k’2,…,k’k逐个匹配,若成功,则根据Addr引用地址返回元组对象,否则,探测失败,返回为空。
说明:虽然存在误判,但由于经过Tag比较的过滤,因此只要Tag标记设计的合理,保留有足够的键值信息,可使误判率保持在较低的水平。
在本发明实施例中,Image Table可以不局限于内存中,探测时加载即可。
另外,构造索引项的方法可以有很多种,计算结果满足重复率较低,可以较好的代表索引内容即可。如:可以把候选键拼接成有序字符串,然后计算Hash值等。另外,候选位置可以扩展为多个,也可以采用其公式计算候选位置的切换关系。
本发明实施例,改进了传统链式Hash的存储空间和查询效率问题,可利用较少的计算换取较大的空间利用率,且能保证在Hash碰撞较大的情况下,仍能够带来平均O(1)量级的查询效率。通过对布谷哈希表的改造,利用现代处理器的向量运算和并行处理能力,提高了探测算法的执行效率。
本发明实施例还提供了一种复合索引装置,如图8A所示,包括:
标签计算单元801,用于获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将上述合并哈希代码右移设定位得到上述待探测键值的标签;
向量计算单元802,用于将上述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;
比较单元803,用于通过单指令多数据流的比较指令按组比较索引键向量和上述待探测键值的标签向量;
探测单元804,用于根据上述比较单元的比较结果确定是否探测成功,若探测成功则返回上述待探测键值的索引地址内的元组对象。
本发明实施例,基于SIMD的并行探测方案,每次可比较多个数据项,降低循环遍历带来的性能开销,并且避免多次计算hash函数;待探测键值的标签属于部分键值形式的布谷哈希,可以降低哈希表的空间开销。因此,可以提高复合索引的效率。
本发明实施例还提供了以上比较单元和探测单元的可选实现方案,需要说明的是按组比较的方式还可以有其他方式并不仅限于本发明实施例提供了一下方案,以下举例不应理解为对本发明实施例的唯一性限定,如图8B所示,具体如下:比较单元803包括:桶计算单元801B和比较计算单元802B;
桶计算单元801B,用于使用第一哈希函数计算上述待探测键值所属的第一桶,使用第二哈希函数计算上述待探测键值所属的第二桶;将第一桶和第二桶中的上述待探测键值的标签的序列以上述单指令多数据流的位宽为单位进行分组存入目标寄存器中;
比较计算单元802B,每次从上述第一桶中取出上述待探测键值内的设定个数键值与上述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从上述第一桶中,按与上述待探测键值的标签相同的顺序取出上述设定个数的指针,与上述第一位掩码执行逻辑与操作;每次从上述第二桶中取出上述待探测键值内的上述设定个数键值与上述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从上述第二桶中,按与上述待探测键值的标签相同的顺序取出上述设定个数的指针,与上述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;
上述探测单元804,具体用于依据上述比较计算单元802B计算的逻辑或操作的结果确定探测是否成功,若探测成功则返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象。
进一步地,由于本发明实施例采用的待探测键值的标签是缺省的键值信息,因此损失了一部分的键值信息,存在误判的可能性,因此可以继续对已经探测成功的指针指向的数据进一步进行逐个匹配来验证,避免误判,具体方案如下:上述探测单元804,还用于在返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,对上述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;上述返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回上述键组对象的引用地址内的元组对象,否则返回探测失败。
本发明实施例还提供了实体表的实现方案如下:可选地,上述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。
本发明实施例还提供了映像表的构造方案,在本发明实施例中映像表对应的是Compound Keys Image Table(复合键图像表),具体如下:上述映像表为上述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在上述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。
进一步地,本发明实施例还提供了映像表中出现重复项目时的处理方案,具体如下:如图9所示,上述装置,还包括:
冗余处理单元901,用于检测上述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在上述索引列的映像表存储上述地址链的首地址。
进一步地,本发明实施例还提供了构造Partial-Key(部分键)布谷哈希表的具体方案,如下:如图10所示,上述装置,还包括:
哈希表构造单元1001,用于在上述标签计算单元801获取待探测键值之前,构造部分键布谷哈希表,上述部分键布谷哈希表包含n个桶,上述n由上述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储上述复合索引键的待探测键值的标签,后m个槽存储复合索引在映像表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为上述单指令多数据流的位宽的整数倍。
进一步地,本发明实施例还提供了计算索引项和计算***位置的具体方案,如下:如图11所示,上述装置,还包括:
***计算单元1101,用于接收待***的数据,并获取待***数据的键值的标签;上述待***数据的键值的标签由上述待***数据的键值经哈希计算得到哈希代码后右移上述设定位得到;
选择一个哈希函数计算上述待***数据的键值的标签的第一位置对应的桶i,选择另一哈希函数计算上述待***数据的键值的标签的第二位置对应的桶j;其中j为上述i与上述待***数据的键值的标签的异或结果;
***执行单元1102,用于若上述桶i和/或上述桶j空闲,则将上述待***的数据***任意一个空闲的桶中;若上述桶i和上述桶j均满,则按照预定算法踢出上述待***的数据将占据的条目,并将被踢出的条目作为待***数据,计算踢出的条目所属的桶,直到被踢出的条目被***桶中。
进一步地,由于***的过程可能出现无限循环,本发明实施例提供了如下解决方案:如图12所示,上述装置,还包括:
***控制单元1201,用于若上述***执行单元踢出条目的次数大于预定阈值则更换用于计算待***数据的键值的标签对应的桶的哈希函数,或者增大哈希表的桶数组。
本发明实施例还提供了另一种复合索引装置,如图13所示,包括:接收器1301、发射器1302、处理器1303,以及存储器1304;
其中,处理器1303,用于获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将上述合并哈希代码右移设定位得到上述待探测键值的标签;
将上述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;
通过单指令多数据流的比较指令按组比较索引键向量和上述待探测键值的标签向量;
根据比较的结果确定是否探测成功,若探测成功则返回上述待探测键值的索引地址内的元组对象。
本发明实施例,基于SIMD(Single Instruction Multiple Data,单指令多数据流)的并行探测方案,每次可比较多个数据项,降低循环遍历带来的性能开销,并且避免多次计算hash函数;待探测键值的标签属于部分键值形式的布谷哈希,可以降低哈希表的空间开销。因此,可以提高复合索引的效率。
本发明实施例还提供了以上按组比较以及返回元组对象的可选实现方案,需要说明的是按组比较的方式还可以有其他方式并不仅限于本发明实施例提供了一下方案,以下举例不应理解为对本发明实施例的唯一性限定,具体如下:
上述处理器1303,具体用于使用第一哈希函数计算上述待探测键值所属的第一桶,使用第二哈希函数计算上述待探测键值所属的第二桶;将第一桶和第二桶中的上述待探测键值的标签的序列以上述单指令多数据流的位宽为单位进行分组存入目标寄存器中;
每次从上述第一桶中取出上述待探测键值内的设定个数键值与上述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从上述第一桶中,按与上述待探测键值的标签相同的顺序取出上述设定个数的指针,与上述第一位掩码执行逻辑与操作;每次从上述第二桶中取出上述待探测键值内的上述设定个数键值与上述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从上述第二桶中,按与上述待探测键值的标签相同的顺序取出上述设定个数的指针,与上述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;
依据上述逻辑或操作的结果确定探测是否成功,若探测成功则返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象。
进一步地,由于本发明实施例采用的待探测键值的标签是缺省的键值信息,因此损失了一部分的键值信息,存在误判的可能性,因此可以继续对已经探测成功的指针指向的数据进一步进行逐个匹配来验证,避免误判,具体方案如下:处理器1303,还用于在返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,对上述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;
上述返回上述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回上述键组对象的引用地址内的元组对象,否则返回探测失败。
本发明实施例还提供了实体表的实现方案如下:上述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。
本发明实施例还提供了映像表的构造方案,在本发明实施例中映像表对应的是Compound Keys Image Table(复合键图像表),具体如下:上述映像表为上述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在上述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。
进一步地,本发明实施例还提供了映像表中出现重复项目时的处理方案,具体如下:处理器1303,还用于检测上述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在上述索引列的映像表存储上述地址链的首地址。
本发明实施例还提供了构造Partial-Key(部分键)布谷哈希表的具体方案,如下:处理器1303,还用于在获取待探测键值之前,构造部分键布谷哈希表,上述部分键布谷哈希表包含n个桶,上述n由上述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储上述复合索引键的待探测键值的标签,后m个槽存储复合索引在映像表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为上述单指令多数据流的位宽的整数倍。
本发明实施例还提供了计算索引项和计算***位置的具体方案,如下:处理器1303,还用于接收待***的数据,并获取待***数据的键值的标签;上述待***数据的键值的标签由上述待***数据的键值经哈希计算得到哈希代码后右移上述设定位得到;
选择一个哈希函数计算上述待***数据的键值的标签的第一位置对应的桶i,选择另一哈希函数计算上述待***数据的键值的标签的第二位置对应的桶j;其中j为上述i与上述待***数据的键值的标签的异或结果;
若上述桶i和/或上述桶j空闲,则将上述待***的数据***任意一个空闲的桶中;若上述桶i和上述桶j均满,则按照预定算法踢出上述待***的数据将占据的条目,并将被踢出的条目作为待***数据,计算踢出的条目所属的桶,直到被踢出的条目被***桶中。
由于***的过程可能出现无限循环,本发明实施例提供了如下解决方案:上述处理器1303,还用于若踢出条目的次数大于预定阈值则更换用于计算待***数据的键值的标签对应的桶的哈希函数,或者增大哈希表的桶数组。
值得注意的是,上述装置只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各方法实施例中的全部或部分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (18)
1.一种复合索引方法,其特征在于,包括:
获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将所述合并哈希代码右移设定位得到所述待探测键值的标签;
将所述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;
通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量;
根据比较的结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象。
2.根据权利要求1所述方法,其特征在于,所述通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量,包括:
使用第一哈希函数计算所述待探测键值所属的第一桶,使用第二哈希函数计算所述待探测键值所属的第二桶;将第一桶和第二桶中的所述待探测键值的标签的序列以所述单指令多数据流的位宽为单位进行分组存入目标寄存器中;
每次从所述第一桶中取出所述待探测键值内的设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从所述第一桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第一位掩码执行逻辑与操作;每次从所述第二桶中取出所述待探测键值内的所述设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从所述第二桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;
所述根据比较的结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象,包括:
依据所述逻辑或操作的结果确定探测是否成功,若探测成功则返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象。
3.根据权利要求2所述方法,其特征在于,在返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,还包括:
对所述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;
所述返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回所述键组对象的引用地址内的元组对象,否则返回探测失败。
4.根据权利要求2所述方法,其特征在于,所述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。
5.根据权利要求4所述方法,其特征在于,所述映像表为所述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在所述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。
6.根据权利要求5所述方法,其特征在于,还包括:
检测所述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在所述映像表存储所述地址链的首地址。
7.根据权利要求2所述方法,其特征在于,在获取待探测键值之前,还包括:
构造部分键布谷哈希表,所述部分键布谷哈希表包含n个桶,所述n由所述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储所述复合索引键的待探测键值的标签,后m个槽存储复合索引在映像表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为所述单指令多数据流的位宽的整数倍。
8.根据权利要求2至7任意一项所述方法,其特征在于,还包括:
接收待***的数据,并获取待***数据的键值的标签;所述待***数据的键值的标签由所述待***数据的键值经哈希计算得到哈希代码后右移所述设定位得到;
选择一个哈希函数计算所述待***数据的键值的标签的第一位置对应的桶i,选择另一哈希函数计算所述待***数据的键值的标签的第二位置对应的桶j;其中j为所述i与所述待***数据的键值的标签的异或结果;
若所述桶i和/或所述桶j空闲,则将所述待***的数据***任意一个空闲的桶中;若所述桶i和所述桶j均满,则按照预定算法踢出所述待***的数据将占据的条目,并将被踢出的条目作为待***数据,计算踢出的条目所属的桶,直到被踢出的条目被***桶中。
9.根据权利要求8所述方法,其特征在于,还包括:
若踢出条目的次数大于预定阈值则更换用于计算待***数据的键值的标签对应的桶的哈希函数,或者增大哈希表的桶数组。
10.一种复合索引装置,其特征在于,包括:
标签计算单元,用于获取待探测键值,对待探测键值进行哈希计算,得到合并哈希代码;将所述合并哈希代码右移设定位得到所述待探测键值的标签;
向量计算单元,用于将所述待探测键值的标签以单指令多数据流的位宽为基准进行复制和向量化处理得到待探测键值的标签向量;
比较单元,用于通过单指令多数据流的比较指令按组比较索引键向量和所述待探测键值的标签向量;
探测单元,用于根据所述比较单元的比较结果确定是否探测成功,若探测成功则返回所述待探测键值的索引地址内的元组对象。
11.根据权利要求10所述装置,其特征在于,所述比较单元包括:
桶计算单元,用于使用第一哈希函数计算所述待探测键值所属的第一桶,使用第二哈希函数计算所述待探测键值所属的第二桶;将第一桶和第二桶中的所述待探测键值的标签的序列以所述单指令多数据流的位宽为单位进行分组存入目标寄存器中;
比较计算单元,每次从所述第一桶中取出所述待探测键值内的设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第一位掩码;从所述第一桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第一位掩码执行逻辑与操作;每次从所述第二桶中取出所述待探测键值内的所述设定个数键值与所述探测键值的标签向量进行比较,并记录比较结果得到第二位掩码;从所述第二桶中,按与所述待探测键值的标签相同的顺序取出所述设定个数的指针,与所述第二位掩码执行逻辑与操作;将两次逻辑与操作得到的值进行逻辑或操作,直到第一桶内和第二桶内的所有待探测键值比较完毕;
所述探测单元,具体用于依据所述比较计算单元计算的逻辑或操作的结果确定探测是否成功,若探测成功则返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象。
12.根据权利要求11所述装置,其特征在于,
所述探测单元,还用于在返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象之前,对所述操作结果的指针所指向的映像表中的键组对象的成员逐个匹配;所述返回所述操作结果的指针所指向的映像表中的键组对象的引用地址内的元组对象,包括:若匹配成功,则返回所述键组对象的引用地址内的元组对象,否则返回探测失败。
13.根据权利要求11所述装置,其特征在于,
所述元组对象存储在实体表中,实体表以块的方式组织存储在磁盘内,每个块存储预定数量的元组对象。
14.根据权利要求13所述装置,其特征在于,
所述映像表为所述实体表的索引列的投影,以顺序存储的方式分布在连续的内存页上;在所述映像表中设置有地址列,用来存储元组对象所在磁盘物理地址。
15.根据权利要求14所述装置,其特征在于,还包括:
冗余处理单元,用于检测所述映像表是否存在重复,若存在,则合并对应的元组对象,将被合并的各元组对象对应的地址以地址链的形式存储,在所述映像表存储所述地址链的首地址。
16.根据权利要求11所述装置,其特征在于,还包括:
哈希表构造单元,用于在所述标签计算单元获取待探测键值之前,构造部分键布谷哈希表,所述部分键布谷哈希表包含n个桶,所述n由所述映像表的大小和最大填充度确定,每个桶包含2m个槽;其中,前m个槽存储所述复合索引键的待探测键值的标签,后m个槽存储复合索引在映像表中的偏移地址的指针;m的大小满足使得单个桶中的所有槽中的待探测键值的标签总位长为所述单指令多数据流的位宽的整数倍。
17.根据权利要求11至16任意一项所述装置,其特征在于,还包括:
***计算单元,用于接收待***的数据,并获取待***数据的键值的标签;所述待***数据的键值的标签由所述待***数据的键值经哈希计算得到哈希代码后右移所述设定位得到;
选择一个哈希函数计算所述待***数据的键值的标签的第一位置对应的桶i,选择另一哈希函数计算所述待***数据的键值的标签的第二位置对应的桶j;其中j为所述i与所述待***数据的键值的标签的异或结果;
***执行单元,用于若所述桶i和/或所述桶j空闲,则将所述待***的数据***任意一个空闲的桶中;若所述桶i和所述桶j均满,则按照预定算法踢出所述待***的数据将占据的条目,并将被踢出的条目作为待***数据,计算踢出的条目所属的桶,直到被踢出的条目被***桶中。
18.根据权利要求17所述装置,其特征在于,还包括:
***控制单元,用于若所述***执行单元踢出条目的次数大于预定阈值则更换用于计算待***数据的键值的标签对应的桶的哈希函数,或者增大哈希表的桶数组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410504325.3A CN104536958B (zh) | 2014-09-26 | 2014-09-26 | 一种复合索引方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410504325.3A CN104536958B (zh) | 2014-09-26 | 2014-09-26 | 一种复合索引方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104536958A CN104536958A (zh) | 2015-04-22 |
CN104536958B true CN104536958B (zh) | 2018-03-16 |
Family
ID=52852486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410504325.3A Active CN104536958B (zh) | 2014-09-26 | 2014-09-26 | 一种复合索引方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104536958B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3832493A1 (en) * | 2019-12-05 | 2021-06-09 | Baidu Online Network Technology (Beijing) Co., Ltd. | Method, apparatus, electronic device and readable storage medium for data query |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170060941A1 (en) * | 2015-08-25 | 2017-03-02 | Futurewei Technologies, Inc. | Systems and Methods for Searching Heterogeneous Indexes of Metadata and Tags in File Systems |
CN108604182B (zh) * | 2015-11-20 | 2021-04-09 | 华为技术有限公司 | 产生在分布式处理***上执行的代码的装置 |
US20170177354A1 (en) * | 2015-12-18 | 2017-06-22 | Intel Corporation | Instructions and Logic for Vector-Based Bit Manipulation |
CN107066498B (zh) * | 2016-12-30 | 2020-04-14 | 成都华为技术有限公司 | 键值kv存储方法和装置 |
CN107391666B (zh) * | 2017-07-20 | 2020-09-29 | 上海达梦数据库有限公司 | 一种复合索引键值的生成方法及装置 |
CN109992986B (zh) * | 2017-12-29 | 2021-05-11 | ***通信集团上海有限公司 | 一种敏感数据的脱敏处理方法及装置 |
CN109271390B (zh) * | 2018-09-30 | 2022-03-01 | 天津大学 | 一种基于神经网络的索引数据结构及其数据检索方法 |
CN109800336B (zh) * | 2019-01-30 | 2020-12-25 | 百度在线网络技术(北京)有限公司 | 基于键值对存储***的表格实现方法、装置、设备和介质 |
CN110111203A (zh) * | 2019-05-05 | 2019-08-09 | 北京阿尔山金融科技有限公司 | 业务数据的批量操作方法、装置及电子设备 |
CN110245028B (zh) * | 2019-05-13 | 2023-08-25 | 平安科技(深圳)有限公司 | IoT-MQ的消息存储方法、装置、计算机设备和存储介质 |
CN111241108B (zh) * | 2020-01-16 | 2023-12-26 | 北京百度网讯科技有限公司 | 基于键值对kv***的索引方法、装置、电子设备和介质 |
CN113779320B (zh) * | 2021-08-18 | 2024-02-27 | 北京计算机技术及应用研究所 | 一种表项存储地址冲突的解决方法 |
CN115827698A (zh) * | 2022-12-20 | 2023-03-21 | 深圳三地一芯电子有限责任公司 | 基于ahb的数据查询方法、装置及存储主控芯片 |
CN117891414A (zh) * | 2024-03-14 | 2024-04-16 | 支付宝(杭州)信息技术有限公司 | 一种基于完美哈希的数据存储方法及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN103262058A (zh) * | 2010-12-21 | 2013-08-21 | 英特尔公司 | 利用simd进行冲突检测的机制 |
CN103294831A (zh) * | 2013-06-27 | 2013-09-11 | 中国人民大学 | 列存储数据库中基于多维数组的分组聚集计算方法 |
-
2014
- 2014-09-26 CN CN201410504325.3A patent/CN104536958B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN103262058A (zh) * | 2010-12-21 | 2013-08-21 | 英特尔公司 | 利用simd进行冲突检测的机制 |
CN103294831A (zh) * | 2013-06-27 | 2013-09-11 | 中国人民大学 | 列存储数据库中基于多维数组的分组聚集计算方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3832493A1 (en) * | 2019-12-05 | 2021-06-09 | Baidu Online Network Technology (Beijing) Co., Ltd. | Method, apparatus, electronic device and readable storage medium for data query |
Also Published As
Publication number | Publication date |
---|---|
CN104536958A (zh) | 2015-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104536958B (zh) | 一种复合索引方法及装置 | |
US10810257B2 (en) | Fast processing of path-finding queries in large graph databases | |
Liu et al. | NET–a system for extracting web data from flat and nested data records | |
Cui et al. | Online search of overlapping communities | |
US10846278B2 (en) | Dynamic updates to a semantic database using fine-grain locking | |
Bender et al. | The power of team exploration: Two robots can learn unlabeled directed graphs | |
US8266152B2 (en) | Hashed indexing | |
JP2790466B2 (ja) | 文字列検索方法及び装置 | |
Fischer et al. | Real-time simulation of multihead tape units | |
KR100638695B1 (ko) | 구조화 문서의 데이터를 검색하는 장치 및 방법 | |
Xie et al. | Fast and accurate near-duplicate image search with affinity propagation on the ImageWeb | |
Miller et al. | Tradeoffs between cost and information for rendezvous and treasure hunt | |
US10191998B1 (en) | Methods of data reduction for parallel breadth-first search over graphs of connected data elements | |
CN110310220A (zh) | 一种半全局实时立体匹配方法 | |
CN111316255A (zh) | 数据存储***以及用于提供数据存储***的方法 | |
Breslauer et al. | Simple real-time constant-space string matching | |
Arge et al. | An optimal cache-oblivious priority queue and its application to graph algorithms | |
Breslauer et al. | Simple real-time constant-space string matching | |
Zhu et al. | Parallelization of group‐based skyline computation for multi‐core processors | |
CN105843809A (zh) | 数据处理方法和装置 | |
Leu et al. | Multidimensional timestamp protocols for concurrency control | |
Fuentes-Sepúlveda et al. | Implementing the topological model succinctly | |
US7860712B2 (en) | Method of storing data in a memory circuit for AHO-corasick type character recognition automaton and corresponding storage circuit | |
US7774347B2 (en) | Vortex searching | |
Karimov | Data Structures and Algorithms in Swift |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200420 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 301, A building, room 3, building 301, foreshore Road, No. 310052, Binjiang District, Zhejiang, Hangzhou Patentee before: Huawei Technologies Co.,Ltd. |
|
TR01 | Transfer of patent right |