專利名稱:哈希數(shù)據(jù)處理方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明實施例涉及通信領(lǐng)域,尤其涉及一種哈希數(shù)據(jù)處理方法和裝置。
背景技術(shù):
哈希(以下簡稱Hash)算法是一種能夠?qū)⑷我忾L度的二進制值映射為固定長度的較小二進制值的方法。哈希算法可以表示為=Hash值=H(Key),其中Key為原始值(以下簡稱complete key), H為Hash函數(shù),Hash值為將Key按照Hash函數(shù)H映射而成的較小的二進制值。每個Hash值均指向一個Hash表,該Hash表中可以存儲有多個Hash桶,每一個Hash桶的數(shù)據(jù)格式可以為Key+標識(以下簡稱Index),如果Index和Hash桶的位置綁定,則Hash桶的數(shù)據(jù)格式中可以不包含Index。在現(xiàn)有技術(shù)中,某些Hash算法的應(yīng)用中,例如IP的流表,Key的位寬很大,例如 IPv6的流表,Key的位寬超過了 256bit,而Hash表的位寬往往受到諸多約束而十分有限,這樣一個Hash表只能存儲有限的幾個Hash桶,這會大大增加Hash沖突的概率。為了解決這一問題,現(xiàn)有技術(shù)采用一種改進的Hash存儲結(jié)構(gòu)。Hash桶內(nèi)不存儲complete key,而是用另外一個Hash函數(shù)產(chǎn)生一個壓縮的Key (以下簡稱compressed key)。Hash桶的數(shù)據(jù)格式中的 complete key 用 compressed key 替代,而 complete key 被存儲在一個 shadow 表中。在進行Hash查找時,如果在Hash桶中匹配到一個相同的compressedkey,則再用匹配的compressed key對應(yīng)的Index在shadow表中獲取completekey。舉例來說,對一個位寬為256bit的complete key, compressed key可以壓縮到20bit,這樣一個Hash桶的位寬大大被壓縮,一個Hash表可以存儲更多的Hash桶,從而大大降低了 Hash沖突的概率。在實現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題當(dāng)需要插入一個新的Key時,如果在該Hash表的Hash桶中已經(jīng)存儲有一個與該新的Key對應(yīng)的 compressed key相同的compressed key,則由于發(fā)生哈希沖突使得該Key不能存儲到該 Hash表中。
發(fā)明內(nèi)容
本發(fā)明實施例提供另一種哈希數(shù)據(jù)處理方法,包括在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的關(guān)鍵值;采用與哈希桶內(nèi)的空表項的位置對應(yīng)的哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值;將所述壓縮關(guān)鍵值存儲在所述空表項中。相應(yīng)地,本發(fā)明實施例提供一種哈希數(shù)據(jù)處理裝置,包括第二接收模塊,用于在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的關(guān)鍵值;第三生成模塊,用于采用與哈希桶內(nèi)的空表項的位置對應(yīng)的哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值;
第一存儲模塊,用于將所述壓縮關(guān)鍵值存儲在所述空表項中。本發(fā)明上述實施例在插入Key值時,對于選定的不同的Hash桶,可以采用不同的 Hash函數(shù)生成compressed key,從而使得生成compressed key所需的Hash函數(shù)可以在多個Hash函數(shù)之間切換,從而降低了哈希沖突的概率。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖
圖
圖
圖
圖
圖
具體實施例方式為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。圖I為本發(fā)明哈希數(shù)據(jù)處理方法一個實施例的流程圖,如圖I所示,本實施例的方法可以包括步驟101、在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的
關(guān)鍵值。在本實施例中,該數(shù)據(jù)處理過程可以包括但不限于編解碼處理過程、數(shù)據(jù)壓縮處理過程或數(shù)據(jù)加密處理過程。本領(lǐng)域技術(shù)人員可以了解,本實施例可以應(yīng)用在需要進行哈希變換的任何數(shù)據(jù)處理過程中。步驟102、采用哈希函數(shù)集中的一個哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的第一壓縮關(guān)鍵值,所述哈希函數(shù)集中包括至少兩個哈希函數(shù)。具體來說,Hash表中可以包括多個Hash桶,每個Hash桶可以包括多個表項,每個表項中可以存儲Hash數(shù)據(jù)。當(dāng)需要向一個Hash桶中插入Key值時,可以采用Hash函數(shù)生成與該Key值對應(yīng)的compressed key。在本實施例中,可用的Hash函數(shù)可以為Hash函數(shù)集中的至少兩個Hash函數(shù)。在實際處理過程中,可以先從該Hash函數(shù)集中選擇一個Hash 函數(shù),例如Hash函數(shù)O,然后用該Hash函數(shù)生成與該Key值對應(yīng)的compressed key。步驟103、若哈希桶中存在所述第一壓縮關(guān)鍵值,則采用所述哈希函數(shù)集中的另一哈希函數(shù)生成與所述關(guān)鍵值對應(yīng)的第二壓縮關(guān)鍵值。采用Hash函數(shù)O生成的compressed key可以被判斷是否已經(jīng)存在于哈希桶中。在現(xiàn)有技術(shù)中,若已經(jīng)存在,則判斷為Hash沖突,該Key值不能存儲到該Hash表中,需要采用其它方式,例如用TCAM或Hash級聯(lián)的方式來存儲。而在本實施例中,若采用Hash函數(shù)O 生成的compressed key已經(jīng)存在于Hash表中,貝U可以米用Hash函數(shù)集中的其它Hash函數(shù)生成與Key值對應(yīng)的compressed key。假設(shè)該Hash函數(shù)集中包括兩個Hash函數(shù),則可以采用另一個Hash函數(shù)I生成對應(yīng)的compressed key,如果米用Hash函數(shù)I生成的compressed key也存在于該Hash表中,才需要采用其它方式,例如用TCAM或Hash級聯(lián)的方式來存儲。假設(shè)該Hash函數(shù)集中包括更多個Hash函數(shù),則可以采用其它Hash函數(shù)生成對應(yīng)的compressed key,即先米用Hash函數(shù)I生成一個新的compressedkey,如果米用Hash 函數(shù)I生成的compressed key也存在于該Hash表中,再采用Hash函數(shù)2生成的新的 compressed key,只有Hash函數(shù)集中所有Hash函數(shù)生成的compressed key均已經(jīng)存在于 Hash表中,才需要采用其它方式,例如用TCAM或Hash級聯(lián)的方式來存儲。以一個Hash表存儲6個Hash桶為例,而如果只用一個Hash函數(shù)產(chǎn)生compressed key,則IM的表項,會有幾十個表項因為compressed key沖突而溢出,而應(yīng)用本實施例的方案,幾乎沒有compressed key沖突。步驟104、根據(jù)所述第二壓縮關(guān)鍵值進行數(shù)據(jù)處理。通過步驟102和步驟103的處理過程,即可獲取第二壓縮關(guān)鍵值,本領(lǐng)域技術(shù)人員可以利用該第二壓縮關(guān)鍵值進行數(shù)據(jù)處理,例如進行數(shù)據(jù)壓縮,數(shù)據(jù)加密等。本實施例在插入Key值時,可以根據(jù)是否發(fā)生沖突,在Hash函數(shù)集中的至少兩個 Hash函數(shù)之間切換,從而降低了哈希沖突的概率。下面以Hash函數(shù)集中包括兩個Hash函數(shù)為例對本發(fā)明實施例的技術(shù)方案進行詳細說明,本領(lǐng)域技術(shù)人員可以理解的是,對于Hash函數(shù)集中包括兩個以上Hash函數(shù)的情況來說,其處理過程類似,此處不再贅述。圖2為本發(fā)明哈希數(shù)據(jù)處理方法另一個實施例的流程圖,如圖2所示,本實施例的方法可以包括步驟201、在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的
關(guān)鍵值。步驟202、采用哈希函數(shù)集中的哈希函數(shù)O生成與待插入的關(guān)鍵值對應(yīng)的第一壓縮關(guān)鍵值;步驟203、判斷第一壓縮關(guān)鍵值是否已經(jīng)存在于Hash桶中,若是則執(zhí)行步驟205, 否則執(zhí)行步驟204。步驟204、將該第一壓縮關(guān)鍵值和哈希函數(shù)O的函數(shù)標識信息存儲在哈希桶中,結(jié)束。其中,函數(shù)標識信息可以存儲在所述哈希桶的擴展比特位上,且所述擴展比特位的位數(shù)與所述哈希函數(shù)集中的哈希函數(shù)的數(shù)量相對應(yīng)。具體來說,每個Hash桶的擴展比特位hash_sel可以擴展到多個比特,若Hash函數(shù)集中共有兩個Hash函數(shù),則該hash_sel可以只采用I位,O代表Hash函數(shù)O, I代表Hash 函數(shù)I ^Hash函數(shù)集中共有四個Hash函數(shù),則hash_sel可以只采用2位,00、01、10以及 11可以分別代表這四個Hash函數(shù),依次類推,不再贅述。
步驟205、采用哈希函數(shù)集中的哈希函數(shù)I生成與關(guān)鍵值對應(yīng)的第二壓縮關(guān)鍵值。步驟206、判斷第二壓縮關(guān)鍵值是否已經(jīng)存在于Hash桶中,若是則執(zhí)行步驟208, 否則執(zhí)行步驟207。步驟207、將生成所述第二壓縮關(guān)鍵值所采用的哈希函數(shù)的函數(shù)標識信息和所述第二壓縮關(guān)鍵值存儲在哈希桶中。步驟208、采用TCAM或Hash級聯(lián)的方式存儲。本實施例在插入Key值時,可以根據(jù)是否發(fā)生沖突,在Hash函數(shù)集中的至少兩個 Hash函數(shù)之間切換,從而降低了哈希沖突的概率。圖3為本發(fā)明哈希數(shù)據(jù)處理方法再一個實施例的流程圖,如圖3所示,本實施例的方法可以包括步驟301、在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的
關(guān)鍵值。在本實施例中,該數(shù)據(jù)處理過程可以包括但不限于編解碼處理過程、數(shù)據(jù)壓縮處理過程或數(shù)據(jù)加密處理過程。本領(lǐng)域技術(shù)人員可以了解,本實施例可以應(yīng)用在需要進行哈希變換的任何數(shù)據(jù)處理過程中。步驟302、采用與哈希桶內(nèi)的空表項的位置對應(yīng)的哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值。當(dāng)需要插入Key值時,可以在Hash表中選擇一個空表項。在本實施例中,各Hash 桶內(nèi)的表項對應(yīng)的Hash函數(shù)可以不同。舉例來說,該Hash函數(shù)可以與Hash桶內(nèi)的表項位置綁定,若可用的Hash函數(shù)為三個,例如Hash函數(shù)O、Hash函數(shù)I以及Hash函數(shù)2,則可以將前三分之一的表項所用的 Hash函數(shù)設(shè)為Hash函數(shù)O,將中間三分之一的表項所用的Hash函數(shù)設(shè)為Hash函數(shù)I,將后三分之一的表項所用的Hash函數(shù)設(shè)為Hash函數(shù)2。需要說明的是,本領(lǐng)域技術(shù)人員也可以采用其它劃分方式,只要保證可用的Hash函數(shù)為兩個以上即可。當(dāng)選定的空表項在Hash表的中間三分之一處時,可以采用Hash函數(shù)I生成與Key 值對應(yīng)的compressed key,當(dāng)選定的空表項在Hash表的后三分之一處時,則可以采用Hash 函數(shù)2生成與Key值對應(yīng)的compressed key。步驟303、將所述壓縮關(guān)鍵值存儲在空表項中。在生成與Key值對應(yīng)的compressed key后,即可將該compressed key存儲在該空表項中,以便后續(xù)的Hash查找。本實施例在插入Key值時,對于選定的不同的空表項,可以采用不同的Hash函數(shù)生成compressed key,從而使得生成compressed key所需的Hash函數(shù)可以在多個Hash函數(shù)之間切換,從而降低了哈希沖突的概率。進一步地,在本發(fā)明哈希數(shù)據(jù)處理方法另一個實施例中,上述步驟301可以具體包括若所述空表項處于哈希表的第一部分中,則采用第一哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值,若所述空表項處于哈希表的第二部分中,則采用第二哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值。具體來說,本實施例的Hash表可以分為第一部分和第二部分,該第一部分的表項可以對應(yīng)第一 Hash函數(shù),第二部分的表項可以對應(yīng)第二 Hash函數(shù),對于選定的空表項處于第一部分時,可以采用第一 Hash函數(shù)生成與該Key值對應(yīng)的compressed key,對于選定的空表項處于第二部分時,可以采用第二 Hash函數(shù)生成與該Key值對應(yīng)的compressed key。 舉例來說,一個Hash表中有6個Hash桶,前三個Hash桶內(nèi)的表項可以與Hash函數(shù)I綁定, 后三個Hash桶內(nèi)的表項可以與哈希函數(shù)2綁定。本實施例在插入Key值時,對于選定的不同的空表項,可以米用與Hash桶內(nèi)的表項位置綁定的Hash函數(shù)生成compressed key,從而使得生成compressed key所需的Hash 函數(shù)可以在多個Hash函數(shù)之間切換,從而降低了哈希沖突的概率。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。圖4為本發(fā)明哈希數(shù)據(jù)處理裝置一個實施例的結(jié)構(gòu)示意圖,如圖4所示,本實施例的裝置可以包括第一接收模塊11,第一生成模塊12和第二生成模塊13以及第一處理模塊14,其中第一接收模塊11用于在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的關(guān)鍵值;第一生成模塊12用于采用哈希函數(shù)集中的一個哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的第一壓縮關(guān)鍵值,所述哈希函數(shù)集中包括至少兩個哈希函數(shù);第二生成模塊13用于在哈希桶中存在所述第一壓縮關(guān)鍵值時,采用所述哈希函數(shù)集中的另一哈希函數(shù)生成與所述關(guān)鍵值對應(yīng)的第二壓縮關(guān)鍵值;第一處理模塊14用于根據(jù)所述第二壓縮關(guān)鍵值進行數(shù)據(jù)處理。本實施例的裝置的實現(xiàn)原理與圖I所示方法的實現(xiàn)原理類似,此處不再贅述。本實施例的裝置,在插入Key值時,可以根據(jù)是否發(fā)生沖突,在Hash函數(shù)集中的至少兩個Hash函數(shù)之間切換,從而降低了哈希沖突的概率。圖5為本發(fā)明哈希數(shù)據(jù)處理裝置另一個實施例的結(jié)構(gòu)示意圖,如圖5所示,本實施例的裝置在圖4所示實施例的基礎(chǔ)上可以進一步地,第一處理模塊14,包括第一判斷單元 141和第一存儲單元142,第一判斷單元141用于判斷所述哈希桶中是否存在所述第二壓縮關(guān)鍵值;第一存儲單元142用于在所述第一判斷單元判斷所述哈希桶中不存在所述第二壓縮關(guān)鍵值時,將生成所述第二壓縮關(guān)鍵值所采用的哈希函數(shù)的函數(shù)標識信息和所述第二壓縮關(guān)鍵值存儲在所述哈希桶的空表項中。本實施例的裝置的實現(xiàn)原理與圖2所示方法的實現(xiàn)原理類似,此處不再贅述。本實施例的裝置,在插入Key值時,可以根據(jù)是否發(fā)生沖突,在Hash函數(shù)集中的至少兩個Hash函數(shù)之間切換,從而降低了哈希沖突的概率。圖6為本發(fā)明哈希數(shù)據(jù)處理裝置再一個實施例的結(jié)構(gòu)示意圖,如圖6所示,本實施例的裝置可以包括第二接收模塊21、第三生成模塊22和第一存儲模塊23,其中第二接收模塊21用于在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的關(guān)鍵值;第三生成模塊22用于采用與哈希桶內(nèi)的空表項位置對應(yīng)的哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值;第一存儲模塊23用于將所述壓縮關(guān)鍵值存儲在空表項中。本實施例的裝置的實現(xiàn)原理與圖3所示方法的實現(xiàn)原理類似,此處不再贅述。本實施例的裝置,在插入Key值時,對于選定的不同的空表項,可以采用不同的Hash函數(shù)生成compressed key,從而使得生成compressed key所需的Hash函數(shù)可以在多個Hash函數(shù)之間切換,從而降低了哈希沖突的概率。進一步地,在本發(fā)明哈希數(shù)據(jù)處理裝置又一個實施例中,該第三生成模塊22可以具體用于在所述空表項位于哈希表的第一部分中時,采用第一哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值,在所述空表項位于哈希表的第二部分中時,采用第二哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值。本實施例的裝置,在插入Key值時,對于選定的不同的空表項,可以采用與Hash桶內(nèi)的表項位置綁定的Hash函數(shù)生成compressed key,從而使得生成compressed key所需的Hash函數(shù)可以在多個Hash函數(shù)之間切換,從而大大降低了哈希沖突的概率。最后應(yīng)說明的是以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種哈希數(shù)據(jù)處理方法,其特征在于,包括在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的關(guān)鍵值; 采用與哈希桶內(nèi)的空表項的位置對應(yīng)的哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值;將所述壓縮關(guān)鍵值存儲在所述空表項中。
2.根據(jù)權(quán)利要求I所述的哈希數(shù)據(jù)處理方法,其特征在于,所述采用與哈希桶內(nèi)的空表項的位置對應(yīng)的哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值,包括若所述空表項位于哈希表的第一部分中,則采用第一哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值,若所述空表項位于哈希表的第二部分中,則采用第二哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值。
3.根據(jù)權(quán)利要求I所述的哈希數(shù)據(jù)處理方法,其特征在于,所述數(shù)據(jù)處理過程至少包括編解碼處理過程、數(shù)據(jù)壓縮處理過程或數(shù)據(jù)加密處理過程。
4.一種哈希數(shù)據(jù)處理裝置,其特征在于,包括第二接收模塊,用于在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的關(guān)鍵值;第三生成模塊,用于采用與哈希桶內(nèi)的空表項的位置對應(yīng)的哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值;第一存儲模塊,用于將所述壓縮關(guān)鍵值存儲在所述空表項中。
5.根據(jù)權(quán)利要求4所述的哈希數(shù)據(jù)處理裝置,其特征在于,所述第三生成模塊具體用于在所述空表項位于哈希表的第一部分中時,采用第一哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值,在所述空表項位于哈希表的第二部分中時,采用第二哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值。
全文摘要
本發(fā)明實施例提供另一種哈希數(shù)據(jù)處理方法,包括在數(shù)據(jù)處理過程中接收數(shù)據(jù)處理指令,所述數(shù)據(jù)處理指令包括待插入的關(guān)鍵值;采用與哈希桶內(nèi)的空表項的位置對應(yīng)的哈希函數(shù)生成與待插入的關(guān)鍵值對應(yīng)的壓縮關(guān)鍵值;將所述壓縮關(guān)鍵值存儲在所述空表項中。本發(fā)明上述實施例在插入Key值時,對于選定的不同的Hash桶,可以采用不同的Hash函數(shù)生成compressedkey,從而使得生成compressed key所需的Hash函數(shù)可以在多個Hash函數(shù)之間切換,從而降低了哈希沖突的概率。
文檔編號G06F17/30GK102609509SQ201210025028
公開日2012年7月25日 申請日期2010年4月26日 優(yōu)先權(quán)日2010年4月26日
發(fā)明者易毅, 洪榮峰 申請人:華為技術(shù)有限公司