亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種哈希表項(xiàng)存儲(chǔ)、查找裝置及方法

文檔序號(hào):6579201閱讀:788來(lái)源:國(guó)知局
專利名稱:一種哈希表項(xiàng)存儲(chǔ)、查找裝置及方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種哈希表項(xiàng)存儲(chǔ)、查找裝置及方法。
背景技術(shù)
在通信領(lǐng)域中,存在著多種的匹配算法,例如,對(duì)于精確匹配的查找,可 以采用哈希算法。所述的哈希查找的過(guò)程就是用哈希函數(shù)對(duì)輸入的查找鍵值
(Key)進(jìn)行縮位運(yùn)算,再用計(jì)算得到的哈希值在哈希索引表中尋址,找到匹 配項(xiàng)后讀出對(duì)應(yīng)項(xiàng)中存放的哈希索引(Hashlndex),最后用哈希索引在直接地 址映射表尋址,得到所需的查找結(jié)果。對(duì)于哈希查找的具體描述可以參考文獻(xiàn)
1"Christopher Martinez,Wei-Ming Lin,Parimal Patel著。 Optimal XOR hashing for a linearly distributed address lookup in computer networks 。 ANCS'05, 203-210,2005"中的描述。
哈希算法是一種常見(jiàn)的快速查找算法。文獻(xiàn)2"殷科,鄧亞平,唐紅著。 基于哈?!猼ree的多維IP包分類算法。計(jì)算機(jī)工程與應(yīng)用,2005.32"中描述了 該算法的基本構(gòu)成,它的基本思想是以線性表中每個(gè)元素的關(guān)鍵字k為自變量。 通過(guò)一定的函數(shù)關(guān)系H(k),計(jì)算出對(duì)應(yīng)的函數(shù)值來(lái),并把這個(gè)值解釋為一塊連 續(xù)存儲(chǔ)空間的單元,將該元素存儲(chǔ)到這個(gè)單元中。哈希算法將元素的存儲(chǔ)位置 和它的關(guān)鍵字之間建立一個(gè)確定的對(duì)應(yīng)關(guān)系,查找時(shí),不需要比較, 一次哈希 映射就可以查找所需元素。
在哈希函數(shù)中,對(duì)不同的關(guān)鍵字可能得到同一哈希地址,即keyl^key2, 而H(keyl)=H(key2),這種情況叫沖突(Collision )。 一般來(lái)說(shuō),遇到?jīng)_突是很 正常的事情,關(guān)鍵在于遇到?jīng)_突后怎么處理,以達(dá)到要求的查找目的。處理沖 突,主要有以下兩種方法 一是選擇和改進(jìn)比較好的哈希函數(shù);二是選擇比較合適的表項(xiàng)存儲(chǔ)結(jié)構(gòu)。
參考文獻(xiàn)3"Yuan-Sun Chu, Po-Feng Lin, Jia隱Huang Lin, Hui隱Kai Su and Ming-Jen Chen著。ASIC Design of Fast IP Lookup for Next Generation IP Router。正EE,2005"中給出了幾種哈希函數(shù)的效率的比較,從其中可以看出, 對(duì)于路由查找這類的應(yīng)用,采用CRC (Cyclic Redundancy Checking,循環(huán)冗余 碼校驗(yàn))類的哈希函數(shù)是比較適合的。關(guān)于CRC計(jì)算方法,可參考文獻(xiàn)4
"Philip Koopman, Tridib. Chakravarty著。Cyclic Redundancy Code (CRC) Polynomial Selection For Embedded Networks 。 The International Conference on Dependable Systems and Networks, DSN-2004,,及5"Cyclic redundancy check。 http:〃en.wikipedia.org/wiki/Cyclic—redundancy—check"中的4苗述。通過(guò)選取不同 的CRC多項(xiàng)式,可以實(shí)現(xiàn)同一個(gè)位寬下的不同哈希函數(shù)。
在選擇合適的表存儲(chǔ)結(jié)構(gòu)解決沖突問(wèn)題方面,文獻(xiàn)6"Hash Table。 http:〃gpwiki.org/index.php/Hash—Table"中提供了 一些方法,比如采用多維哈希 表、沖突鏈、Double Hashing等。仿真實(shí)驗(yàn)結(jié)果表明,使用這些方法,在保證 無(wú)表項(xiàng)遺留即所有表項(xiàng)都能存入的前提條件下,計(jì)算哈希值的次數(shù)跟需要的存 儲(chǔ)表空間存在對(duì)立的關(guān)系,也就是說(shuō)如果想要以足夠小的存儲(chǔ)空間放下所有的 表項(xiàng),則需要進(jìn)行足夠多次數(shù)的哈希運(yùn)算。這樣就會(huì)造成對(duì)同一塊表的多次訪 問(wèn),如果這里的哈希運(yùn)算的次數(shù)是10,那么在查找時(shí)平均情況是需要查找5 次才能找到需要的表項(xiàng),而最壞情況是需要查找10次,由于表只有一張,所 以查找只能順序進(jìn)行,這會(huì)嚴(yán)重影響查表的速度;另一方面,如果想要以足夠 少的計(jì)算次數(shù)就能找到存儲(chǔ)空位,那么就要保證存儲(chǔ)空間足夠的大,空間利用 率就會(huì)大大的降低,在這種方法下查找需要時(shí)間長(zhǎng)短跟表容量大小很難達(dá)到平 衡。

