一種復合索引方法,及裝置的制造方法【
技術領域:
】[0001]本發(fā)明實施例涉及計算機
技術領域:
,特別涉及一種復合索引方法,及裝置?!?br>背景技術:
】[0002]復合索引,也叫組合索引,是大多數關系數據庫系統(tǒng)都提供的一種快速查詢機制,允許用戶可以在多個列上建立索引,如:[0003]createindexComIdxontableX(coll,col2,col3);[0004]這種索引通常都是基于傳統(tǒng)鏈式Hash(哈希)結構來實現的。鏈式Hash采用鏈表來處理Hash碰撞問題,但若hash函數選擇不當,或者數據偏斜,會造成鏈表過長,一方面造成大量空間浪費,另一方面使得0(1)量級的Hash查找蛻化成O(η)量級的順序查找。[0005]2001年提出了一種新的Hash沖突處理技術:CuckooHashing(布谷哈希)技術,其核心思想是使用2個hash函數hi和h2,為每個key產生2個候選插入位置,盡量均勻的利用存儲空間。[0006]經典布谷哈希的單桶容量太小,很容易造成超長插入路徑,甚至無限循環(huán),且空間利用率也不高,因此后來又陸續(xù)出現多種擴展版本,主要有以下幾種改進方式:[0007]1、通過增加哈希函數進一步提高空間利用率;[0008]2、增加哈希表,每個哈希函數對應多個哈希表,每次選擇多張表中空余位置進行放置;[0009]3、改進存儲方式,使用key-overload(鍵值過載)的方式存儲,overload(過載)通常用一個指針引用表示。[0010]布谷哈希作為數據庫復合索引存在以下問題:1、布谷哈希需要計算多次hash函數,同時遍歷hash桶的多個數據項;2、數據庫復合索引的key是多個屬性的組合,每個組合類型各異,大小不一,會大大增加Hash表的結構復雜性和空間開銷。因此目前布谷哈希的復合索引方案效率較低?!?br/>發(fā)明內容】[0011]本發(fā)明實施例提供了一種復合索引方法,及裝置,用于提高復合索引的效率。[0012]本發(fā)明實施例一方面提供了一種復合索引方法,包括:[0013]獲取待探測鍵值,對待探測鍵值進行哈希計算,得到合并哈希代碼;將所述合并哈希代碼右移設定位得到所述待探測鍵值的標簽;[0014]將所述待探測鍵值的標簽以單指令多數據流的位寬為基準進行復制和向量化處理得到待探測鍵值的標簽向量;[0015]通過單指令多數據流的比較指令按組比較索引鍵向量和所述待探測鍵值的標簽向量;[0016]根據比較的結果確定是否探測成功,若探測成功則返回所述待探測鍵值的索引地址內的元組對象。[0017]結合一方面的實現方式,在第一種可能的實現方式中,所述通過單指令多數據流的比較指令按組比較索引鍵向量和所述待探測鍵值的標簽向量,包括:[0018]使用第一哈希函數計算所述待探測鍵值所屬的第一桶,使用第二哈希函數計算所述待探測鍵值所屬的第二桶;將第一桶和第二桶中的所述待探測鍵值的標簽的序列以所述單指令多數據流的位寬為單位進行分組存入目標寄存器中;[0019]每次從所述第一桶中取出所述待探測鍵值內的設定個數鍵值與所述探測鍵值的標簽向量進行比較,并記錄比較結果得到第一位掩碼;從所述第一桶中,按與所述待探測鍵值的標簽相同的順序取出所述設定個數的指針,與所述第一位掩碼執(zhí)行邏輯與操作;每次從所述第二桶中取出所述待探測鍵值內的所述設定個數鍵值與所述探測鍵值的標簽向量進行比較,并記錄比較結果得到第二位掩碼;從所述第二桶中,按與所述待探測鍵值的標簽相同的順序取出所述設定個數的指針,與所述第二位掩碼執(zhí)行邏輯與操作;將兩次邏輯與操作得到的值進行邏輯或操作,直到第一桶內和第二桶內的所有待探測鍵值比較完畢;[0020]所述根據比較的結果確定是否探測成功,若探測成功則返回所述待探測鍵值的索引地址內的元組對象,包括:[0021]依據所述邏輯或操作的結果確定探測是否成功,若探測成功則返回所述操作結果的指針所指向的映像表中的鍵組對象的弓I用地址內的元組對象。[0022]結合一方面的第一種可能得實現方式,在第二種可能的實現方式中,在返回所述操作結果的指針所指向的映像表中的鍵組對象的引用地址內的元組對象之前,還包括:[0023]對所述操作結果的指針所指向的映像表中的鍵組對象的成員逐個匹配;[0024]所述返回所述操作結果的指針所指向的映像表中的鍵組對象的引用地址內的元組對象,包括:若匹配成功,則返回所述鍵組對象的引用地址內的元組對象,否則返回探測失敗。[0025]結合一方面的第一種可能得實現方式,在第三種可能的實現方式中,所述元組對象存儲在實體表中,實體表以塊的方式組織存儲在磁盤內,每個塊存儲預定數量的元組對象。[0026]結合一方面的第三種可能得實現方式,在第四種可能的實現方式中,所述映像表為所述實體表的索引列的投影,以順序存儲的方式分布在連續(xù)的內存頁上;在所述映像表中設置有地址列,用來存儲元組對象所在磁盤物理地址。[0027]結合一方面的第四種可能得實現方式,在第五種可能的實現方式中,所述方法,還包括:[0028]檢測所述映像表是否存在重復,若存在,則合并對應的元組對象,將被合并的各元組對象對應的地址以地址鏈的形式存儲,在所述索引列的映射表存儲所述地址鏈的首地址。[0029]結合一方面的第一種可能得實現方式,在第六種可能的實現方式中,在獲取待探測鍵值之前,還包括:[0030]構造部分鍵布谷哈希表,所述部分鍵布谷哈希表包含η個桶,所述η由所述映像表的大小和最大填充度確定,每個桶包含2m個槽;其中,前m個槽存儲所述復合索引鍵的待探測鍵值的標簽,后m個槽存儲復合索引在印象表中的偏移地址的指針;m的大小滿足使得單個桶中的所有槽中的待探測鍵值的標簽總位長為所述單指令多數據流的位寬的整數倍。[0031]結合一方面的第一、第二、第三、第四、第五或者第六種可能得實現方式,在第七種可能的實現方式中,所述方法,還包括:[0032]接收待插入的數據,并獲取待插入數據的鍵值的標簽;所述待插入數據的鍵值的標簽由所述待插入數據的鍵值經哈希計算得到哈希代碼后右移所述設定位得到;[0033]選擇一個哈希函數計算所述待插入數據的鍵值的標簽的第一位置對應的桶i,選擇另一哈希函數計算所述待插入數據的鍵值的標簽的第二位置對應的桶j;其中j為所述i與所述待插入數據的鍵值的標簽的異或結果;[0034]若所述桶i和/或所述桶j空閑,則將所述待插入的數據插入任意一個空閑的桶中;若所述桶i和所述桶j均滿,則按照預定算法踢出所述待插入的數據將占據的條目,并將被踢出的條目作為待插入數據,計算踢出的條目所屬的桶,直到被踢出的條目被插入桶中。[0035]結合一方面的第七種可能得實現方式,在第八種可能的實現方式中,所述方法,還包括:[0036]若踢出條目的次數大于預定閾值則更換用于計算待插入數據的鍵值的標簽對應的桶的哈希函數,或者增大哈希表的桶數組。[0037]本發(fā)明實施例二方面提供了一種復合索引裝置,包括:[0038]標簽計算單元,用于獲取待探測鍵值,對待探測鍵值進行哈希計算,得到合并哈希代碼;將所述合并哈希代碼右移設定位得到所述待探測鍵值的標簽;[0039]向量計算單元,用于將所述待探測鍵值的標簽以單指令多數據流的位寬為基準進行復制和向量化處理得到待探測鍵值的標簽向量;[0040]比較單元,用于通過單指令多數據流的比較指令按組比較索引鍵向量和所述待探測鍵值的標簽向量;[0041]探測單元,用于根據所述比較單元的比較結果確定是否探測成功,若探測成功則返回所述待探測鍵值的索引地址內的元組對象。[0042]結合二方面的實現方式,在第一種可能的實現方式中,所述比較單元包括:[0043]桶計算單元,用于使用第一哈希函數計算所述待探測鍵值所屬的第一桶,使用第二哈希函數計算所述待探測鍵值所屬的第二桶;將第一桶和第二桶中的所述待探測鍵值的標簽的序列以所述單指令多數據流的位寬為單位進行分組存入目標寄存器中;[0044]比較計算單元,每次從所述第一桶中取出所述待探測鍵值內的設定個數鍵值與所述探測鍵值的標簽向量進行比較,并記錄比較結果得到第一位掩碼;從所述第一桶中,按與所述待探測鍵值的標簽相同的順序取出所述設定個數的指針,與所述第一位掩碼執(zhí)行邏輯與操作;每次從所述第二桶中取出所述待探測鍵值內的所述設定個數鍵值與所述探測鍵值的標簽向量進行比較,并記錄比較結果得到第二位掩碼;從所述第二桶中,按與所述待探測鍵值的標簽相同的順序取出所述設定個數的指針,與所述第二位掩碼執(zhí)行邏輯與操作;將兩次邏輯與操作得到的值進行邏輯或操作,直到第一桶內和第二桶內的所有待探測鍵值比較完畢;[0045]所述探測單元,具體用于依據所述比較計算單元計算的邏輯或操作的結果確定探測是否成功,若探測成功則返回所述操作結果的指針所指向的映像表中的鍵組對象的引用地址內的元組對象。[0046]結合二方面的第一種可能得實現方式,在第二種可能的實現方式中,所述探測單元,還用于在返回所述操作結果的指針所指向的映像表中的鍵組對象的引用地址內的元組對象之前,對所述操作結果的指針所指向的映像表中的鍵組對象的成員逐個匹配;所述返回所述操作結果的指針所指向的映像表中的鍵組對象的引用地址內的元組對象,包括:若匹配成功,則返回所述鍵組對象的引用地址內的元組對象,否則返回探測失敗。[0047]結合二方面的第一種可能得實現方式,在第三種可能的實現方式中,所述元組對象存儲在實體表中,實體表以塊的方式組織存儲在磁盤內,每個塊存儲預定數量的元組對象。[0048]結合二方面的第三種可能得實現方式,在第四種可能的實現方式中,所述映像表為所述實體表的索引列的投影,以順序存儲的方式分布在連續(xù)的內存頁上;在所述映像表中設置有地址列,用來存儲元組對象所在磁盤物理地址。[0049]結合二方面的第四種可能得實現方式,在第五種可能的實現方式中,所述裝置,還包括:[0050]冗余處理單元,用于檢測所述映像表是否存在重復,若存在,則合并對應的元組對象,將被合并的各元組對象對應的地址以地址鏈的形式存儲,在所述索引列的映射表存儲所述地址鏈的首地址。[0051]結合二方面的第一種可能得實現方式,在第六種可能的實現方式中,所述裝置,還包括:[0052]哈希表構造單元,用于在所述標簽計算單元獲取待探測鍵值之前,構造部分鍵布谷哈希表,所述部分鍵布谷哈希表包含η個桶,所述η由所述映像表的大小和最大填充度確定,每個桶包含2m個槽;其中,前m個槽存儲所述復合索引鍵的待探測鍵值的標簽,后m個槽存儲復合索引在印象表中的偏移地址的指針;m的大小滿足使得單個桶中的所有槽中的待探測鍵值的標簽總位長為所述單指令多數據流的位寬的整數倍。[0053]結合二方面的第一、第二、第三、第四、第五或者第六種可能得實現方式,在第七種可能的實現方式中,所述裝置,當前第1頁1 2 3 4 5