專利名稱:基于哈希表的表項(xiàng)處理方法及其裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到通信技術(shù)領(lǐng)域,特別涉及到基于哈希表的表項(xiàng)處理方法及其裝置。
背景技術(shù):
在通信技術(shù)領(lǐng)域中,常常采用哈希算法進(jìn)行業(yè)務(wù)表項(xiàng)的精確匹配查詢。采用哈希函數(shù)對(duì)業(yè)務(wù)表項(xiàng)條目的鍵值進(jìn)行哈希運(yùn)算,得到的計(jì)算結(jié)果值與哈希表中的存儲(chǔ)空間相對(duì)應(yīng),即通過(guò)哈希運(yùn)算結(jié)果尋址,以實(shí)現(xiàn)對(duì)表項(xiàng)的存儲(chǔ)與查詢。目前的哈希存儲(chǔ)與查詢方法中,普遍存在的問(wèn)題是性能與容量之間的矛盾。在哈希運(yùn)算時(shí),雖然各個(gè)表項(xiàng)的鍵值不同,但是經(jīng)哈希函數(shù)計(jì)算獲得的運(yùn)算結(jié)果卻可能相同,這將導(dǎo)致存儲(chǔ)空間發(fā)生沖突。一方面,為了盡量減少?zèng)_突,保證查詢性能,即一次命中率,傳統(tǒng) 哈希表結(jié)構(gòu)在表項(xiàng)存儲(chǔ)時(shí)采用哈希方式排布,即通過(guò)哈希函數(shù)獲得的存儲(chǔ)地址往往不是連續(xù)的,因而哈希表的空間利用率不高,在表項(xiàng)存儲(chǔ)時(shí)會(huì)造成非常大的存儲(chǔ)空間浪費(fèi),所能存儲(chǔ)的表項(xiàng)條目不多,容量指標(biāo)無(wú)法滿足。另一方面,為了提高查找速度,傳統(tǒng)的哈希表結(jié)構(gòu)大多通過(guò)一次哈希計(jì)算結(jié)果來(lái)索引到哈希索引表進(jìn)行查找,但這將大大增加沖突的概率。
發(fā)明內(nèi)容
本發(fā)明的主要目的為提供一種提高存儲(chǔ)容量、減少?zèng)_突概率的基于哈希表的表項(xiàng)處理方法及其裝置。本發(fā)明提出一種基于哈希表的表項(xiàng)處理方法,包括步驟在表項(xiàng)存儲(chǔ)時(shí),將待存儲(chǔ)表項(xiàng)按照順序排布方式,存儲(chǔ)于結(jié)果表中;利用索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的哈希值;將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置。優(yōu)選地,所述利用索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值哈希值;將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置的步驟具體包括利用當(dāng)前索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值;在當(dāng)前哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于當(dāng)前索引表中空閑的位置;在當(dāng)前哈希值有沖突時(shí),利用下一索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的下一哈希值;在下一哈希值無(wú)沖突時(shí),將下一哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于下一索引表中空閑的位置。優(yōu)選地,所述利用當(dāng)前索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值;在當(dāng)前哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于當(dāng)前索引表中空閑的位置的步驟具體包括
利用當(dāng)前索引表的第一重哈希函數(shù),對(duì)所述待存儲(chǔ)表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在當(dāng)iu索引表中獲得對(duì)應(yīng)的索引;利用當(dāng)前索引表的第二重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值;在當(dāng)前哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。優(yōu)選地, 所述在當(dāng)前哈希值有沖突時(shí),利用下一索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的下一哈希值;在下一哈希值無(wú)沖突時(shí),將下一哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于下一索引表中空閑的位置的步驟具體包括在當(dāng)前哈希值與對(duì)應(yīng)的索引中一槽位存儲(chǔ)的哈希值發(fā)生沖突時(shí),將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在所述沖突槽位中設(shè)置沖突標(biāo)識(shí);利用下一索引表的第一重哈希函數(shù),分別對(duì)所述待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在下一索引表中分別獲得對(duì)應(yīng)的索引;利用下一索引表的第二重哈希函數(shù),分別計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值的下一哈希值;在所述待存儲(chǔ)表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將所述待存儲(chǔ)表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位;在所述沖突表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將所述沖突表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。優(yōu)選地,所述在當(dāng)前哈希值與對(duì)應(yīng)的索引中一槽位存儲(chǔ)的哈希值發(fā)生沖突時(shí),將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在所述沖突槽位中設(shè)置沖突標(biāo)識(shí)的步驟之后還包括在當(dāng)前索引表為最后一張索引表時(shí),將所述待存儲(chǔ)表項(xiàng)和沖突表項(xiàng)所在結(jié)果表的地址指針?lè)謩e存儲(chǔ)于沖突鏈表中,并將沖突鏈表指針存儲(chǔ)于最后一張索引表的沖突槽位中。優(yōu)選地,所述將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置的步驟之后還包括在表項(xiàng)查詢時(shí),利用索引表的兩重哈希函數(shù),計(jì)算待查詢鍵值的哈希值;在所述索引表中,查找所述哈希值所在位置存儲(chǔ)的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。優(yōu)選地,所述在表項(xiàng)查詢時(shí),利用索引表的兩重哈希函數(shù),計(jì)算待查詢鍵值的哈希值;在所述索引表中查找所述哈希值所在位置存儲(chǔ)的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)的步驟具體包括利用各索引表的第一重哈希函數(shù),對(duì)所述待查詢鍵值進(jìn)行哈希計(jì)算,在所述索引表中查詢對(duì)應(yīng)的索引;利用各索引表的第二重哈希函數(shù),計(jì)算所述待查詢鍵值的哈希值,在所述索引中查詢所述哈希值對(duì)應(yīng)的槽位;當(dāng)對(duì)應(yīng)的槽位存儲(chǔ)的地址指針有效時(shí),讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng);
當(dāng)所有對(duì)應(yīng)的槽位存儲(chǔ)的地址指針均無(wú)效,且最后一張哈希表中對(duì)應(yīng)的槽位中設(shè)置有沖突標(biāo)記時(shí),查詢最后一張哈希表中對(duì)應(yīng)的槽位存儲(chǔ)的沖突鏈表指針;查詢所述沖突鏈表指針指向的沖突鏈表中存儲(chǔ)的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。優(yōu)選地,所述當(dāng)對(duì)應(yīng)的槽位存儲(chǔ)的地址指針有效時(shí),讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)的步驟具體包括
當(dāng)存在多個(gè)有效的地址指針時(shí),比較各有效的地址指針?biāo)谒饕淼膬?yōu)先級(jí);查詢優(yōu)先級(jí)最高的索引表存儲(chǔ)的有效的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。本發(fā)明還提出一種基于哈希表的表項(xiàng)處理裝置,包括存儲(chǔ)模塊,用于在表項(xiàng)存儲(chǔ)時(shí),將待存儲(chǔ)表項(xiàng)按照順序排布方式,存儲(chǔ)于結(jié)果表中;利用索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的哈希值;將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置。優(yōu)選地,所述存儲(chǔ)模塊具體用于利用當(dāng)前索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值;在當(dāng)前哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于當(dāng)前索引表中空閑的位置;在當(dāng)前哈希值有沖突時(shí),利用下一索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的下一哈希值;在下一哈希值無(wú)沖突時(shí),將下一哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于下一索引表中空閑的位置。優(yōu)選地,所述存儲(chǔ)模塊具體包括第一哈希運(yùn)算子模塊,用于利用當(dāng)前索引表的第一重哈希函數(shù),對(duì)所述待存儲(chǔ)表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在當(dāng)前索引表中獲得對(duì)應(yīng)的索引;第二哈希運(yùn)算子模塊,用于利用當(dāng)前索引表的第二重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值;地址指針存儲(chǔ)子模塊,用于在當(dāng)前哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。優(yōu)選地,所述存儲(chǔ)模塊具體還包括沖突處理子模塊,用于在當(dāng)前哈希值與對(duì)應(yīng)的索引中一槽位存儲(chǔ)的哈希值發(fā)生沖突時(shí),將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在所述沖突槽位中設(shè)直沖關(guān)標(biāo)識(shí);所述第一哈希運(yùn)算子模塊還用于,利用下一索引表的第一重哈希函數(shù),分別對(duì)所述待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在下一索引表中分別獲得對(duì)應(yīng)的索弓I ;所述第二哈希運(yùn)算子模塊還用于,利用下一索引表的第二重哈希函數(shù),分別計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值的下一哈希值;所述地址指針存儲(chǔ)子模塊還用于,在所述待存儲(chǔ)表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將所述待存儲(chǔ)表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位;在所述沖突表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將所述沖突表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。優(yōu)選地,所述存儲(chǔ)模塊具體還包括沖突鏈表存儲(chǔ)子模塊,用于在當(dāng)前索引表為最后一張索引表時(shí),將所述待存儲(chǔ)表項(xiàng)和沖突表項(xiàng)所在結(jié)果表的地址指針?lè)謩e存儲(chǔ)于沖突鏈表中,并將沖突鏈表指針存儲(chǔ)于最后一張索引表的沖突槽位中。優(yōu)選地,所述基于哈希表的表項(xiàng)處理裝置,還包括查詢模塊,用于在表項(xiàng)查詢時(shí),利用索引表的兩重哈希函數(shù),計(jì)算待查詢鍵值在所述索引表中的哈希值;在所述索引表中,查找所述哈希值所在位置存儲(chǔ)的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表 項(xiàng)。優(yōu)選地,所述查詢模塊具體包括第一哈希查詢子模塊,用于利用各索引表的第一重哈希函數(shù),對(duì)所述待查詢鍵值進(jìn)行哈希計(jì)算,在所述索引表中查詢對(duì)應(yīng)的索引;第二哈希查詢子模塊,用于利用所述索引表的第二重哈希函數(shù),計(jì)算所述待查詢鍵值的哈希值,在所述索引中查詢所述哈希值對(duì)應(yīng)的槽位;表項(xiàng)讀取子模塊,用于當(dāng)對(duì)應(yīng)的槽位存儲(chǔ)的地址指針有效時(shí),讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng);沖突鏈表讀取子模塊,用于當(dāng)所有對(duì)應(yīng)的槽位存儲(chǔ)的地址指針均無(wú)效,且最后一張哈希表中對(duì)應(yīng)的槽位中設(shè)置有沖突標(biāo)記時(shí),查詢最后一張哈希表中對(duì)應(yīng)的槽位存儲(chǔ)的沖突鏈表指針;查詢所述沖突鏈表指針指向的沖突鏈表中存儲(chǔ)的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。優(yōu)選地,所述查詢模塊具體還包括優(yōu)先級(jí)比較子模塊,用于當(dāng)存在多個(gè)有效的地址指針時(shí),比較各有效的地址指針?biāo)谒饕淼膬?yōu)先級(jí);所述表項(xiàng)讀取子模塊還用于,根據(jù)優(yōu)先級(jí)比較結(jié)果,查詢優(yōu)先級(jí)最高的索引表存儲(chǔ)的有效的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。本發(fā)明在保證了較少的訪問(wèn)次數(shù)和較快的查詢速度的同時(shí),有效提高了業(yè)務(wù)表項(xiàng)條目存儲(chǔ)量,增加了哈希表所能支持業(yè)務(wù)的容量,使哈希表的空間利用率高,并且還降低了沖突發(fā)生的概率,使哈希表的性能與容量之間達(dá)到平衡。
圖I為本發(fā)明第一實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖;圖2為本發(fā)明第二實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖;圖3為本發(fā)明第三實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖4為本發(fā)明第四實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖;圖5為本發(fā)明第五實(shí)施例的基于哈 希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖;圖6為本發(fā)明第六實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)查詢的步驟流程圖;圖7為本發(fā)明第七實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)查詢的步驟流程圖;圖8為本發(fā)明第八實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)查詢的步驟流程圖;圖9為本發(fā)明第九實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)查詢的步驟流程圖;圖10為本發(fā)明第一實(shí)施例中基于哈希表的表項(xiàng)處理裝置的結(jié)構(gòu)示意圖;圖11為本發(fā)明第二實(shí)施例的基于哈希表的表項(xiàng)處理裝置中存儲(chǔ)模塊的結(jié)構(gòu)示意圖;圖12為本發(fā)明第三實(shí)施例的基于哈希表的表項(xiàng)處理裝置中存儲(chǔ)模塊的結(jié)構(gòu)示意圖;圖13為本發(fā)明第四實(shí)施例中基于哈希表的表項(xiàng)處理裝置的結(jié)構(gòu)示意圖;圖14為本發(fā)明第五實(shí)施例的基于哈希表的表項(xiàng)處理裝置中查詢模塊的結(jié)構(gòu)示意圖;圖15為本發(fā)明第六實(shí)施例的基于哈希表的表項(xiàng)處理裝置中查詢模塊的結(jié)構(gòu)示意圖;圖16為本發(fā)明第七實(shí)施例的基于哈希表的表項(xiàng)處理裝置中查詢模塊的結(jié)構(gòu)示意圖。本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。
具體實(shí)施例方式應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。如圖I所不,圖I為本發(fā)明第一實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖,該實(shí)施例提到的基于哈希表的表項(xiàng)處理方法,包括步驟S101,在表項(xiàng)存儲(chǔ)時(shí),將待存儲(chǔ)表項(xiàng)按照順序排布方式,存儲(chǔ)于結(jié)果表中;步驟S102,利用索引表的兩重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值的哈希值;步驟S103,將哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于索引表中空閑的位置。本實(shí)施例將索引表與結(jié)果表獨(dú)立開(kāi)來(lái),索引表的結(jié)構(gòu)采用哈希方式排布,結(jié)果表的結(jié)構(gòu)采用順序排布方式,大大提高了哈希表所能支持業(yè)務(wù)的容量。同時(shí),本實(shí)施例采用了多張索引表進(jìn)行索引地址存儲(chǔ),針對(duì)每一張索引表,采用兩重哈希函數(shù),第一重為m級(jí)哈希運(yùn)算,用來(lái)對(duì)索引表的各項(xiàng)索引進(jìn)行地址索引,第二重為η級(jí)哈希運(yùn)算,用來(lái)對(duì)各項(xiàng)索引中包含的若干個(gè)地址指針存儲(chǔ)位置進(jìn)行區(qū)分。鍵值在經(jīng)過(guò)第一重哈希運(yùn)算后,沖突概率為P1,經(jīng)過(guò)第二重哈希運(yùn)算后,沖突概率為P2,鍵值在同時(shí)經(jīng)過(guò)雙重的哈希運(yùn)算后,沖突的概率為P1 Xp2,由于沖突概率P1和P2均小于1,因此雙重哈希運(yùn)算后的沖突概率將大大降低。本實(shí)施例在保證了較少的訪問(wèn)次數(shù)和較快的查詢速度的同時(shí),有效提高了業(yè)務(wù)表項(xiàng)條目存儲(chǔ)量,增加了哈希表所能支持業(yè)務(wù)的容量,使哈希表的空間利用率高,并且還降低了沖突發(fā)生的概率,使哈希表的性能與容量之間達(dá)到平衡。如圖2所示,圖2為本發(fā)明第二實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖。步驟S201,利用第i張索引表的兩重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值K的第i個(gè)哈希值;本實(shí)施例利用當(dāng)前索引表的兩重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值,可有效降低沖突發(fā)生概率。步驟S202,判斷第i個(gè)哈希值是否有沖突,如果否,則執(zhí)行步驟S203 ;如果是,則執(zhí)行步驟S204 ;步驟S203,將第i個(gè)哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于第i張索引表中空閑的位置;本實(shí)施例在當(dāng)前哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于當(dāng)前索引表中空閑的位置。由于索引表與結(jié)果表結(jié)構(gòu)不同,索引表的結(jié)構(gòu)采用哈希排布方式存儲(chǔ)結(jié)果表的地址指針,結(jié)果表的結(jié)構(gòu)采用順序排布方式存儲(chǔ)表項(xiàng),采用順序排布方式可保證每一個(gè)存儲(chǔ)空間均被利用,避免存儲(chǔ)空間浪費(fèi),同時(shí)也提高了哈希表所能支持業(yè)務(wù)的容量。步驟S204,i加1,返回步驟S201。本實(shí)施例在當(dāng)前哈希值有沖突時(shí),利用下一索引表的兩重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值的下一哈希值;在下一哈希值無(wú)沖突時(shí),將下一哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于下一索引表中空閑的位置。由于本實(shí)施例采用了多張索引表進(jìn)行地址指針存儲(chǔ),并利用哈希值作為地址指針在索引表中存儲(chǔ)位置的標(biāo)識(shí)ID。當(dāng)?shù)趇個(gè)哈希值有重復(fù),即說(shuō)明標(biāo)識(shí)ID有沖突,在第i+Ι張索引表中為地址指針尋找空閑的存儲(chǔ)位置,以實(shí)現(xiàn)對(duì)沖突的合理處理,為每一個(gè)業(yè)務(wù)表項(xiàng)條目所在結(jié)果表的地址指針都分配到合適的存儲(chǔ)空間。其中,由于發(fā)生沖突的比例明顯小于未發(fā)生沖突的比例,因此,第一張索引表的容量通常較大,即越靠前的索引表容量越大。如圖3所不,圖3為本發(fā)明第三實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖。步驟S301,利用第i張索引表的第一重哈希函數(shù)Fi(X),對(duì)待存儲(chǔ)表項(xiàng)的鍵值K進(jìn)行哈希計(jì)算,在第i張索引表中獲得Fi (K)對(duì)應(yīng)的索引;步驟S302,利用第i張索引表的第二重哈希函數(shù)Hi(X),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值K的第i個(gè)哈希值Hi (K);本實(shí)施例利用當(dāng)前索引表的第一重哈希函數(shù),對(duì)待存儲(chǔ)表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在當(dāng)前索引表中獲得對(duì)應(yīng)的索引;利用當(dāng)前索引表的第二重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值。每張索引表對(duì)應(yīng)于各自的兩重哈希函數(shù);每張索引表中包含有多條索引,通過(guò)第一重哈希函數(shù)對(duì)鍵值進(jìn)行哈希運(yùn)算,獲得的運(yùn)算結(jié)果對(duì)應(yīng)于一條索引;每條索引又包含多個(gè)槽位,通過(guò)第二重哈希函數(shù)對(duì)鍵值進(jìn)行哈希運(yùn)算,獲得的運(yùn)算結(jié)果可作為用于存儲(chǔ)地址指針的槽位的標(biāo)識(shí)ID。本實(shí)施例通過(guò)兩重哈希函數(shù)運(yùn)算,使發(fā)生沖突的概率將遠(yuǎn)小于通過(guò)一次哈希函數(shù)運(yùn)算獲得的地址。步驟S303,判斷Hi (K)與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值是否有沖突,如果否,則執(zhí)行步驟S304 ;如果是,則執(zhí)行步驟S305 ;本實(shí)施例的每個(gè)槽位中包含有多個(gè)需要信息,例如,包括槽位有效指示標(biāo)記,當(dāng)槽位有效指示標(biāo)記為I時(shí),表示該槽位指向的數(shù)據(jù)表中已存儲(chǔ)有業(yè)務(wù)表項(xiàng)條目;槽位標(biāo)識(shí)ID,對(duì)應(yīng)于哈希值,即采用第二重哈希函數(shù)對(duì)鍵值進(jìn)行哈希運(yùn)算后的結(jié)果值;指針信息,用于存儲(chǔ)結(jié)果表的地址指針,指向結(jié)果表中對(duì)應(yīng)的存儲(chǔ)位置;沖突指示標(biāo)記,當(dāng)沖突指示標(biāo)記為I時(shí),表示該槽位存在沖突,本實(shí)施例的指針信息的最后一個(gè)比特位可以復(fù)用為沖突指/J人柄^ T己O
步驟S304,將Hi (K)和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于第i張索引表對(duì)應(yīng)的索引中空閑的槽位。步驟S305,將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在沖突槽位中設(shè)置沖突標(biāo)識(shí);本實(shí)施例在當(dāng)前哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位;在當(dāng)前哈希值與對(duì)應(yīng)的索引中一槽位存儲(chǔ)的哈希值發(fā)生沖突時(shí),將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在沖突槽位中設(shè)置沖突標(biāo)識(shí)。本實(shí)施例在沖突的情況發(fā)生時(shí),為避免在表項(xiàng)查詢時(shí)查詢到錯(cuò)誤的表項(xiàng)結(jié)果,置沖突的槽位的地址信息為空,將沖突槽位存儲(chǔ)的地址指針取出后,重新尋找空閑的存儲(chǔ)空間,同時(shí)還將該槽位的沖突指示標(biāo)記置為1,以供表項(xiàng)查詢時(shí)直接跳過(guò)該槽位指向的結(jié)果表,減少存儲(chǔ)器訪問(wèn)次數(shù),提高查找時(shí)間和效率。此外,由于本實(shí)施例對(duì)沖突的槽位均設(shè)置有沖突標(biāo)記,為了避免過(guò)多槽位被置為沖突不可用而造成大量廢棄空間,本實(shí)施例在刪除表項(xiàng)時(shí),需要進(jìn)行相應(yīng)的空間回溯操作,即對(duì)所刪除的表項(xiàng)對(duì)應(yīng)的沖突槽位回收,重置沖突標(biāo)記,以免造成大量空間浪費(fèi)。步驟S306,利用第i+Ι張索引表的第一重哈希函數(shù)Fi+1 (X),分別對(duì)待存儲(chǔ)表項(xiàng)的鍵值K和沖突表項(xiàng)的鍵值K’進(jìn)行哈希計(jì)算,在第i+Ι張索引表中分別獲得Fi+1 (K)和Fi+1(K’)對(duì)應(yīng)的索引;步驟S307,利用第i+Ι張索引表的第二重哈希函數(shù)Hi+1 (X),分別計(jì)算待存儲(chǔ)表項(xiàng)的鍵值K的第i+Ι個(gè)哈希值Hi+1 (K)和沖突表項(xiàng)的鍵值K’的第i+Ι個(gè)哈希值Hi+1 (K’);本實(shí)施例利用下一索引表的第一重哈希函數(shù),分別對(duì)待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在下一索引表中分別獲得對(duì)應(yīng)的索引;利用下一索引表的第二重哈希函數(shù),分別計(jì)算待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值的下一哈希值。步驟S308,分別判斷Hi+1 (K)和Hi+1 (K’)與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值是否有沖突,如果否,則執(zhí)行步驟S309 ;如果是,則執(zhí)行步驟S310 ;步驟S309,將Hi+1 (K)和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于第i+Ι張索引表中對(duì)應(yīng)的索引中空閑的槽位;將^+1 (K’)和沖突表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于第i+Ι張索引表中對(duì)應(yīng)的索引中空閑的槽位;步驟S310,i加1,返回步驟S305。
本實(shí)施例在待存儲(chǔ)表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將待存儲(chǔ)表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位;在沖突表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將沖突表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。當(dāng)?shù)趇+Ι個(gè)哈希值仍有沖突時(shí),取出第i+Ι張索引表對(duì)應(yīng)的沖突槽位存儲(chǔ)的地址指針,重新判斷第i+2個(gè)哈希值是否有沖突,以此循環(huán),直至找到無(wú)沖突的哈希值。本實(shí)施例采用多張索引表進(jìn)行地址存儲(chǔ),合理處理沖突狀況,為每一個(gè)業(yè)務(wù)表項(xiàng)條目所在結(jié)果表的地址指針都分配到合適的索引表存儲(chǔ)空間,有效保證了表項(xiàng)及其地址指針存儲(chǔ)的完備性。如圖4所不,圖4為本發(fā)明第四實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖。步驟S305之后還包括步驟S311,判斷第i張索引表是否為最后一張索引表,如果是,則執(zhí)行步驟S312 ;如果否,則執(zhí)行步驟306; 步驟S312,將沖突鏈表指針存儲(chǔ)于最后一張索引表的沖突槽位中;步驟S313,將待存儲(chǔ)表項(xiàng)和沖突表項(xiàng)所在結(jié)果表的地址指針?lè)謩e存儲(chǔ)于沖突鏈表中。 本實(shí)施例對(duì)于在所有索引表中都無(wú)法找到合適存儲(chǔ)位置的地址指針,將其存放在沖突鏈表中,保證了所有表項(xiàng)所在結(jié)果表的地址指針都可分配到合適的存儲(chǔ)空間,有效提高了表項(xiàng)及其地址指針存儲(chǔ)的完備性。如圖5所不,圖5為本發(fā)明第五實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)存儲(chǔ)的步驟流程圖。步驟S301之后還包括步驟S314,判斷第i張索引表的對(duì)應(yīng)索引中是否有空閑的槽位,如果是,則執(zhí)行步驟S302 ;如果否,則執(zhí)行步驟311。本實(shí)施例的沖突狀況還包括槽位是否全滿,對(duì)于當(dāng)前索引表中的槽位指向的結(jié)果表已全部裝滿的情況,不在進(jìn)行第二重哈希函數(shù)運(yùn)算,直接跳到下一索引表,有效提高了存儲(chǔ)速度和存儲(chǔ)效率。如圖6所不,圖6為本發(fā)明第六實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)查詢的步驟流程圖。步驟S103之后還包括步驟S104,在表項(xiàng)查詢時(shí),利用索引表的兩重哈希函數(shù),計(jì)算待查詢鍵值的哈希值;步驟S105,在索引表中,查找哈希值所在位置存儲(chǔ)的地址指針;步驟S106,讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。本實(shí)施例僅采用兩重哈希函數(shù)運(yùn)算,即可找到匹配的表項(xiàng)存儲(chǔ)位置,減少了訪問(wèn)存儲(chǔ)器的次數(shù),有效保證了較快的表項(xiàng)查詢速度。如圖7所示,圖7為本發(fā)明第七實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)查詢的步驟流程圖。步驟S401,利用各索引表的第一重哈希函數(shù),對(duì)待查詢鍵值進(jìn)行哈希計(jì)算,在索引表中查詢對(duì)應(yīng)的索引;步驟S402,利用各索引表的第二重哈希函數(shù),計(jì)算待查詢鍵值的哈希值,在索引中查詢哈希值對(duì)應(yīng)的槽位;步驟S403,判斷對(duì)應(yīng)的槽位存儲(chǔ)的地址指針是否有效,如果是,則執(zhí)行步驟S404 ;如果否,則執(zhí)行步驟S405 ;步驟S404,讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng);步驟S405,在最后一張哈希表中對(duì)應(yīng)的槽位中設(shè)置有沖突標(biāo)記時(shí),查詢最后一張哈希表中對(duì)應(yīng)的槽位存儲(chǔ)的沖突鏈表指針;步驟S406,查詢沖突鏈表指針指向的沖突鏈表中存儲(chǔ)的地址指針;步驟S407,讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。本實(shí)施例通過(guò)兩重哈希函數(shù)查找匹配的表項(xiàng),減少了訪問(wèn)存儲(chǔ)器的次數(shù),提高了查詢速度與效率,便于硬件與存儲(chǔ)器之間接口的實(shí)現(xiàn)。本實(shí)施例可以采用所有索引表的哈希函數(shù)運(yùn)算同時(shí)進(jìn)行的方式查找匹配表項(xiàng),以節(jié)省查找時(shí)間,提高查找效率。此外,本實(shí)施例在表項(xiàng)查詢時(shí),可按照順序查找方式,即首先對(duì)第一張索引表進(jìn)行查找,如果找到有效的地址指針,則不再進(jìn)行后續(xù)索引表的哈希函數(shù)運(yùn)算,減少了運(yùn)算量,同樣能夠?qū)崿F(xiàn)提高查詢速度與效率的目的。為確保表項(xiàng)查找的完備性,當(dāng)各索引表中均找不到有效的地址指針時(shí),則在沖突鏈表中進(jìn)行查詢,避免了表項(xiàng)查詢的遺漏。如圖8所示,圖8為本發(fā)明第八實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)查詢的步驟流程圖。步驟S501,利用各索引表的第一重哈希函數(shù),對(duì)待查詢鍵值進(jìn)行哈希計(jì)算,在索引表中查詢對(duì)應(yīng)的索引;步驟S502,利用各索引表的第二重哈希函數(shù),計(jì)算待查詢鍵值的哈希值,在索引中查詢哈希值對(duì)應(yīng)的槽位;步驟S503,判斷對(duì)應(yīng)的槽位存儲(chǔ)的地址指針是否有效,如果否,則執(zhí)行步驟S504 ;如果是,則執(zhí)行步驟S507 ;步驟S504,在最后一張哈希表中對(duì)應(yīng)的槽位中設(shè)置有沖突標(biāo)記時(shí),查詢最后一張哈希表中對(duì)應(yīng)的槽位存儲(chǔ)的沖突鏈表指針;步驟S505,查詢沖突鏈表指針指向的沖突鏈表中存儲(chǔ)的地址指針;步驟S506,讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。步驟S507,判斷是否只存在一個(gè)有效的地址指針,如果是,則執(zhí)行步驟S508 ;如果否,則執(zhí)行步驟S509 ;步驟S508,讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng);步驟S509,比較各匹配的表項(xiàng)對(duì)應(yīng)的索引表的優(yōu)先級(jí);步驟S510,查詢優(yōu)先級(jí)最高的索引表存儲(chǔ)的有效的地址指針;步驟S511,讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。。本實(shí)施例的索引表存在明顯的優(yōu)先級(jí)順序,由于在對(duì)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)時(shí),首先在第一張索引表中查找空閑的存儲(chǔ)位置,當(dāng)?shù)谝粡埶饕碇袩o(wú)空閑存儲(chǔ)空間,或發(fā)生哈希值沖突,即標(biāo)識(shí)ID沖突時(shí),才在下一張索引表中查找空閑的存儲(chǔ)位置,因此,第一張索引表的優(yōu)先級(jí)最高,且通常情況下,大多數(shù)表項(xiàng)所在結(jié)果表的地址指針均存儲(chǔ)在第、一張索引表中,越往后的索引表優(yōu)先級(jí)越低。本實(shí)施例通過(guò)對(duì)索引表優(yōu)先級(jí)的比較,讀取優(yōu)先級(jí)最高的索引表對(duì)應(yīng)的地址指針指向的結(jié)果表存儲(chǔ)的表項(xiàng),確保了業(yè)務(wù)表項(xiàng)條目查詢的準(zhǔn)確性和可靠性,保證了表項(xiàng)查詢的一次命中率。如圖9所示,圖9為本發(fā)明第九實(shí)施例的基于哈希表的表項(xiàng)處理方法中表項(xiàng)查詢的步驟流程圖。步驟S601,利用各索引表的第一重哈希函數(shù),對(duì)待查詢鍵值進(jìn)行哈希計(jì)算,在索引表中查詢對(duì)應(yīng)的索引;步驟S602,利用各索引表的第二重哈希函數(shù),計(jì)算待查詢鍵值的哈希值,在索引中查詢哈希值對(duì)應(yīng)的槽位;步驟S603,判斷對(duì)應(yīng)的槽位存儲(chǔ)的地址指針是否有效,如果是,則執(zhí)行步驟S604 ;如果否,則執(zhí)行步驟S605 ; 步驟S604,讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng);步驟S605,判斷最后一張哈希表中對(duì)應(yīng)的槽位中是否設(shè)置有沖突標(biāo)記,如果是,則執(zhí)行步驟S606 ;如果否,則執(zhí)行步驟S609 ;步驟S606,查詢最后一張哈希表中對(duì)應(yīng)的槽位存儲(chǔ)的沖突鏈表指針;步驟S607,查詢沖突鏈表指針指向的沖突鏈表中存儲(chǔ)的地址指針;步驟S608,讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。步驟S609,讀取結(jié)果表中指定位存儲(chǔ)的無(wú)結(jié)果反饋信息。本實(shí)施例中,由于在對(duì)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)時(shí),對(duì)于在所有索引表中都無(wú)法找到合適存儲(chǔ)位置的地址指針,則存儲(chǔ)在沖突鏈表中,同時(shí)還在最后一張索引表的沖突槽位中標(biāo)記沖突鏈表指針,因此,在表項(xiàng)查詢時(shí),通過(guò)判斷最后一張索引表的沖突槽位中是否設(shè)置有沖突鏈表指針,來(lái)判斷本次表項(xiàng)查詢是否有結(jié)果。例如,當(dāng)最后一張索引表的沖突槽位中設(shè)置有沖突鏈表指針,則說(shuō)明本次表項(xiàng)查詢有結(jié)果表項(xiàng),且該結(jié)果表項(xiàng)所在結(jié)果表的地址指針因找不到合適的存儲(chǔ)位置,而被存儲(chǔ)在沖突鏈表中;否則,本次表項(xiàng)查詢沒(méi)有結(jié)果,反饋查詢無(wú)結(jié)果的信息。本實(shí)施例通過(guò)對(duì)沖突鏈表進(jìn)行讀取,避免在表項(xiàng)查詢時(shí)漏掉表項(xiàng),確保表項(xiàng)查詢的完備性;同時(shí),在無(wú)結(jié)果的情況下,通過(guò)反饋無(wú)結(jié)果信息,避免了將下一次查詢結(jié)果當(dāng)作本次查詢結(jié)果而發(fā)生錯(cuò)誤的情況發(fā)生,確保了表項(xiàng)查詢的可靠性。如圖10所示,圖10為本發(fā)明第一實(shí)施例中基于哈希表的表項(xiàng)處理裝置的結(jié)構(gòu)示意圖,該實(shí)施例提到的基于哈希表的表項(xiàng)處理裝置,包括存儲(chǔ)模塊10,用于在表項(xiàng)存儲(chǔ)時(shí),將待存儲(chǔ)表項(xiàng)按照順序排布方式,存儲(chǔ)于結(jié)果表中;利用索引表的兩重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值的哈希值;將哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于索引表中空閑的位置。本實(shí)施例將索引表與結(jié)果表獨(dú)立開(kāi)來(lái),索引表的結(jié)構(gòu)米用哈希方式排布,結(jié)果表的結(jié)構(gòu)采用順序排布方式,大大提高了哈希表所能支持業(yè)務(wù)的容量。同時(shí),本實(shí)施例存儲(chǔ)模塊10采用了多張索引表進(jìn)行索引地址存儲(chǔ),針對(duì)每一張索引表,采用兩重哈希函數(shù),第一重為m級(jí)哈希運(yùn)算,用來(lái)對(duì)索引表的各項(xiàng)索引進(jìn)行地址索引,第二重為η級(jí)哈希運(yùn)算,用來(lái)對(duì)各項(xiàng)索引中包含的若干個(gè)地址指針存儲(chǔ)位置進(jìn)行區(qū)分。鍵值在經(jīng)過(guò)第一重哈希運(yùn)算后,沖突概率為P1,經(jīng)過(guò)第二重哈希運(yùn)算后,沖突概率為P2,鍵值在同時(shí)經(jīng)過(guò)雙重的哈希運(yùn)算后,沖突的概率為P1XP2,由于沖突概率P1和P2均小于1,因此雙重哈希運(yùn)算后的沖突概率將大大降低。本實(shí)施例在保證了較少的訪問(wèn)次數(shù)和較快的查詢速度的同時(shí),有效提高了業(yè)務(wù)表項(xiàng)條目存儲(chǔ)量,增加了哈希表所能支持業(yè)務(wù)的容量,使哈希表的空間利用率高,并且還降低了沖突發(fā)生的概率,使哈希表的性能與容量之間達(dá)到平衡。本發(fā)明實(shí)施例中,存儲(chǔ)模塊10具體用于利用當(dāng)前索引表的兩重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值;在當(dāng)前哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于當(dāng)前索引表中空閑的位置;在當(dāng)前哈希值有沖突時(shí),利用下一索引表的兩重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值的下一哈希值;
在下一哈希值無(wú)沖突時(shí),將下一哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于下一索引表中空閑的位置。本實(shí)施例中由于索引表與結(jié)果表結(jié)構(gòu)不同,索引表的結(jié)構(gòu)米用哈希排布方式存儲(chǔ)結(jié)果表的地址指針,結(jié)果表的結(jié)構(gòu)采用順序排布方式存儲(chǔ)表項(xiàng),存儲(chǔ)模塊10采用順序排布方式存儲(chǔ)表項(xiàng),可保證每一個(gè)存儲(chǔ)空間均被利用,避免存儲(chǔ)空間浪費(fèi),同時(shí)也提高了哈希表所能支持業(yè)務(wù)的容量。此外,由于存儲(chǔ)模塊10采用了多張索引表進(jìn)行地址指針存儲(chǔ),并利用哈希值作為地址指針在索引表中存儲(chǔ)位置的標(biāo)識(shí)ID。當(dāng)?shù)趇個(gè)哈希值有重復(fù),即說(shuō)明標(biāo)識(shí)ID有沖突,在第i+Ι張索引表中為地址指針尋找空閑的存儲(chǔ)位置,以實(shí)現(xiàn)對(duì)沖突的合理處理,為每一個(gè)業(yè)務(wù)表項(xiàng)條目所在結(jié)果表的地址指針都分配到合適的存儲(chǔ)空間。其中,由于發(fā)生沖突的比例明顯小于未發(fā)生沖突的比例,因此,第一張索引表的容量通常較大,即越靠前的索引表容量越大。如圖11所示,圖11為本發(fā)明第二實(shí)施例的基于哈希表的表項(xiàng)處理裝置中存儲(chǔ)模塊的結(jié)構(gòu)示意圖,存儲(chǔ)模塊10具體包括第一哈希運(yùn)算子模塊11,用于利用當(dāng)前索引表的第一重哈希函數(shù),對(duì)待存儲(chǔ)表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在當(dāng)前索引表中獲得對(duì)應(yīng)的索引;第二哈希運(yùn)算子模塊12,用于利用當(dāng)前索引表的第二重哈希函數(shù),計(jì)算待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值;地址指針存儲(chǔ)子模塊13,用于在當(dāng)前哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。沖突處理子模塊14,用于在當(dāng)前哈希值與對(duì)應(yīng)的索引中一槽位存儲(chǔ)的哈希值發(fā)生沖突時(shí),將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在沖突槽位中設(shè)置沖突標(biāo)識(shí);第一哈希運(yùn)算子模塊11還用于,利用下一索引表的第一重哈希函數(shù),分別對(duì)待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在下一索引表中分別獲得對(duì)應(yīng)的索引;第二哈希運(yùn)算子模塊12還用于,利用下一索引表的第二重哈希函數(shù),分別計(jì)算待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值的下一哈希值;地址指針存儲(chǔ)子模塊13還用于,在待存儲(chǔ)表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將待存儲(chǔ)表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位;在沖突表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將沖突表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。本實(shí)施例的索引表包括多條索引,第一哈希運(yùn)算子模塊11通過(guò)第一重哈希函數(shù)對(duì)鍵值進(jìn)行哈希運(yùn)算,獲得的運(yùn)算結(jié)果對(duì)應(yīng)于一條索引;每條索引又包含多個(gè)槽位,第二哈希運(yùn)算子模塊12通過(guò)第二重哈希函數(shù)對(duì)鍵值進(jìn)行哈希運(yùn)算,獲得的運(yùn)算結(jié)果可作為用于存儲(chǔ)地址指針的槽位的標(biāo)識(shí)ID。本實(shí)施例通過(guò)兩重哈希函數(shù)運(yùn)算,使發(fā)生沖突的概率將遠(yuǎn)小于通過(guò)一次哈希函數(shù)運(yùn)算獲得的地址。每個(gè)槽位中包含有多個(gè)需要信息,例如,包括槽位有效指示標(biāo)記,當(dāng)槽位有效指示標(biāo)記為I時(shí),表示該槽位指向的數(shù)據(jù)表中已存儲(chǔ)有業(yè)務(wù)表項(xiàng)條目;槽位標(biāo)識(shí)ID,對(duì)應(yīng)于哈希值,即采用第二重哈希函數(shù)對(duì)鍵值進(jìn)行哈希運(yùn)算后的結(jié)果值;指針信息,用于存儲(chǔ)結(jié)果表的地址指針,指向結(jié)果表中對(duì)應(yīng)的存儲(chǔ)位置;沖突指示標(biāo)記,當(dāng)沖突指示標(biāo)記為I時(shí),表示該槽位存在沖突,本實(shí)施例的指針信息的最后一個(gè)比特位可以復(fù)用為沖突指示標(biāo)記。在沖突的情況發(fā)生時(shí),為避免在表項(xiàng)查詢時(shí)查詢到錯(cuò)誤的表項(xiàng)結(jié)果,沖突處理子模塊14置沖突的槽位的地址信息為空,即將沖突槽位存儲(chǔ)的地址指針取出后,通過(guò)第一哈希運(yùn)算子模塊11和第二哈希運(yùn)算子模塊12,重新尋找空閑的存儲(chǔ)空間。同時(shí),沖突處理子模塊14還將該槽位的沖突指示標(biāo)記置為1,以供表項(xiàng)查詢時(shí)直接跳過(guò)該槽位指向的結(jié)果表,減少存儲(chǔ)器訪問(wèn)次數(shù),提高查找時(shí)間和效率。此外,由于本實(shí)施例對(duì)沖突的槽位均設(shè)置有沖突標(biāo)記,為了避免過(guò)多槽位被置為沖突不可用而造成大量廢棄空間,本實(shí)施例在刪除表項(xiàng)時(shí),需要進(jìn)行相應(yīng)的空間回溯操作,即對(duì)所刪除的表項(xiàng)對(duì)應(yīng)的沖突槽位回收,重置沖突標(biāo)記,以免造成大量空間浪費(fèi)。當(dāng)?shù)趇+Ι個(gè)哈希值仍有沖突時(shí),沖突處理子模塊14取出第i+Ι張索引表對(duì)應(yīng)的沖突槽位存儲(chǔ)的地址指針,通過(guò)第一哈希運(yùn)算子模塊11和第二哈希運(yùn)算子模塊12,重新判斷第i+2個(gè)哈希值是否有沖突,以此循環(huán),直至找到無(wú)沖突的哈希值。本實(shí)施例采用多張索引表進(jìn)行地址存儲(chǔ),合理處理沖突狀況,為每一個(gè)業(yè)務(wù)表項(xiàng)條目所在結(jié)果表的地址指針都分配到合適的索引表存儲(chǔ)空間,有效保證了表項(xiàng)及其地址指針存儲(chǔ)的完備性。本發(fā)明實(shí)施例中,沖突處理子模塊14還用于,在當(dāng)前索引表的對(duì)應(yīng)索引中無(wú)空閑的槽位時(shí),輸出當(dāng)前索引表槽位滿的信息至第一哈希運(yùn)算子模塊11,供第一哈希運(yùn)算子模塊11利用下一索引表的第一重哈希函數(shù),對(duì)待存儲(chǔ)表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在下一索引表中獲得對(duì)應(yīng)的索引。即對(duì)于當(dāng)前索引表中的槽位已全部裝滿的情況,不再進(jìn)行第二重哈希函數(shù)運(yùn)算,直接跳到下一索引表,有效提高了存儲(chǔ)速度和存儲(chǔ)效率。如圖12所示,圖12為本發(fā)明第三實(shí)施例的基于哈希表的表項(xiàng)處理裝置中存儲(chǔ)模塊的結(jié)構(gòu)示意圖,存儲(chǔ)模塊10具體還包括沖突鏈表存儲(chǔ)子模塊15,用于在當(dāng)前索引表為最后一張索引表時(shí),將待存儲(chǔ)表項(xiàng)和沖突表項(xiàng)所在結(jié)果表的地址指針?lè)謩e存儲(chǔ)于沖突鏈表中,并將沖突鏈表指針存儲(chǔ)于最后一張索引表的沖突槽位中。本實(shí)施例對(duì)于在所有索引表中都無(wú)法找到合適存儲(chǔ)位置的地址指針,通過(guò)沖突鏈表存儲(chǔ)子模塊15將其存放在沖突鏈表中,保證了所有表項(xiàng)所在結(jié)果表的地址指針都可分配到合適的存儲(chǔ)空間,有效提高了表項(xiàng)及其地址指針存儲(chǔ)的完備性。 如圖13所示,圖13為本發(fā)明第四實(shí)施例中基于哈希表的表項(xiàng)處理裝置的結(jié)構(gòu)示意圖,該實(shí)施例提到的基于哈希表的表項(xiàng)處理裝置,還包括
查詢模塊20,用于在表項(xiàng)查詢時(shí),利用索引表的兩重哈希函數(shù),計(jì)算待查詢鍵值在索引表中的哈希值;在索引表中,查找哈希值所在位置存儲(chǔ)的地址指針;讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。本實(shí)施例的查詢模塊20僅采用兩重哈希函數(shù)運(yùn)算,即可找到匹配的表項(xiàng)存儲(chǔ)位置,減少了訪問(wèn)存儲(chǔ)器的次數(shù),有效保證了較快的表項(xiàng)查詢速度。如圖14所示,圖14為本發(fā)明第五實(shí)施例的基于哈希表的表項(xiàng)處理裝置中查詢模塊的結(jié)構(gòu)示意圖,查詢模塊20具體包括
行哈希計(jì)算,在索引表中查詢對(duì)應(yīng)的索引;第二哈希查詢子模塊22,用于利用各索引表的第二重哈希函數(shù),計(jì)算待查詢鍵值的哈希值,在索引中查詢哈希值對(duì)應(yīng)的槽位;表項(xiàng)讀取子模塊23,用于當(dāng)對(duì)應(yīng)的槽位存儲(chǔ)的地址指針有效時(shí),讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng);沖突鏈表讀取子模塊24,用于當(dāng)所有對(duì)應(yīng)的槽位存儲(chǔ)的地址指針均無(wú)效,且最后一張哈希表中對(duì)應(yīng)的槽位中設(shè)置有沖突標(biāo)記時(shí),查詢最后一張哈希表中對(duì)應(yīng)的槽位存儲(chǔ)的沖突鏈表指針;查詢沖突鏈表指針指向的沖突鏈表中存儲(chǔ)的地址指針;讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。本實(shí)施例通過(guò)第一哈希查詢子模塊21和第二哈希查詢子模塊22進(jìn)行兩重哈希函數(shù)查找匹配的表項(xiàng),減少了訪問(wèn)存儲(chǔ)器的次數(shù),提高了查詢速度與效率,便于硬件與存儲(chǔ)器之間接口的實(shí)現(xiàn)。本實(shí)施例可以采用所有索引表的哈希函數(shù)運(yùn)算同時(shí)進(jìn)行的方式查找匹配表項(xiàng),以節(jié)省查找時(shí)間,提高查找效率。此外,本實(shí)施例在表項(xiàng)查詢時(shí),可按照順序查找方式,即首先對(duì)第一張索引表進(jìn)行查找,如果找到有效的地址指針,則不再進(jìn)行后續(xù)索引表的哈希函數(shù)運(yùn)算,減少了運(yùn)算量,同樣能夠?qū)崿F(xiàn)提高查詢速度與效率的目的。為確保表項(xiàng)查找的完備性,當(dāng)各索引表中均找不到有效的地址指針時(shí),則通過(guò)沖突鏈表讀取子模塊24在沖突鏈表中進(jìn)行查詢,避免了表項(xiàng)查詢的遺漏。如圖15所示,圖15為本發(fā)明第六實(shí)施例的基于哈希表的表項(xiàng)處理裝置中查詢模塊的結(jié)構(gòu)示意圖,查詢模塊20具體還包括優(yōu)先級(jí)比較子模塊25,用于當(dāng)存在多個(gè)有效的地址指針時(shí),比較各有效的地址指針?biāo)谒饕淼膬?yōu)先級(jí);表項(xiàng)讀取子模塊23還用于,根據(jù)優(yōu)先級(jí)比較結(jié)果,查詢優(yōu)先級(jí)最高的索引表存儲(chǔ)的有效的地址指針;讀取地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。本實(shí)施例的索引表存在明顯的優(yōu)先級(jí)順序,由于在對(duì)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)時(shí),首先在第一張索引表中查找空閑的存儲(chǔ)位置,當(dāng)?shù)谝粡埶饕碇袩o(wú)空閑存儲(chǔ)空間,或發(fā)生哈希值沖突時(shí),即標(biāo)識(shí)ID沖突,才在下一張索引表中查找空閑的存儲(chǔ)位置,因此,第一張索引表的優(yōu)先級(jí)最高,且通常情況下,大多數(shù)表項(xiàng)所在結(jié)果表的地址指針均存儲(chǔ)在第一張索引表中,越往后的索引表優(yōu)先級(jí)越低。本實(shí)施例通過(guò)優(yōu)先級(jí)比較子模塊25對(duì)索引表優(yōu)先級(jí)的比較,表項(xiàng)讀取子模塊23根據(jù)優(yōu)先級(jí)比較結(jié)果,讀取優(yōu)先級(jí)最高的索引表對(duì)應(yīng)的地址指針指向的結(jié)果表存儲(chǔ)的表項(xiàng),確保了業(yè)務(wù)表項(xiàng)條目查詢的準(zhǔn)確性和可靠性,保證了表項(xiàng)查詢的一次命中率。
如圖16所示,圖16為本發(fā)明第七實(shí)施例的基于哈希表的表項(xiàng)處理裝置中查詢模塊的結(jié)構(gòu)示意圖,查詢模塊20具體還包括無(wú)結(jié)果反饋?zhàn)幽K26,用于在最后一張索引表的特定槽位中沒(méi)有沖突鏈表指針時(shí),讀取結(jié)果表中指定位存儲(chǔ)的無(wú)結(jié)果反饋信息。本實(shí)施例中,由于在對(duì)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)時(shí),對(duì)于在所有索引表中都無(wú)法找到合適存儲(chǔ)位置的地址指針,則存儲(chǔ)在沖突鏈表中,同時(shí)還在最后一張索引表的沖突槽位中標(biāo)記沖突鏈表指針,因此,在表項(xiàng)查詢時(shí),通過(guò)判斷最后一張索引表的沖突槽位中是否設(shè)置有沖突鏈表指針,來(lái)判斷本次表項(xiàng)查詢是否有結(jié)果。例如,當(dāng)最后一張索引表的沖突槽位中設(shè)置有沖突鏈表指針,則說(shuō)明本次表項(xiàng)查詢有結(jié)果表項(xiàng),且該結(jié)果表項(xiàng)所在結(jié)果表的地址指針因找不到合適的存儲(chǔ)位置,而被存儲(chǔ)在沖突鏈表中;否則,本次表項(xiàng)查詢沒(méi)有結(jié)果,無(wú)結(jié)果反饋?zhàn)幽K26反饋查詢無(wú)結(jié)果的信息。本實(shí)施例通過(guò)對(duì)沖突鏈表進(jìn)行讀取,避免在表項(xiàng)查詢時(shí)漏掉表項(xiàng),確保表項(xiàng)查詢的完備性;同時(shí),在無(wú)結(jié)果的情況下,通過(guò)反 饋無(wú)結(jié)果信息,避免了將下一次查詢結(jié)果當(dāng)作本次查詢結(jié)果而發(fā)生錯(cuò)誤的情況發(fā)生,確保了表項(xiàng)查詢的可靠性。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說(shuō)明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種基于哈希表的表項(xiàng)處理方法,其特征在于,包括步驟 在表項(xiàng)存儲(chǔ)時(shí),將待存儲(chǔ)表項(xiàng)按照順序排布方式,存儲(chǔ)于結(jié)果表中; 利用索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的哈希值; 將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置。
2.根據(jù)權(quán)利要求I所述的基于哈希表的表項(xiàng)處理方法,其特征在于,所述利用索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值哈希值;將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置的步驟具體包括 利用當(dāng)前索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值; 在當(dāng)前哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于當(dāng)前索引表中空閑的位置; 在當(dāng)前哈希值有沖突時(shí),利用下一索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的下一哈希值; 在下ー哈希值無(wú)沖突時(shí),將下一哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于下一索引表中空閑的位置。
3.根據(jù)權(quán)利要求2所述的基于哈希表的表項(xiàng)處理方法,其特征在干,所述利用當(dāng)前索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值;在當(dāng)前哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于當(dāng)前索引表中空閑的位置的步驟具體包括 利用當(dāng)前索引表的第一重哈希函數(shù),對(duì)所述待存儲(chǔ)表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在當(dāng)前索引表中獲得對(duì)應(yīng)的索引; 利用當(dāng)前索引表的第二重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值; 在當(dāng)前哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。
4.根據(jù)權(quán)利要求3所述的基于哈希表的表項(xiàng)處理方法,其特征在于,所述在當(dāng)前哈希值有沖突時(shí),利用下一索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的下ー哈希值;在下ー哈希值無(wú)沖突時(shí),將下一哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于下一索引表中空閑的位置的步驟具體包括 在當(dāng)前哈希值與對(duì)應(yīng)的索引中一槽位存儲(chǔ)的哈希值發(fā)生沖突時(shí),將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在所述沖突槽位中設(shè)置沖突標(biāo)識(shí); 利用下一索引表的第一重哈希函數(shù),分別對(duì)所述待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在下一索引表中分別獲得對(duì)應(yīng)的索引; 利用下一索引表的第二重哈希函數(shù),分別計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值的下一哈希值; 在所述待存儲(chǔ)表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將所述待存儲(chǔ)表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位;在所述沖突表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突吋,將所述沖突表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。
5.根據(jù)權(quán)利要求4所述的基于哈希表的表項(xiàng)處理方法,其特征在于,所述在當(dāng)前哈希值與對(duì)應(yīng)的索引中一槽位存儲(chǔ)的哈希值發(fā)生沖突時(shí),將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在所述沖突槽位中設(shè)置沖突標(biāo)識(shí)的步驟之后還包括 在當(dāng)前索引表為最后ー張索引表吋,將所述待存儲(chǔ)表項(xiàng)和沖突表項(xiàng)所在結(jié)果表的地址指針?lè)謩e存儲(chǔ)于沖突鏈表中,并將沖突鏈表指針存儲(chǔ)于最后ー張索引表的沖突槽位中。
6.根據(jù)權(quán)利要求5所述的基于哈希表的表項(xiàng)處理方法,其特征在于,所述將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置的步驟之后還包括 在表項(xiàng)查詢時(shí),利用索引表的兩重哈希函數(shù),計(jì)算待查詢鍵值的哈希值; 在所述索引表中,查找所述哈希值所在位置存儲(chǔ)的地址指針; 讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。
7.根據(jù)權(quán)利要求6所述的基于哈希表的表項(xiàng)處理方法,其特征在干,所述在表項(xiàng)查詢時(shí),利用索引表的兩重哈希函數(shù),計(jì)算待查詢鍵值的哈希值;在所述索引表中查找所述哈希值所在位置存儲(chǔ)的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)的步驟具體包括 利用各索引表的第一重哈希函數(shù),對(duì)所述待查詢鍵值進(jìn)行哈希計(jì)算,在所述索引表中查詢對(duì)應(yīng)的索引; 利用各索引表的第二重哈希函數(shù),計(jì)算所述待查詢鍵值的哈希值,在所述索引中查詢所述哈希值對(duì)應(yīng)的槽位; 當(dāng)對(duì)應(yīng)的槽位存儲(chǔ)的地址指針有效時(shí),讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng); 當(dāng)所有對(duì)應(yīng)的槽位存儲(chǔ)的地址指針均無(wú)效,且最后一張哈希表中對(duì)應(yīng)的槽位中設(shè)置有沖突標(biāo)記時(shí),查詢最后一張哈希表中對(duì)應(yīng)的槽位存儲(chǔ)的沖突鏈表指針; 查詢所述沖突鏈表指針指向的沖突鏈表中存儲(chǔ)的地址指針; 讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。
8.根據(jù)權(quán)利要求7所述的基于哈希表的表項(xiàng)處理方法,其特征在于,所述當(dāng)對(duì)應(yīng)的槽位存儲(chǔ)的地址指針有效時(shí),讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)的步驟具體包括 當(dāng)存在多個(gè)有效的地址指針吋,比較各有效的地址指針?biāo)谒饕淼膬?yōu)先級(jí); 查詢優(yōu)先級(jí)最高的索引表存儲(chǔ)的有效的地址指針; 讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。
9.一種基于哈希表的表項(xiàng)處理裝置,其特征在于,包括 存儲(chǔ)模塊,用于在表項(xiàng)存儲(chǔ)吋,將待存儲(chǔ)表項(xiàng)按照順序排布方式,存儲(chǔ)于結(jié)果表中;利用索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的哈希值;將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置。
10.根據(jù)權(quán)利要求9所述的基于哈希表的表項(xiàng)處理裝置,其特征在于,所述存儲(chǔ)模塊具體用干 利用當(dāng)前索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值; 在當(dāng)前哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于當(dāng)前索引表中空閑的位置;在當(dāng)前哈希值有沖突時(shí),利用下一索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的下一哈希值; 在下ー哈希值無(wú)沖突時(shí),將下一哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于下一索引表中空閑的位置。
11.根據(jù)權(quán)利要求10所述的基于哈希表的表項(xiàng)處理裝置,其特征在于,所述存儲(chǔ)模塊具體包括 第一哈希運(yùn)算子模塊,用于利用當(dāng)前索引表的第一重哈希函數(shù),對(duì)所述待存儲(chǔ)表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在當(dāng)前索引表中獲得對(duì)應(yīng)的索引; 第二哈希運(yùn)算子模塊,用于利用當(dāng)前索引表的第二重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的當(dāng)前哈希值; 地址指針存儲(chǔ)子模塊,用于在當(dāng)前哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將當(dāng)前哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。
12.根據(jù)權(quán)利要求11所述的基于哈希表的表項(xiàng)處理裝置,其特征在于,所述存儲(chǔ)模塊具體還包括 沖突處理子模塊,用于在當(dāng)前哈希值與對(duì)應(yīng)的索引中一槽位存儲(chǔ)的哈希值發(fā)生沖突時(shí),將沖突槽位中存儲(chǔ)的沖突表項(xiàng)所在結(jié)果表的地址指針取出,并在所述沖突槽位中設(shè)置沖突標(biāo)識(shí); 所述第一哈希運(yùn)算子模塊還用于,利用下一索引表的第一重哈希函數(shù),分別對(duì)所述待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值進(jìn)行哈希計(jì)算,在下一索引表中分別獲得對(duì)應(yīng)的索引; 所述第二哈希運(yùn)算子模塊還用于,利用下一索引表的第二重哈希函數(shù),分別計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值和沖突表項(xiàng)的鍵值的下一哈希值; 所述地址指針存儲(chǔ)子模塊還用于,在所述待存儲(chǔ)表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將所述待存儲(chǔ)表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位;在所述沖突表項(xiàng)的下一哈希值與對(duì)應(yīng)的索引中各槽位存儲(chǔ)的哈希值無(wú)沖突時(shí),將所述沖突表項(xiàng)的下一哈希值和所在結(jié)果表的地址指針,存儲(chǔ)于對(duì)應(yīng)的索引中空閑的槽位。
13.根據(jù)權(quán)利要求12所述的基于哈希表的表項(xiàng)處理裝置,其特征在于,所述存儲(chǔ)模塊具體還包括 沖突鏈表存儲(chǔ)子模塊,用于在當(dāng)前索引表為最后ー張索引表時(shí),將所述待存儲(chǔ)表項(xiàng)和沖突表項(xiàng)所在結(jié)果表的地址指針?lè)謩e存儲(chǔ)于沖突鏈表中,并將沖突鏈表指針存儲(chǔ)于最后一張索引表的沖突槽位中。
14.根據(jù)權(quán)利要求13所述的基于哈希表的表項(xiàng)處理裝置,其特征在于,還包括查詢模塊,用于在表項(xiàng)查詢時(shí),利用索引表的兩重哈希函數(shù),計(jì)算待查詢鍵值在所述索引表中的哈希值;在所述索引表中,查找所述哈希值所在位置存儲(chǔ)的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。
15.根據(jù)權(quán)利要求14所述的基于哈希表的表項(xiàng)處理裝置,其特征在于,所述查詢模塊具體包括 第一哈希查詢子模塊,用于利用各索引表的第一重哈希函數(shù),對(duì)所述待查詢鍵值進(jìn)行哈希計(jì)算,在所述索引表中查詢對(duì)應(yīng)的索引; 第二哈希查詢子模塊,用于利用各索引表的第二重哈希函數(shù),計(jì)算所述待查詢鍵值的哈希值,在所述索引中查詢所述哈希值對(duì)應(yīng)的槽位; 表項(xiàng)讀取子模塊,用于當(dāng)對(duì)應(yīng)的槽位存儲(chǔ)的地址指針有效時(shí),讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng); 沖突鏈表讀取子模塊,用于當(dāng)所有對(duì)應(yīng)的槽位存儲(chǔ)的地址指針均無(wú)效,且最后ー張哈希表中對(duì)應(yīng)的槽位中設(shè)置有沖突標(biāo)記時(shí),查詢最后ー張哈希表中對(duì)應(yīng)的槽位存儲(chǔ)的沖突鏈表指針;查詢所述沖突鏈表指針指向的沖突鏈表中存儲(chǔ)的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。
16.根據(jù)權(quán)利要求15所述的基于哈希表的表項(xiàng)處理裝置,其特征在于,所述查詢模塊具體還包括 優(yōu)先級(jí)比較子模塊,用于當(dāng)存在多個(gè)有效的地址指針時(shí),比較各有效的地址指針?biāo)谒饕淼膬?yōu)先級(jí); 所述表項(xiàng)讀取子模塊還用于,根據(jù)優(yōu)先級(jí)比較結(jié)果,查詢優(yōu)先級(jí)最高的索引表存儲(chǔ)的有效的地址指針;讀取所述地址指針指向的結(jié)果表中存儲(chǔ)的表項(xiàng)。
全文摘要
本發(fā)明公開(kāi)了一種基于哈希表的表項(xiàng)處理方法及其裝置,其方法包括步驟在表項(xiàng)存儲(chǔ)時(shí),將待存儲(chǔ)表項(xiàng)按照順序排布方式,存儲(chǔ)于結(jié)果表中;利用索引表的兩重哈希函數(shù),計(jì)算所述待存儲(chǔ)表項(xiàng)的鍵值的哈希值;將所述哈希值和所述待存儲(chǔ)表項(xiàng)所在結(jié)果表的地址指針存儲(chǔ)于所述索引表中空閑的位置。本發(fā)明在保證了較少的訪問(wèn)次數(shù)和較快的查詢速度的同時(shí),有效提高了業(yè)務(wù)表項(xiàng)條目存儲(chǔ)量,增加了哈希表所能支持業(yè)務(wù)的容量,使哈希表的空間利用率高,并且還降低了沖突發(fā)生的概率,使哈希表的性能與容量之間達(dá)到平衡。
文檔編號(hào)G06F17/30GK102682116SQ20121014724
公開(kāi)日2012年9月19日 申請(qǐng)日期2012年5月14日 優(yōu)先權(quán)日2012年5月14日
發(fā)明者史順達(dá), 孫遠(yuǎn)航, 張煒, 陳偉 申請(qǐng)人:中興通訊股份有限公司