發(fā)明內(nèi)容
本發(fā)明提供一種哈希表項(xiàng)存儲(chǔ)、查找裝置及方法,用以解決現(xiàn)有哈希表存儲(chǔ)結(jié)構(gòu)的查表需要時(shí)間長(zhǎng)短跟表容量大小很難達(dá)到平衡的問(wèn)題。
本發(fā)明所述技術(shù)方案如下
一種哈希表項(xiàng)存儲(chǔ)裝置,包括主控邏輯模塊、哈希表拆分模塊、表項(xiàng)添加 模塊、若干個(gè)查找模塊和與查找模塊對(duì)應(yīng)的若干個(gè)表項(xiàng)存儲(chǔ)模塊,其中,
主控邏輯模塊,用于對(duì)哈希表項(xiàng)的存儲(chǔ)過(guò)程進(jìn)行控制;
哈希表拆分模塊,用于在主控邏輯模塊的控制下將所述哈希表拆分為若干 張哈希子表,將其存入表項(xiàng)存儲(chǔ)模塊中,每張哈希子表對(duì)應(yīng)N個(gè)哈希函數(shù), N>=1,還用于確定初始的目標(biāo)哈希子表,以及在接收到表項(xiàng)存儲(chǔ)模塊發(fā)出的 更新指令后,按照該更新指令的要求進(jìn)行目標(biāo)哈希子表的更新;
表項(xiàng)添加模塊,用于依次利用當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)計(jì) 算待存儲(chǔ)表項(xiàng)鍵值的哈希值,根據(jù)每次計(jì)算得到的哈希值在當(dāng)前的目標(biāo)哈希子 表中查找空位,若查找到,則將所述待存儲(chǔ)表項(xiàng)的信息存入該空位中,若根據(jù) 計(jì)算得到的N個(gè)哈希值都沒(méi)有找到空位,則判斷當(dāng)前的目標(biāo)哈希子表是否為最 后一張哈希子表,若不是,向哈希表拆分模塊發(fā)送將當(dāng)前的目標(biāo)哈希子表更新 為其下一張,合希子表的更新指令;
多個(gè)查找模塊 ,用于接收表項(xiàng)添加模塊發(fā)出的讀寫(xiě)指令,根據(jù)指令中攜帶 的表項(xiàng)存儲(chǔ)模塊的地址對(duì)相應(yīng)表項(xiàng)存儲(chǔ)模塊中存儲(chǔ)的哈希子表進(jìn)行讀寫(xiě)操作;
多個(gè)表項(xiàng)存儲(chǔ)模塊,用于存儲(chǔ)哈希子表,每個(gè)表項(xiàng)存儲(chǔ)模塊存儲(chǔ)一張或多 張哈希子表。
進(jìn)一步地,所述表項(xiàng)添加模塊在判定當(dāng)前的目標(biāo)哈希子表為最后一張哈希 子表時(shí),繼續(xù)判斷當(dāng)前的目標(biāo)哈希子表的哈希函數(shù)更新次數(shù)是否大于預(yù)設(shè)門 限,若是,向哈希表拆分模塊發(fā)送將當(dāng)前的目標(biāo)哈希子表更新為其上一張哈希 子表的更新指令,否則,將當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)全部更新。
進(jìn)一步地,所述裝置還包括
異常處理模塊,用于響應(yīng)主控邏輯模塊的哈希表刷新請(qǐng)求,通過(guò)查找模塊 對(duì)表項(xiàng)存儲(chǔ)模塊進(jìn)行清零和重新賦值操作。述若干張哈希子表對(duì)應(yīng)的哈希函數(shù)之間采用不同的循環(huán)冗余碼校驗(yàn)多項(xiàng)式。
一種哈希表項(xiàng)查找裝置,所述哈希表由若干張哈希子表組成,每張哈希子
表對(duì)應(yīng)N個(gè)哈希函數(shù),N>=1,包括主控邏輯模塊、數(shù)據(jù)判決模塊、若干個(gè)計(jì) 算模塊、若干個(gè)查找模塊及與查找模塊一一對(duì)應(yīng)的若干個(gè)表項(xiàng)存儲(chǔ)模塊,其中,
主控邏輯模塊,用于對(duì)哈希表項(xiàng)的查找過(guò)程進(jìn)行控制;
多個(gè)計(jì)算模塊,用于在主控邏輯模塊的控制下利用每張哈希子表對(duì)應(yīng)的第 i個(gè)哈希函數(shù)并行計(jì)算需要查找的鍵值的哈希值;
多個(gè)查找模塊,用于根據(jù)計(jì)算模塊計(jì)算得到的哈希值在其各自對(duì)應(yīng)的表項(xiàng) 存儲(chǔ)模塊中并行地查找;
數(shù)據(jù)判決模塊,用于將各個(gè)哈希子表的查表結(jié)果與需要查找的鍵值進(jìn)行比 較,判定是否存在匹配的表項(xiàng),若存在,將該表項(xiàng)的信息作為最終查表結(jié)果, 否則,判斷當(dāng)前的i值是否等于N,若是,向主控邏輯模塊發(fā)送本次查找失敗 消息,否則,i=i++。
進(jìn)一步地,所述哈希子表對(duì)應(yīng)的哈希函數(shù)與存儲(chǔ)表項(xiàng)時(shí)該哈希子表對(duì)應(yīng)的 哈希函數(shù)相同。
一種哈希表存儲(chǔ)方法,包括步驟
A、 將所述哈希表拆分為若干張哈希子表,每張哈希子表對(duì)應(yīng)N個(gè)哈希函 數(shù),N〉=l;
B、 將第一張哈希子表作為當(dāng)前的目標(biāo)哈希子表;
C、 依次利用當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)計(jì)算待存儲(chǔ)表項(xiàng)鍵 值的哈希值,根據(jù)每次計(jì)算得到的哈希值在當(dāng)前的目標(biāo)哈希子表中查找空位, 若查找到,則將所述待存儲(chǔ)表項(xiàng)的信息存入該空位中,若根據(jù)計(jì)算得到的N個(gè) 哈希值都沒(méi)有找到空位,執(zhí)行下一步驟;
D、 判斷當(dāng)前的目標(biāo)哈希子表是否為最后一張哈希子表,若不是,將當(dāng)前 的目標(biāo)哈希子表更新為其下一張哈希子表,返回步驟C。進(jìn)一步地,所述步驟C中,如果N〉1,則取待存儲(chǔ)表項(xiàng)的鍵值,利用當(dāng)前
的目標(biāo)哈希子表對(duì)應(yīng)的第1個(gè)哈希函數(shù)計(jì)算其哈希值,根據(jù)該哈希值在當(dāng)前的 目標(biāo)哈希子表中查找空位,若查找到,則將所述待存儲(chǔ)表項(xiàng)的信息存入該空位
中,否則,換下一個(gè)哈希函數(shù)計(jì)算其哈希值,重復(fù)上述操作,如果直到第N個(gè) 哈希函數(shù)都沒(méi)有找到空位,則執(zhí)行步驟D。
進(jìn)一步地,所述步驟C中,在計(jì)算出待存儲(chǔ)表項(xiàng)鍵值的哈希值后,根據(jù)當(dāng) 前的目標(biāo)哈希子表的容量對(duì)該哈希值進(jìn)行截取,以截取后的哈希值為索引在所 述目標(biāo)哈希子表中查找空位。
進(jìn)一步地,所述哈希子表對(duì)應(yīng)的哈希函數(shù)為循環(huán)冗余碼校驗(yàn)函數(shù);所述若
進(jìn)一步地,所述步驟D具體包括
Dl、判斷當(dāng)前的目標(biāo)哈希子表是否為最后一張哈希子表,若是,執(zhí)行下一 步驟,否則,將當(dāng)前的目標(biāo)哈希子表更新為其下一張哈希子表,返回步驟C;
是,將當(dāng)前的目標(biāo)哈希子表更新為其上一張哈希子表,重復(fù)執(zhí)行本步驟,否則, 將當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)全部更新,返回步驟C。
一種哈希表查找方法,所述哈希表由若干張哈希子表組成,每張哈希子表 對(duì)應(yīng)N個(gè)哈希函數(shù),N>=1,包括步驟
A、 利用每張哈希子表對(duì)應(yīng)的第i個(gè)哈希函數(shù)并行計(jì)算需要查找的鍵值的 哈希值,i的初始值為1,根據(jù)計(jì)算得到的哈希值在其各自對(duì)應(yīng)的哈希子表中并 行查找;
B、 將各個(gè)哈希子表的查表結(jié)果與需要查找的鍵值進(jìn)行比較,判定是否存 在匹配的表項(xiàng),若存在,將該表項(xiàng)的信息作為最終查表結(jié)果,否則,執(zhí)行下一 步驟;
C、 判斷當(dāng)前的i值是否等于N,若是,本次查找失敗,流程結(jié)束,否則, 將i值加1,返回步驟A。進(jìn)一步地,所述哈希子表對(duì)應(yīng)的N哈希函數(shù)與存儲(chǔ)表項(xiàng)時(shí)該哈希子表對(duì)應(yīng) 的哈希函數(shù)相同。
進(jìn)一步地,所述步驟A中,在計(jì)算出需要查找的鍵:值的哈希值后,根據(jù)其
各自對(duì)應(yīng)的哈希子表的容量對(duì)該哈希值進(jìn)行截取,以截取后的哈希值為索引在 其各自對(duì)應(yīng)的哈希子表中并行查找。
與現(xiàn)有技術(shù)相比,本發(fā)明具有如下有益效果
本發(fā)明效地解決了傳統(tǒng)哈希表結(jié)構(gòu)查表需要時(shí)間長(zhǎng)短跟表空間大小很難 達(dá)到平衡的問(wèn)題,以極小的查找時(shí)間代價(jià)以及極高的表空間利用率實(shí)現(xiàn)全部表 項(xiàng)存儲(chǔ)而無(wú)表項(xiàng)遺留,能夠在表空間大小和查找效率方面獲得比較好的均衡。


