訪問哈希表的裝置和方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計算機領(lǐng)域,更為具體地,涉及一種訪問哈希表的裝置和方法?!?br>背景技術(shù):
】[0002]隨著大數(shù)據(jù)時代的到來,分布式計算在給我們帶來大量機遇的同時,也帶來了許多挑戰(zhàn)。如何獲取海量的數(shù)據(jù)信息,如何從海量的數(shù)據(jù)信息中挖掘出有更價值的信息,如何構(gòu)建高效、穩(wěn)定的大數(shù)據(jù)處理平臺和分布式計算平臺都是亟待解決的問題。[0003]無論是傳統(tǒng)的數(shù)據(jù)庫系統(tǒng),還是新興的大數(shù)據(jù)處理平臺,它們中的許多都是基于鍵-值(key-value)對的數(shù)據(jù)模型構(gòu)建的,其中,鍵也稱關(guān)鍵字。例如,各種關(guān)系型數(shù)據(jù)庫系統(tǒng),HadoopMapreduce、HadoopDryad等分布式處理平臺,MemcachecURedis等內(nèi)存計算系統(tǒng)均是采用鍵-值的數(shù)學(xué)模型而構(gòu)建的。哈希表(hashtable)是存儲鍵-值對的一種很重要的數(shù)據(jù)結(jié)構(gòu)。哈希表一般建立在內(nèi)存中,對哈希表的大量操作意味著處理器的大量的訪存操作。而對內(nèi)存的訪問恰是制約處理器性能的瓶頸,從而可知,對哈希表的操作是這一類平臺上的應(yīng)用的瓶頸。[0004]現(xiàn)有技術(shù)中,中央處理器(CPU,CentralProcessingUnit)-般包括LI緩存和L2緩存,而哈希數(shù)據(jù)與其他類型的數(shù)據(jù)共用這些通用緩存,這樣會經(jīng)常出現(xiàn)通用緩存中的哈希數(shù)據(jù)被其他類型的數(shù)據(jù)替換掉的現(xiàn)象,使得通用緩存中的哈希數(shù)據(jù)的命中率低,此時CPU不得不再次進(jìn)行訪存操作,重新從內(nèi)存中讀取被替換掉的哈希數(shù)據(jù),導(dǎo)致系統(tǒng)效率低下?!?br/>發(fā)明內(nèi)容】[0005]本發(fā)明實施例提供一種訪問哈希表的裝置和方法,以提高哈希表訪問的效率。[0006]第一方面,提供一種訪問哈希表的裝置,所述裝置包括:獲取模塊,用于獲取訪問請求,所述訪問請求包括關(guān)鍵字;第一確定模塊,用于根據(jù)所述獲取模塊獲取的所述關(guān)鍵字,確定目標(biāo)哈希地址;第二確定模塊,用于根據(jù)所述第一確定模塊確定的所述目標(biāo)哈希地址,確定哈希表緩存中是否存在命中的哈希表項,所述哈希表緩存位于通用的處理器中,且所述哈希表緩存專門用于緩存內(nèi)存中的哈希表的至少部分哈希表項,其中,所述哈希表緩存的每個緩存行用于緩存所述哈希表的一個哈希表項;第一訪問模塊,用于當(dāng)所述第二確定模塊確定所述哈希表緩存中存在命中的哈希表項時,訪問所述哈希表緩存中命中的哈希表項。[0007]結(jié)合第一方面,在第一方面的一種實現(xiàn)方式中,所述哈希表緩存包括主哈希表緩存和公共沖突緩存,所述公共沖突緩存用于存放所述至少部分哈希表項中的沖突表項,所述第二確定模塊具體用于:根據(jù)所述目標(biāo)哈希地址,確定所述主哈希表緩存中是否存在命中的哈希表項;和/或根據(jù)所述目標(biāo)哈希地址,確定所述公共沖突緩存中是否存在命中的哈希表項。[0008]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,所述主哈希表緩存包括N路緩存,所述N路緩存之間組相連,其中所述N路緩存中的每個緩存行的tag字段包括:第一字段和第二字段,所述每個緩存行的第一字段為所述每個緩存行存儲的哈希表項對應(yīng)的哈希地址的高位字段,所述每個緩存行的第二字段為所述每個緩存行存儲的哈希表項對應(yīng)的關(guān)鍵字,所述第二確定模塊具體用于:以所述目標(biāo)哈希地址的低位字段為索引,從所述N路緩存中的每路緩存中選出對應(yīng)的緩存行,得到N個緩存行;將所述N個緩存行中的每個緩存行的第一字段與所述目標(biāo)哈希地址的高位字段進(jìn)行比較;當(dāng)所述N個緩存行中的每個緩存行的第一字段與所述目標(biāo)哈希地址的高位字段均不相同時,確定所述主哈希表緩存中不存在命中的哈希表項;當(dāng)所述N個緩存行中存在第一字段與所述目標(biāo)哈希地址的高位字段相同的目標(biāo)緩存行時,比較所述目標(biāo)緩存行的第二字段與所述訪問請求包括的關(guān)鍵字是否相同;當(dāng)所述目標(biāo)緩存行的第二字段與所述訪問請求包括的關(guān)鍵字相同時,確定所述主哈希表緩存中存在命中的哈希表項;當(dāng)所述目標(biāo)緩存行的第二字段與所述訪問請求包括的關(guān)鍵字不相同時,確定所述主哈希表緩存中不存在命中的哈希表項。[0009]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,所述公共沖突緩存包括全相連結(jié)構(gòu),所述公共沖突緩存的緩存行的目標(biāo)tag字段包括第三字段和第四字段,所述第三字段為所述公共沖突緩存的緩存行存儲的哈希表項對應(yīng)的哈希地址,所述第四字段為所述公共沖突緩存的緩存行存儲的哈希表項對應(yīng)的關(guān)鍵字,所述第二確定模塊具體用于:比較所述目標(biāo)哈希地址與所述公共沖突緩存中的每個緩存行的tag字段;當(dāng)所述公共沖突緩存中各緩存行的tag字段與所述目標(biāo)哈希地址均不相同時,確定所述公共沖突緩存中不存在命中的哈希表項;當(dāng)所述公共沖突緩存中存在tag字段與所述目標(biāo)哈希地址相同的目標(biāo)緩存行時,比較所述目標(biāo)緩存行的第四字段與所述訪問請求包括的關(guān)鍵字;當(dāng)所述目標(biāo)緩存行的第四字段與所述訪問請求包括的關(guān)鍵字相同時,確定所述公共沖突緩存中存在命中的哈希表項;當(dāng)所述目標(biāo)緩存行的第四字段與所述訪問請求包括的關(guān)鍵字不相同時,確定所述公共沖突哈希緩存中不存在命中的哈希表項。[0010]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,所述訪問請求包括寫請求,所述訪問請求中還包括待寫入的數(shù)據(jù),所述第一訪問模塊具體用于:當(dāng)所述哈希表緩存中存在命中的哈希表項時,將所述待寫入的數(shù)據(jù)寫入所述哈希表緩存中的命中的哈希表項所在緩存行的data字段。[0011]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,所述訪問請求包括讀請求,所述第一訪問模塊具體用于:當(dāng)所述哈希表緩存中存在命中的哈希表項時,讀取所述哈希表緩存中的命中的哈希表項所在緩存行的data字段的內(nèi)容。[0012]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,還包括:第二訪問模塊,用于當(dāng)所述第二確定模塊確定所述哈希表緩存中不存在命中的哈希表項時,根據(jù)所述目標(biāo)哈希地址訪問所述內(nèi)存中的哈希表項。[0013]結(jié)合第一方面或其上述實現(xiàn)方式的任一種,在第一方面的另一種實現(xiàn)方式中,所述第二訪問模塊具體用于:當(dāng)所述哈希表緩存中不存在命中的哈希表項時,將當(dāng)前正在執(zhí)行的訪問請求的下一條指令的地址寫入地址寄存器,并跳轉(zhuǎn)至用于訪問內(nèi)存的指令所在的地址,其中,所述地址寄存器位于所述處理器中,用于存儲所述處理器執(zhí)行的指令的地址;根據(jù)所述訪問內(nèi)存的指令,訪問所述內(nèi)存;所述第二訪問模塊還用于:當(dāng)所述內(nèi)存訪問完畢之后,跳轉(zhuǎn)回所述地址寄存器中記錄的所述下一條指令的地址,并執(zhí)行所述下一條指令。[0014]第二方面,提供一種訪問哈希表的方法,所述方法包括:獲取訪問請求,所述訪問請求包括關(guān)鍵字;根據(jù)所述關(guān)鍵字,確定目標(biāo)哈希地址;根據(jù)所述目標(biāo)哈希地址,確定所述哈希表緩存中是否存在命中的哈希表項,所述哈希表緩存位于通用的處理器中,且所述哈希表緩存專門用于緩存內(nèi)存中的哈希表的至少部分哈希表項,其中,所述哈希表緩存的每個緩存行用于緩存所述哈希表的一個哈希表項;當(dāng)所述哈希表緩存中存在命中的哈希表項時,訪問所述哈希表緩存中命中的哈希表項。[0015]結(jié)合第二方面,在第二方面的一種實現(xiàn)方式中,所述哈希表緩存包括主哈希表緩存和公共沖突緩存,所述公共沖突緩存用于存放所述至少部分哈希表項中的沖突表項,所述根據(jù)所述目標(biāo)哈希地址,確定所述哈希表緩存中是否存在命中的哈希表項,包括:根據(jù)所述目標(biāo)哈希地址,確定所述主哈希表緩存中是否存在命中的哈希表項;和/或根據(jù)所述目標(biāo)哈希地址,確定所述公共沖突緩存中是否存在命中的哈希表項。[0016]結(jié)合第二方面或其上述實現(xiàn)方式的任一種,在第二方面的另一種實現(xiàn)方式中,所述主哈希表緩存包括N路緩存,所述N路緩存之間組相連,其中所述N路緩存中的每個緩存行的tag字段包括:第一字段和第二字段,所述每個緩存行的第一字段為所述每個緩存行存儲的哈希表項對應(yīng)的哈希地址的高位字段,所述每個緩存行的第二字段為所述每個緩存行存儲的哈希表項對應(yīng)的關(guān)鍵字,所述根據(jù)所述目標(biāo)哈希地址,確定所述主哈希表緩存中是否存在命中的哈希表項,包括:以所述目標(biāo)哈希地址的低位字段為索引,從所述N路緩存中的每路緩存中選出對應(yīng)的緩存行,得到N個緩存行;將所述N個緩存行中的每個緩存行的第一字段與所述目標(biāo)哈希地址的高位字段進(jìn)行比較;當(dāng)所述N個緩存行中的每個緩存行的第一字段與所述目標(biāo)哈希地址的高位字段均不相同時,確定所述主哈希表緩存中不存在命中的哈希表項;當(dāng)所述N個緩存行中存在第一字段與所述目標(biāo)哈希地址的高位字段相同的目標(biāo)緩存行時,比較所述目標(biāo)緩存行的第二字段與所述訪問請求包括的關(guān)鍵字是否相同;當(dāng)所述目標(biāo)緩存行的第二字段與所述訪問請求包括的關(guān)鍵字相同時,確定所述主哈希表緩存中存在命中的哈希表項;當(dāng)所述目標(biāo)緩存行的第二字段與所述訪問請求包括的關(guān)鍵字不相同時,確定所述主哈希表緩存中不存在命中的哈希表項。[0017]結(jié)合第二方面或其上述實現(xiàn)方式的任一種,在第二方面的另一種實現(xiàn)方式中,所述公共沖突緩存包括全相連結(jié)構(gòu),所述公共沖突緩存的緩存行的tag字段包括第三字段和第四字段,所述第三字段為所述公共沖突緩存的緩存行存儲的哈希表項對應(yīng)的哈希地址,所述第四字段為所述公共沖突緩存的緩存行存儲的哈希表項對應(yīng)的關(guān)鍵字,所述根據(jù)所述目標(biāo)哈希地址,確定所述公共沖突緩存中是否存在命中的哈希表項,包括:比較所述目標(biāo)哈希地址與所述公共沖突緩存中的每個緩存行的tag字段;當(dāng)所述公共沖突緩存中各緩存行的tag字段與所述目標(biāo)哈希地址均不相同時,確定所述公共沖突緩存中不存在命中的哈希表項;當(dāng)所述公共沖突緩存中存在tag字段與所述目標(biāo)哈希地址相同的目標(biāo)緩存行時,比較所述目標(biāo)緩存行的第四字段與所述訪問請求包括的關(guān)鍵當(dāng)前第1頁1 2 3 4 5