圖1為本發(fā)明所述^^合希表項(xiàng)存儲(chǔ)裝置的一個(gè)較佳實(shí)施例的結(jié)構(gòu)框圖; 圖2為本發(fā)明所述哈希表項(xiàng)查找裝置的一個(gè)較佳實(shí)施例的結(jié)構(gòu)框圖; 圖3為將本發(fā)明所述哈希表項(xiàng)存儲(chǔ)裝置及哈希表項(xiàng)查找裝置結(jié)合后構(gòu)成的 裝置的結(jié)構(gòu)框圖4為本發(fā)明所述哈希表項(xiàng)存儲(chǔ)方法的一個(gè)較佳實(shí)施例的流程圖; 圖5為本發(fā)明所述哈希表項(xiàng)查找方法的一個(gè)較佳實(shí)施例的流程圖。
具體實(shí)施例方式
本發(fā)明的主要技術(shù)構(gòu)思是將大塊的哈希表存儲(chǔ)空間分拆成多個(gè)哈希子表 存儲(chǔ)空間,每個(gè)哈希子表對(duì)應(yīng)至少一個(gè)哈希函數(shù),在存儲(chǔ)表項(xiàng)時(shí),依次利用每 張哈希子表對(duì)應(yīng)的哈希函數(shù)計(jì)算哈希值,在該哈希子表中查找空位存入表項(xiàng); 在查找表項(xiàng)時(shí),對(duì)所有哈希子表實(shí)行并行查找,以提高查找速度。
下面結(jié)合各個(gè)附圖對(duì)本發(fā)明的具體實(shí)現(xiàn)過(guò)程予以進(jìn)一步詳細(xì)的闡述。
實(shí)施例一
請(qǐng)參閱圖1,該圖為本發(fā)明所述哈希表項(xiàng)存儲(chǔ)裝置的一個(gè)較佳實(shí)施例的結(jié)構(gòu)框圖,該哈希表存儲(chǔ)裝置主要用于完成哈希表項(xiàng)的添加、刪除或者刷新等操 作。其主要包括主控邏輯模塊、哈希表拆分模塊、表項(xiàng)添加模塊、統(tǒng)計(jì)模塊、 異常處理模塊、若干個(gè)查找模塊和與查找模塊一一對(duì)應(yīng)的若干個(gè)表項(xiàng)存儲(chǔ)模 塊,其中,主控邏輯模塊耦合至表項(xiàng)添加模塊、哈希表拆分模塊、統(tǒng)計(jì)模塊和
異常處理模塊;所述表項(xiàng)添加模塊、哈希表拆分模塊、統(tǒng)計(jì)模塊和異常處理模 塊均分別耦合至多個(gè)查找模塊1 ~ n,多個(gè)查找模塊1 ~ n分別耦合至多個(gè)表項(xiàng) 存儲(chǔ)模塊l n。其中各個(gè)模塊的主要功能如下
主控邏輯模塊,是哈希表項(xiàng)存儲(chǔ)裝置的控制部件,用于對(duì)哈希表項(xiàng)的存儲(chǔ) 過(guò)程進(jìn)行控制,主要實(shí)現(xiàn)算法啟動(dòng),終止及任務(wù)調(diào)度等操作。其可以由硬件邏 輯實(shí)現(xiàn),如ASIC (專用集成電路)或者是FPGA (現(xiàn)場(chǎng)可編程邏輯門陣列) 或者是其他可以實(shí)現(xiàn)邏輯函數(shù)功能的芯片。也可以通過(guò)運(yùn)行在CPU(中央控制 器)上的軟件來(lái)實(shí)現(xiàn),在這種實(shí)現(xiàn)方式下,表項(xiàng)添加模塊、統(tǒng)計(jì)模塊、哈希表 拆分模塊和異常處理模塊均可以通過(guò)軟件來(lái)實(shí)現(xiàn)。
哈希表拆分模塊,用于在主控邏輯模塊的控制下將所述哈希表拆分為若干 張哈希子表,將其存入表項(xiàng)存儲(chǔ)模塊中,每張哈希子表對(duì)應(yīng)N個(gè)哈希函數(shù), N>=1,其中,若干張哈希子表的存儲(chǔ)空間大小可以根據(jù)需要搭配選擇。所述 哈希表拆分模塊還用于將第一張哈希子表設(shè)置為初始的目標(biāo)哈希子表,在接收 到表項(xiàng)存儲(chǔ)模塊發(fā)出的更新指令時(shí),按照該更新指令的要求進(jìn)行目標(biāo)哈希子表 的更新。
表項(xiàng)添加模塊,用于依次利用當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)計(jì) 算待存儲(chǔ)表項(xiàng)鍵值的哈希值,根據(jù)每次計(jì)算得到的哈希值在當(dāng)前的目標(biāo)哈希子 表中查找空位,若查找到,則將所述待存儲(chǔ)表項(xiàng)的信息存入該空位中,若根據(jù) 計(jì)算得到的N個(gè)哈希值都沒(méi)有找到空位,則判斷當(dāng)前的目標(biāo)哈希子表是否為最 后一張哈希子表,若不是,向哈希表拆分模塊發(fā)送將當(dāng)前的目標(biāo)哈希子表更新 為其下一張哈希子表的更新指令;
進(jìn)一步地,所述表項(xiàng)添加模塊在判定當(dāng)前的目標(biāo)哈希子表為最后一張哈希子表時(shí),繼續(xù)判斷當(dāng)前的目標(biāo)哈希子表的哈希函數(shù)更新次數(shù)是否大于預(yù)設(shè)門 限,若是,向哈希表拆分模塊發(fā)送將當(dāng)前的目標(biāo)哈希子表更新為其上一張哈希 子表的更新指令,否則,將當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)全部更新。 上述哈希表拆分模塊和表項(xiàng)添加模塊協(xié)同工作,具體的說(shuō),在進(jìn)行哈希表 項(xiàng)存儲(chǔ)時(shí),表項(xiàng)拆分模塊將其目標(biāo)子表設(shè)定為第一張哈希子表,并將該表項(xiàng)傳
遞給表項(xiàng)添加模塊。表項(xiàng)添加模塊依次根據(jù)第 一 張哈希子表對(duì)應(yīng)的N個(gè)哈希函 數(shù)之一,計(jì)算得到該條目的索引值K,并嘗試將該表項(xiàng)存入所取的哈希函數(shù)對(duì) 應(yīng)的哈希子表中的對(duì)應(yīng)于索引值K的位置。在進(jìn)行哈希表項(xiàng)存儲(chǔ)的時(shí)候,有可 能遇到哈希沖突的情況,即兩個(gè)不同的哈希表項(xiàng)經(jīng)過(guò)計(jì)算得到同 一張哈希子表 的同一個(gè)索引值。在這種情況下,如果N大于1,則表項(xiàng)添加模塊對(duì)當(dāng)前的目 標(biāo)哈希子表利用下一哈希函數(shù)查找空位,重復(fù)上述操作,如果利用所有N個(gè)哈 希函數(shù)在當(dāng)前的目標(biāo)哈希子表都沒(méi)完成存入表項(xiàng)的工作,則返回失敗消息給哈 希表拆分模塊,哈希表拆分模塊則判斷當(dāng)前的目標(biāo)哈希子表是否為最后一張哈 希子表,若不是則將該表項(xiàng)的目標(biāo)子表設(shè)置為下一張子表,傳遞給表項(xiàng)添加模 塊,重復(fù)上述過(guò)程;若已經(jīng)是最后一張哈希子表則反饋失敗消息給主控邏輯模 塊,通過(guò)主控邏輯模塊調(diào)用異常處理模塊來(lái)完成哈希表的刷新。表項(xiàng)添加模塊 可通過(guò)多個(gè)查找模塊讀取、修改或者刪除表項(xiàng)存儲(chǔ)模塊中的內(nèi)容。
多個(gè)查找模塊,用于接收表項(xiàng)添加模塊發(fā)出的讀寫(xiě)指令,根據(jù)指令中攜帶 的表項(xiàng)存儲(chǔ)模塊的地址對(duì)相應(yīng)表項(xiàng)存儲(chǔ)模塊中存儲(chǔ)的哈希子表進(jìn)行讀寫(xiě)操作。 每個(gè)查找模塊獨(dú)立的耦合于一個(gè)表項(xiàng)存儲(chǔ)模塊,通過(guò)表項(xiàng)存儲(chǔ)模塊的地址總線 和數(shù)據(jù)總線對(duì)表項(xiàng)存儲(chǔ)模塊中的數(shù)據(jù)進(jìn)行訪問(wèn)和修改。多個(gè)查找模塊接收表項(xiàng) 添加模塊、統(tǒng)計(jì)模塊、哈希表拆分模塊和異常處理模塊發(fā)出的讀寫(xiě)指令,將其 轉(zhuǎn)換成表項(xiàng)存儲(chǔ)模塊的地址,對(duì)表項(xiàng)存儲(chǔ)模塊中的存儲(chǔ)數(shù)據(jù)進(jìn)行操作。
多個(gè)表項(xiàng)存儲(chǔ)模塊,用于存儲(chǔ)哈希子表,每個(gè)表項(xiàng)存儲(chǔ)模塊存儲(chǔ)一張或多 張哈希子表,其中每張哈希子表都是通過(guò)對(duì)所述哈希表進(jìn)行拆分得到。每個(gè)表 項(xiàng)存儲(chǔ)模塊具有獨(dú)立的地址訪問(wèn)總線和獨(dú)立的數(shù)據(jù)總線,其中對(duì)每一個(gè)模塊而言,地址總線和數(shù)據(jù)總線可以復(fù)用,但是多個(gè)表項(xiàng)存儲(chǔ)模塊之間不復(fù)用。多個(gè) 表項(xiàng)存儲(chǔ)模塊通過(guò)上述的獨(dú)立的地址訪問(wèn)總線和獨(dú)立的數(shù)據(jù)總線分別耦合于 多個(gè)查找模塊,多個(gè)查找模塊可以通過(guò)發(fā)送地址來(lái)訪問(wèn)多個(gè)表項(xiàng)存儲(chǔ)模塊中對(duì) 應(yīng)于所發(fā)送地址處存儲(chǔ)的數(shù)據(jù)。
所述的多個(gè)表項(xiàng)存儲(chǔ)模塊可以通過(guò)當(dāng)前存在的各種數(shù)據(jù)存儲(chǔ)技術(shù)來(lái)實(shí)現(xiàn),
如在需要少延時(shí)的應(yīng)用場(chǎng)景下,可以用n個(gè)獨(dú)立的高速SRAM芯片來(lái)作為多 個(gè)表項(xiàng)存儲(chǔ)模塊,所述的高速SRAM芯片可以是ZBT SRAM, QDR SRAM, QDRII SRAM, QDRII+ SRAM等各種常用的SRAM芯片;在需要大容量表項(xiàng) 空間的情況下,可以用n個(gè)獨(dú)立的高速DRAM芯片來(lái)作為多個(gè)表項(xiàng)存儲(chǔ)模塊, 所述的高速DRAM芯片可以是SDR SRAM, DDR SRAM, DDRII SRAM, DDRIII SRAM等各種常用的SRAM芯片;在需要掉電保存數(shù)據(jù)的情況下,可 以用n個(gè)獨(dú)立的FLASH芯片來(lái)作為多個(gè)表項(xiàng)存儲(chǔ)模塊,所述的FLASH芯片 可以是NAND FLASH, NOR FLASH, NV RAM或者其他各種常用的存儲(chǔ)芯片; 在海量數(shù)據(jù)的情況下,所述多個(gè)表項(xiàng)存儲(chǔ)模塊還可以用多個(gè)獨(dú)立的硬盤(pán),多個(gè) 獨(dú)立的磁盤(pán)存儲(chǔ)陣列,或者是光盤(pán)驅(qū)動(dòng)器等海量數(shù)據(jù)存儲(chǔ)技術(shù)來(lái)實(shí)現(xiàn)。本領(lǐng)域 的技術(shù)人員可以在不脫離本發(fā)明的精神和范圍下任意選取多個(gè)表項(xiàng)存儲(chǔ)模塊 的實(shí)現(xiàn)介質(zhì)。
異常處理模塊和統(tǒng)計(jì)模塊用于完成系統(tǒng)監(jiān)控和錯(cuò)誤恢復(fù)等任務(wù)。如每次表 項(xiàng)存儲(chǔ)失敗,統(tǒng)計(jì)模塊均會(huì)將其計(jì)入存儲(chǔ)失敗記錄。異常處理模塊響應(yīng)主控邏 輯模塊發(fā)出的哈希表刷新請(qǐng)求,通過(guò)多個(gè)查找模塊對(duì)多個(gè)表項(xiàng)存儲(chǔ)模塊進(jìn)行清
零和重新賦值操作。
本實(shí)施例中,哈希子表對(duì)應(yīng)的N個(gè)哈希函凄t可以是CRC函數(shù)也可以是其 他函數(shù),當(dāng)采用CRC函數(shù)做為本發(fā)明中哈希子表對(duì)應(yīng)的哈希函數(shù)時(shí),若干張 哈希子表對(duì)應(yīng)的哈希函數(shù)之間可以采用不同的CRC多項(xiàng)式。
實(shí)施例二
請(qǐng)參閱圖2,該圖為本發(fā)明所述哈希表項(xiàng)查找裝置的一個(gè)較佳實(shí)施例的結(jié)構(gòu)框圖,本裝置查找的哈希表由若干張哈希子表組成,若干張哈希子表的存儲(chǔ) 空間大小可以根據(jù)需要搭配選擇。每張哈希子表具有獨(dú)立的地址控制線,可以
同時(shí)被訪問(wèn)。每張哈希子表對(duì)應(yīng)N個(gè)哈希函數(shù),N>=1,每張哈希子表對(duì)應(yīng)的
哈希函數(shù)與存儲(chǔ)表項(xiàng)時(shí)該哈希子表對(duì)應(yīng)的哈希函數(shù)相同。本裝置主要包括主控
邏輯模塊、數(shù)據(jù)判決模塊、若干個(gè)計(jì)算模塊i ~n、若干個(gè)查找模塊1 ~n以及 與若千個(gè)查找模塊一一對(duì)應(yīng)的若干個(gè)表項(xiàng)存儲(chǔ)模塊l n,其中,所述主控邏輯 模塊耦合至多個(gè)計(jì)算模塊,以及數(shù)據(jù)判決模塊;多個(gè)計(jì)算模塊分別耦合至多個(gè) 查找模塊;多個(gè)查找模塊分別耦合至多個(gè)表項(xiàng)存儲(chǔ)模塊。其中各個(gè)模塊的主要 功能如下
主控邏輯模塊,是哈希表項(xiàng)查找裝置的控制部件,用于對(duì)哈希表項(xiàng)的查找 過(guò)程進(jìn)行控制,主要實(shí)現(xiàn)數(shù)據(jù)分發(fā),結(jié)果收集等才喿作。其可以由硬件邏輯實(shí)現(xiàn), 如ASIC (專用集成電路)或者是FPGA (現(xiàn)場(chǎng)可編程邏輯門陣列)或者是其 他可以實(shí)現(xiàn)邏輯函數(shù)功能的芯片;也可以通過(guò)運(yùn)行在CPU(中央控制器)上的 軟件來(lái)實(shí)現(xiàn)。
多個(gè)計(jì)算模塊,用于在主控邏輯模塊的控制下利用每張哈希子表對(duì)應(yīng)的第 i個(gè)哈希函數(shù)并行計(jì)算需要查找的鍵值的哈希值,i的初始值為l。每個(gè)計(jì)算模 塊中包含N個(gè)不同的哈希函數(shù)。這里哈希函數(shù)可以采用各種已知的方法實(shí)現(xiàn), 如異或陣列或者類CRC函數(shù),或者經(jīng)過(guò)復(fù)雜的數(shù)學(xué)運(yùn)算等等。哈希函數(shù)的選 取準(zhǔn)則是要盡可能的減少不同的鍵值經(jīng)過(guò)哈希函數(shù)運(yùn)算后獲得的索引號(hào)沖突。 查找過(guò)程中,主控邏輯模塊將待查找的鍵值同時(shí)發(fā)送給多個(gè)計(jì)算模塊,在多個(gè) 計(jì)算模塊中,對(duì)所分配到的鍵值同時(shí)進(jìn)行N次哈希運(yùn)算,采用N個(gè)不同的哈 希函數(shù),獲得N個(gè)不同的索引。
多個(gè)查找模塊,用于根據(jù)計(jì)算模塊計(jì)算得到的哈希值在其各自對(duì)應(yīng)的表項(xiàng) 存儲(chǔ)模塊中并行地查找;每個(gè)查找模塊獨(dú)立的耦合于一個(gè)表項(xiàng)存儲(chǔ)模塊,通過(guò) 表項(xiàng)存儲(chǔ)模塊的地址總線和數(shù)據(jù)總線對(duì)表項(xiàng)存儲(chǔ)模塊中的數(shù)據(jù)進(jìn)行訪問(wèn)。每個(gè) 查找模塊接收計(jì)算模塊生成的N個(gè)不同的索引,將其轉(zhuǎn)換成表項(xiàng)存儲(chǔ)模塊的地址,讀取該地址處的數(shù)據(jù)。這里可以存在索引值的擴(kuò)充,加減偏移量或者截取 等運(yùn)算。在獲取到對(duì)應(yīng)于所述地址的數(shù)據(jù)后,查找模塊將通過(guò)多個(gè)計(jì)算模塊得 到的索引值和多個(gè)表項(xiàng)存儲(chǔ)模塊獲取的數(shù)據(jù)值一起傳送給數(shù)據(jù)判決模塊。
多個(gè)表項(xiàng)存儲(chǔ)模塊,用于存儲(chǔ)哈希子表,每個(gè)表項(xiàng)存儲(chǔ)模塊存儲(chǔ)一張哈希 子表,其中每張哈希子表都是通過(guò)對(duì)所述哈希表進(jìn)行拆分得到。每個(gè)表項(xiàng)存儲(chǔ) 模塊具有獨(dú)立的地址訪問(wèn)總線和獨(dú)立的數(shù)據(jù)總線,其中對(duì)每一個(gè)模塊而言,地 址總線和數(shù)據(jù)總線可以復(fù)用,但是多個(gè)表項(xiàng)存儲(chǔ)模塊之間不復(fù)用。多個(gè)表項(xiàng)存 儲(chǔ)模塊通過(guò)上述的獨(dú)立的地址訪問(wèn)總線和獨(dú)立的數(shù)據(jù)總線分別耦合于多個(gè)查 找模塊,多個(gè)查找模塊可以通過(guò)發(fā)送地址來(lái)訪問(wèn)多個(gè)表項(xiàng)存儲(chǔ)模塊中對(duì)應(yīng)于所 發(fā)送地址處存儲(chǔ)的數(shù)據(jù)。表項(xiàng)存儲(chǔ)模塊的實(shí)現(xiàn)方式與上述哈希表項(xiàng)查找裝置中 表項(xiàng)存儲(chǔ)模塊的實(shí)現(xiàn)方式相同,這里不再給予過(guò)多贅述。
數(shù)據(jù)判決模塊,用于將各個(gè)哈希子表的查表結(jié)果與需要查找的鍵值進(jìn)行比 較,判定是否存在匹配的表項(xiàng),若存在,將該表項(xiàng)的信息作為最終查表結(jié)果,
否則,判斷當(dāng)前的i值是否等于N,若是,向主控邏輯模塊發(fā)送本次查找失敗 消息,否則,將i值加1。
多個(gè)查找^^莫塊在獲取了多個(gè)查找結(jié)果后,將結(jié)果傳送至數(shù)據(jù)判決模塊,數(shù) 據(jù)判決模塊根據(jù)主控邏輯模塊傳送過(guò)來(lái)的原始鍵值,比較多個(gè)查找結(jié)果中,哪
一個(gè)是一次哈希命中(HIT),由于多個(gè)查找模塊獲取的多個(gè)查找結(jié)果來(lái)自于多 個(gè)表項(xiàng)存儲(chǔ)模塊中存儲(chǔ)的多個(gè)哈希子表,而所述哈希子表是通過(guò)對(duì)哈希表進(jìn)行 拆分得到的,因此,這當(dāng)中不存在重復(fù)的查找結(jié)果,只有一個(gè)查找結(jié)果是可能 的正確結(jié)果,或者返回的結(jié)果均與鍵值不符,本次哈希查找失敗。在查找正確 的情況下,數(shù)據(jù)判決模塊將正確的一組數(shù)據(jù)中的索引值返回給主控邏輯模塊, 代表本次哈希查找的結(jié)果;在查找失敗的情況下,數(shù)據(jù)判決模塊將返回給主控 邏輯模塊一個(gè)無(wú)效索引值或者一個(gè)中斷信號(hào),通知主控邏輯模塊本次查找失敗。他函數(shù),當(dāng)采用CRC函數(shù)做為本發(fā)明中哈希子表對(duì)應(yīng)的哈希函數(shù)時(shí),若干張 哈希子表對(duì)應(yīng)的哈希函數(shù)之間可以采用不同的CRC多項(xiàng)式。 實(shí)施例三
上述實(shí)施例一中的哈希表項(xiàng)存儲(chǔ)裝置與上述實(shí)施例二中的哈希表項(xiàng)查找 裝置可單獨(dú)應(yīng)用,也可將其結(jié)合起來(lái)進(jìn)行應(yīng)用,請(qǐng)參閱圖3,該圖為將本發(fā)明 所述哈希表項(xiàng)存儲(chǔ)裝置及哈希表項(xiàng)查找裝置結(jié)合后構(gòu)成的裝置的結(jié)構(gòu)框圖,結(jié) 合后的裝置中各個(gè)模塊的功能為上述哈希表項(xiàng)存儲(chǔ)裝置中各模塊的功能與上 述哈希表項(xiàng)查找裝置中各模塊功能的結(jié)合,這里不再給予過(guò)多贅述。
實(shí)施例四
請(qǐng)參閱圖4,該圖為本發(fā)明所述哈希表項(xiàng)存儲(chǔ)方法的一個(gè)較佳實(shí)施例的流 程圖,其主要包括如下步驟
步驟SlOl、將哈希表拆分為M張哈希子表,每張哈希子表對(duì)應(yīng)N個(gè)哈希 函數(shù),N>=1,其中,若干張哈希子表的存儲(chǔ)空間大小可以根據(jù)需要搭配選擇;
步驟S102、將第一張哈希子表作為當(dāng)前的目標(biāo)哈希子表;
步驟S103、取待存儲(chǔ)表項(xiàng)的鍵值,利用當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的第i 個(gè)哈希函數(shù)計(jì)算其哈希值,i的初始值為l;
步驟S104、根據(jù)計(jì)算得到的哈希值在當(dāng)前的目標(biāo)哈希子表中查找是否有空 位,若有空位,則執(zhí)行步驟S106,否則,執(zhí)行步驟S105;
在步驟S103中計(jì)算出待存儲(chǔ)表項(xiàng)鍵值的哈希值后,若當(dāng)前的目標(biāo)哈希子 表的容量小于計(jì)算得到的哈希值的位數(shù),則需要對(duì)該哈希值進(jìn)行截取,以截取 后的哈希值為索引在所述目標(biāo)哈希子表中查找空位。
步驟S105 、判斷當(dāng)前使用的哈希函數(shù)是否為該哈希子表對(duì)應(yīng)的最后一個(gè)哈 希函數(shù),如果是,則執(zhí)行步驟S107,否則,i=i+l,返回步驟S103;
步驟S106、將待存儲(chǔ)表項(xiàng)的信息存入查找到的空位中。
步驟S107、判斷當(dāng)前的目標(biāo)哈希子表是否為最后一張哈希子表,若是,執(zhí) 行步驟S109,否則,執(zhí)行步驟S108;步驟S108、將當(dāng)前的目標(biāo)哈希子表更新為其下一張哈希子表,返回步驟 S103。
步驟S109、判斷當(dāng)前的目標(biāo)哈希子表的哈希函數(shù)更新次數(shù)是否大于預(yù)設(shè)門 限,若是,執(zhí)行步驟SllO,否則,執(zhí)行步驟S111;
步驟SllO、將當(dāng)前的目標(biāo)哈希子表更新為其上一張哈希子表,返回步驟 S109;
步驟Slll、將當(dāng)前的目標(biāo)哈希子表的哈希函數(shù)全部更新,返回步驟S103。 實(shí)施例五
請(qǐng)參閱圖5,該圖為本發(fā)明所述哈希表項(xiàng)查找方法的一個(gè)較佳實(shí)施例的流 程圖,本實(shí)施例中查找的哈希表由若干張哈希子表組成,若干張哈希子表的存 儲(chǔ)空間大小可以根據(jù)需要搭配選擇。每張哈希子表具有獨(dú)立的地址控制線,可 以同時(shí)被訪問(wèn)。每張哈希子表對(duì)應(yīng)N個(gè)。合希函數(shù),N>=1,每張哈希子表對(duì)應(yīng) 的哈希函數(shù)與存儲(chǔ)表項(xiàng)時(shí)該哈希子表對(duì)應(yīng)的哈希函數(shù)相同。其主要包括如下步 驟
步驟S201 、利用每張哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)中所對(duì)應(yīng)的第i個(gè)哈希 函數(shù)并行計(jì)算需要查找的鍵值的哈希值,i的初始值為1;
步驟S202、根據(jù)計(jì)算得到的哈希值在其各自對(duì)應(yīng)的哈希子表中并行查找;
步驟S203、將各個(gè)哈希子表的查表結(jié)果與需要查找的鍵值進(jìn)行比較,確定 是否匹配,如果匹配則執(zhí)行步驟204,否則,執(zhí)行步驟205;
步驟S204、將該表項(xiàng)的信息作為最終查表結(jié)果;
步驟S205、判斷是否已經(jīng)比較到哈希子表對(duì)應(yīng)的最后一個(gè)哈希函數(shù),如果 是,則表示無(wú)法查找到該表項(xiàng),否則i-i+l,返回步驟S201。
若在哈希表存儲(chǔ)過(guò)程中對(duì)待存儲(chǔ)表項(xiàng)鍵值的哈希值進(jìn)行了截取,則在本方 法所述哈希表查找過(guò)程中,在步驟S201中計(jì)算出需要查找的鍵值的哈希值后, 同樣需要根據(jù)其各自對(duì)應(yīng)的哈希子表的容量對(duì)該哈希值進(jìn)行截取,以截取后的 哈希值為索引在其各自對(duì)應(yīng)的哈希子表中并行查找。若在哈希表存儲(chǔ)過(guò)程中,如果N大于l,則在查找過(guò)程中對(duì)每張哈希子表 最多需要查找N次,直到找到匹配的表項(xiàng)。
明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及 其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1、一種哈希表項(xiàng)存儲(chǔ)裝置,其特征在于,包括主控邏輯模塊、哈希表拆分模塊、表項(xiàng)添加模塊、若干個(gè)查找模塊和與查找模塊對(duì)應(yīng)的若干個(gè)表項(xiàng)存儲(chǔ)模塊,其中,主控邏輯模塊,用于對(duì)哈希表項(xiàng)的存儲(chǔ)過(guò)程進(jìn)行控制;哈希表拆分模塊,用于在主控邏輯模塊的控制下將所述哈希表拆分為若干張哈希子表,將其存入表項(xiàng)存儲(chǔ)模塊中,每張哈希子表對(duì)應(yīng)N個(gè)哈希函數(shù),N>=1,還用于確定初始的目標(biāo)哈希子表,以及在接收到表項(xiàng)存儲(chǔ)模塊發(fā)出的更新指令后,按照該更新指令的要求進(jìn)行目標(biāo)哈希子表的更新;表項(xiàng)添加模塊,用于依次利用當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)計(jì)算待存儲(chǔ)表項(xiàng)鍵值的哈希值,根據(jù)每次計(jì)算得到的哈希值在當(dāng)前的目標(biāo)哈希子表中查找空位,若查找到,則將所述待存儲(chǔ)表項(xiàng)的信息存入該空位中,若根據(jù)計(jì)算得到的N個(gè)哈希值都沒(méi)有找到空位,則判斷當(dāng)前的目標(biāo)哈希子表是否為最后一張哈希子表,若不是,向哈希表拆分模塊發(fā)送將當(dāng)前的目標(biāo)哈希子表更新為其下一張哈希子表的更新指令;多個(gè)查找模塊,用于接收表項(xiàng)添加模塊發(fā)出的讀寫(xiě)指令,根據(jù)指令中攜帶的表項(xiàng)存儲(chǔ)模塊的地址對(duì)相應(yīng)表項(xiàng)存儲(chǔ)模塊中存儲(chǔ)的哈希子表進(jìn)行讀寫(xiě)操作;多個(gè)表項(xiàng)存儲(chǔ)模塊,用于存儲(chǔ)哈希子表,每個(gè)表項(xiàng)存儲(chǔ)模塊存儲(chǔ)一張或多張哈希子表。
2、 如權(quán)利要求1所述的裝置,其特征在于,所述表項(xiàng)添加模塊在判定當(dāng) 前的目標(biāo)哈希子表為最后一張哈希子表時(shí),繼續(xù)判斷當(dāng)前的目標(biāo)哈希子表的哈 希函數(shù)更新次數(shù)是否大于預(yù)設(shè)門限,若是,向哈希表拆分模塊發(fā)送將當(dāng)前的目 標(biāo)哈希子表更新為其上一張哈希子表的更新指令,否則,將當(dāng)前的目標(biāo)哈希子 表對(duì)應(yīng)的N個(gè)哈希函數(shù)全部更新。
3、 如權(quán)利要求l所述的裝置,其特征在于,還包括 異常處理模塊,用于響應(yīng)主控邏輯模塊的哈希表刷新請(qǐng)求,通過(guò)查找模塊對(duì)表項(xiàng)存儲(chǔ)模塊進(jìn)行清零和重新賦值操作。
4、 如權(quán)利要求1或3所述的裝置,其特征在于,所述哈希子表對(duì)應(yīng)的N 個(gè)哈希函數(shù)為循環(huán)冗余碼校驗(yàn)函數(shù);所述若干張哈希子表對(duì)應(yīng)的哈希函數(shù)之間 采用不同的循環(huán)冗余碼校驗(yàn)多項(xiàng)式。
5、 一種哈希表項(xiàng)查找裝置,所述哈希表由若干張哈希子表組成,每張哈 希子表對(duì)應(yīng)N個(gè)哈希函數(shù),N>=1,其特征在于,包括主控邏輯模塊、數(shù)據(jù)判 決模塊、若干個(gè)計(jì)算模塊、若干個(gè)查找模塊及與查找模塊一一對(duì)應(yīng)的若干個(gè)表 項(xiàng)存儲(chǔ)模塊,其中,主控邏輯模塊,用于對(duì)哈希表項(xiàng)的查找過(guò)程進(jìn)行控制;多個(gè)計(jì)算模塊,用于在主控邏輯模塊的控制下利用每張哈希子表對(duì)應(yīng)的第i個(gè)哈希函數(shù)并行計(jì)算需要查找的鍵值的哈希值;多個(gè)查找模塊,用于根據(jù)計(jì)算模塊計(jì)算得到的哈希值在其各自對(duì)應(yīng)的表項(xiàng) 存儲(chǔ)模塊中并行地查找;數(shù)據(jù)判決模塊,用于將各個(gè)哈希子表的查表結(jié)果與需要查找的鍵值進(jìn)行比 較,判定是否存在匹配的表項(xiàng),若存在,將該表項(xiàng)的信息作為最終查表結(jié)果, 否則,判斷當(dāng)前的i值是否等于N,若是,向主控邏輯模塊發(fā)送本次查找失敗 消息,否則,i=i++。
6、 如權(quán)利要求5所述的裝置,其特征在于,所述哈希子表對(duì)應(yīng)的哈希函 數(shù)與存儲(chǔ)表項(xiàng)時(shí)該哈希子表對(duì)應(yīng)的哈希函數(shù)相同。
7、 一種哈希表存儲(chǔ)方法,其特征在于,包括步驟A、 將所述哈希表拆分為若干張哈希子表,每張哈希子表對(duì)應(yīng)N個(gè)哈希函 數(shù),N〉=l;B、 將第一張哈希子表作為當(dāng)前的目標(biāo)哈希子表;C、 依次利用當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)計(jì)算待存儲(chǔ)表項(xiàng)鍵 值的哈希值,根據(jù)每次計(jì)算得到的哈希值在當(dāng)前的目標(biāo)哈希子表中查找空位, 若查找到,則將所述待存儲(chǔ)表項(xiàng)的信息存入該空位中,若根據(jù)計(jì)算得到的N個(gè)哈希值都沒(méi)有找到空位,執(zhí)行下一步驟;D、判斷當(dāng)前的目標(biāo)哈希子表是否為最后一張哈希子表,若不是,將當(dāng)前 的目標(biāo)哈希子表更新為其下一張哈希子表,返回步驟C。
8、 如權(quán)利要求7所述的方法,其特征在于,所述步驟C中,如果NM, 則取待存儲(chǔ)表項(xiàng)的鍵:值,利用當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的第1個(gè)哈希函數(shù)計(jì)算 其哈希值,根據(jù)該哈希值在當(dāng)前的目標(biāo)哈希子表中查找空位,若查找到,則將 所述待存儲(chǔ)表項(xiàng)的信息存入該空位中,否則,換下一個(gè)哈希函數(shù)計(jì)算其哈希值, 重復(fù)上述操作,如果直到第N個(gè)哈希函數(shù)都沒(méi)有找到空位,則執(zhí)行步驟D。
9、 如權(quán)利要求7或8所述的方法,其特征在于,所述步驟C中,在計(jì)算 出待存儲(chǔ)表項(xiàng)鍵值的哈希值后,根據(jù)當(dāng)前的目標(biāo)哈希子表的容量對(duì)該哈希值進(jìn) 行截取,以截取后的哈希值為索引在所述目標(biāo)哈希子表中查找空位。
10、 如權(quán)利要求7所述的方法,其特征在于,所述哈希子表對(duì)應(yīng)的哈希函 數(shù)為循環(huán)冗余碼校驗(yàn)函數(shù);所述若干張哈希子表對(duì)應(yīng)的哈希函數(shù)之間釆用不同 的循環(huán)冗余碼校驗(yàn)多項(xiàng)式。
11、 如權(quán)利要求7或8所述的方法,其特征在于,所述步驟D具體包括 Dl、判斷當(dāng)前的目標(biāo)哈希子表是否為最后一張哈希子表,若是,執(zhí)行下一步驟,否則,將當(dāng)前的目標(biāo)哈希子表更新為其下一張哈希子表,返回步驟C;D2、判斷當(dāng)前的目標(biāo)哈希子表的哈希函數(shù)更新次數(shù)是否大于預(yù)設(shè)門限,若 是,將當(dāng)前的目標(biāo)哈希子表更新為其上一張哈希子表,重復(fù)執(zhí)行本步驟,否貝'J, 將當(dāng)前的目標(biāo)哈希子表對(duì)應(yīng)的N個(gè)哈希函數(shù)全部更新,返回步驟C。
12、 一種哈希表查找方法,所述哈希表由若干張哈希子表組成,每張哈希 子表對(duì)應(yīng)N個(gè)哈希函數(shù),N〉=l,其特征在于,包括步驟A、 利用每張哈希子表對(duì)應(yīng)的第i個(gè)哈希函數(shù)并行計(jì)算需要查找的鍵值的 哈希值,i的初始值為1,根據(jù)計(jì)算得到的哈希值在其各自對(duì)應(yīng)的哈希子表中并 行查找;B、 將各個(gè)哈希子表的查表結(jié)果與需要查找的鍵值進(jìn)行比較,判定是否存在匹配的表項(xiàng),若存在,將該表項(xiàng)的信息作為最終查表結(jié)果,否則,執(zhí)行下一步驟;C、判斷當(dāng)前的i值是否等于N,若是,本次查找失敗,流程結(jié)束,否則, 將i值加1,返回步驟A。
13、 如權(quán)利要求12所述的方法,其特征在于,所述哈希子表對(duì)應(yīng)的N哈 希函數(shù)與存儲(chǔ)表項(xiàng)時(shí)該哈希子表對(duì)應(yīng)的哈希函數(shù)相同。
14、 如權(quán)利要求12所述的方法,其特征在于,所述步驟A中,在計(jì)算出 需要查找的鍵值的哈希值后,根據(jù)其各自對(duì)應(yīng)的哈希子表的容量對(duì)該哈希值進(jìn)
全文摘要
本發(fā)明公開(kāi)了一種哈希表項(xiàng)存儲(chǔ)、查找裝置及方法,用以解決現(xiàn)有哈希表存儲(chǔ)結(jié)構(gòu)的查表需要時(shí)間長(zhǎng)短跟表容量大小很難達(dá)到平衡的問(wèn)題,本發(fā)明將大塊的哈希表存儲(chǔ)空間分拆成多個(gè)哈希子表存儲(chǔ)空間,每個(gè)哈希子表對(duì)應(yīng)N個(gè)哈希函數(shù),在存儲(chǔ)表項(xiàng)時(shí),依次利用每張哈希子表對(duì)應(yīng)的哈希函數(shù)計(jì)算哈希值,在該哈希子表中查找空位存入表項(xiàng);在查找表項(xiàng)時(shí),對(duì)所有哈希子表實(shí)行并行查找,以提高查找速度。本發(fā)明效地解決了傳統(tǒng)哈希表結(jié)構(gòu)查表需要時(shí)間長(zhǎng)短跟表空間大小很難達(dá)到平衡的問(wèn)題,以極小的查找時(shí)間代價(jià)以及極高的表空間利用率實(shí)現(xiàn)全部表項(xiàng)存儲(chǔ)而無(wú)表項(xiàng)遺留。
文檔編號(hào)G06F17/30GK101604337SQ200910158109
公開(kāi)日2009年12月16日 申請(qǐng)日期2009年7月13日 優(yōu)先權(quán)日2009年7月13日
發(fā)明者孫遠(yuǎn)航, 煒 張, 彧 李, 許煒華 申請(qǐng)人:中興通訊股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1