專利名稱:哈希表的表項添加、刪除、查找方法及哈希表存儲裝置的制作方法
技術領域:
本發(fā)明涉及通信技術領域,尤其涉及一種哈希表的表項添加、刪除、查找方法及其存儲裝置。
背景技術:
在通信領域中,存在著多種的匹配算法,例如,對于精確匹配的查找,可以采用哈希算法。所述的哈希查找的過程就是用哈希函數(shù)對輸入的查找鍵值(Key)進行縮位運算, 再用計算得到的哈希值在哈希索引表中尋址,找到匹配項后讀出對應項中存放的哈希索引 (Hash Index),最后用哈希索引在直接地址映射表尋址,得到所需的查找結果。哈希算法是一種常見的快速查找算法,它的基本思想是以線性表中每個元素的關鍵字k為自變量。通過一定的函數(shù)關系H(k),計算出對應的函數(shù)值來,并把這個值解釋為一塊連續(xù)存儲空間的單元,將該元素存儲到這個單元中。哈希算法將元素的存儲位置和它的關鍵字之間建立一個確定的對應關系,查找時,不需要比較,一次哈希映射就可以查找所需元素。在哈希函數(shù)中,對不同的關鍵字可能得到同一哈希地址,即keyl ^ key2,而 H(keyl) =H(key2),這種情況叫沖突(Collision)。一般來說,遇到?jīng)_突是很正常的事情, 關鍵在于遇到?jīng)_突后怎么處理,以達到要求的查找目的。處理沖突,主要有以下兩種方法 一是選擇和改進比較好的哈希函數(shù);二是選擇比較合適的表項存儲結構。目前,對于路由查找這類的應用,采用CRC(Cyclic Redundancy Checking,循環(huán)冗余碼校驗)類的哈希函數(shù)是比較適合的。通過選取不同的CRC多項式,可以實現(xiàn)同一個位寬下的不同哈希函數(shù)。在選擇合適的表存儲結構解決沖突問題方面,可以采用多維哈希表、沖突鏈、 Double Hashing等。仿真實驗結果表明,使用這些方法,在保證無表項遺留即所有表項都能存入的前提條件下,計算哈希值的次數(shù)跟需要的存儲表空間存在對立的關系,也就是說如果想要以足夠小的存儲空間放下所有的表項,則需要進行足夠多次數(shù)的哈希運算。這樣就會造成對同一塊表的多次訪問,由于表只有一張,所以查找只能順序進行,這會嚴重影響查表的速度;另一方面,如果想要以足夠少的計算次數(shù)就能找到存儲空位,那么就要保證存儲空間足夠的大,空間利用率就會大大的降低。如果采用多張哈希表并行查找,則需要占用多個存儲器接口,不利于硬件上的實現(xiàn)。
發(fā)明內容
本發(fā)明要解決的主要技術問題是,提供一種哈希表的表項添加、刪除、查找方法, 及其存儲裝置,以極小的查找時間代價以及較高的表空間利用率實現(xiàn)全部表項存儲而無表項遺留;同時只需訪問一次就能夠準確的查找到需要的表項;同時也便于硬件與存儲器之間接口的實現(xiàn),能夠在表空間大小,查找效率以及硬件實現(xiàn)方面獲得比較好的均衡。為解決上述技術問題,本發(fā)明采用的技術方案如下
一種哈希表的表項添加方法,包括將哈希表拆分為多張哈希子表,每一張哈希子表對應一張位圖,每一張位圖對應一個哈希函數(shù);確定當前目標哈希子表,利用當前目標哈希子表所對應的位圖相應的哈希函數(shù)計算待存儲表項的鍵值的哈希值,根據(jù)所述哈希值確定當前目標哈希子表所對應的存儲位置是否空位,如是,將所述待存儲表項的信息存入該空位中,否則,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息。進一步地,所述位圖包含了沖突位和有效位,根據(jù)所述哈希值確定當前目標哈希子表所對應的存儲位置是否空位,如是,將所述待存儲表項的信息存入該空位中,否則,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息的步驟,包括以所述哈希值作為索引,查找所述當前目標哈希子表對應的位圖;判斷所述位圖的有效位是否有效,且所述位圖的沖突位是否為無效;如果所述有效位為有效,且所述沖突位為無效,則確定所述當前目標哈希子表所對應的存儲位置為空位,則將所述待存儲表項的信息存入該空位;否則,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息。更進一步地,所述以所述哈希值作為索引,查找所述當前目標哈希子表對應的位圖的步驟,包括判斷當前目標哈希子表的容量是否小于計算得到的所述哈希值的位數(shù);如果所述當前目標哈希子表的容量小于計算得到的所述哈希值的位數(shù),則截取所述哈希值,并將截取后的哈希值作為索引,查找所述當前目標哈希子表對應的位圖。更進一步地,將所述待存儲表項的信息存入空位后,還包括將所述位圖的有效位置為無效,并將所述待存儲表項的鍵值存儲到該位圖中。更進一步地,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息的步驟,包括當所述位圖的沖突位為無效,有效位為無效,則將該位圖對應的哈希子表中已存的表項取出,將該沖突位置為有效,并將取出表項的鍵值與當前的待存儲表項的鍵值存入該位圖中;判斷當前的目標哈希子表是否為最后一張哈希子表,如果不是最后一張哈希子表,則將當前目標哈希子表更新為下一張哈希子表,直至查找到空位存儲所述待存儲表項的信息。更進一步地,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息的步驟,包括當該位圖的沖突位為有效,則當前的待存儲表項的鍵值直接存入到該位圖中;判斷當前目標哈希子表是否為最后一張哈希子表,如果不是最后一張哈希子表, 則將當前目標哈希子表更新為下一張哈希子表,直至找到空位存儲所述待存儲表項的信息。更進一步地,所述方法還包括當所述待存儲表項存儲完成后,同步更新位圖的沖突位信息和哈希子表的信息。更進一步地,所述哈希子表對應的哈希函數(shù)為循環(huán)冗余碼校驗函數(shù)。
更進一步地,所述多張哈希子表對應的哈希函數(shù)之間采用不同的循環(huán)冗余碼校驗多項式。一種哈希表的表項刪除方法,哈希表包括多張哈希子表,每一張哈希子表對應一張位圖,每一張位圖對應一個哈希函數(shù),且每張所述位圖包括多個條目,則所述方法包括每張位圖所對應的哈希函數(shù)并行計算需要刪除的條目的哈希值;根據(jù)計算得到的哈希值,在其各自對應的位圖中并行查找;將每一張位圖的查找結果順序進行比較,當?shù)谝淮纬霈F(xiàn)沖突位為無效時,將該位圖的地址對應的哈希子表中的表項取出;將取出的表項的鍵值與需要查找的鍵值進行比較,如果相同,則將所述表項從所述哈希子表中刪除。進一步地,刪除表項后還包括;將對應的位圖的沖突位置為無效,有效位置為有效。進一步地,所述方法還包括將刪除的表項所在的位圖之前的所有位圖中的所存儲的所有鍵值進行比較;如果某個位圖中所存儲的鍵值大于兩個,則直接將需要刪除的鍵值刪掉;或者,如果某個位圖中所存儲的鍵值等于兩個,則將需要刪除的鍵值刪掉,并查找到另一個鍵值所存儲的位置,將其取出,存入該位圖所對應的哈希子表中。一種哈希表的查找方法,所述哈希表包括多張哈希子表,每張哈希子表對應一張位圖,每張位圖對應一個哈希函數(shù),則所述哈希表查找方法包括利用每張哈希子表對應的哈希函數(shù)并行計算待查找表項的鍵值的哈希值;根據(jù)計算得到的所述哈希值在對應的位圖中并行查找;將每一張位圖的查找結果順序進行比較,當?shù)谝淮纬霈F(xiàn)沖突位為無效時,取出該位圖的地址對應的哈希子表中的表項;將取出的表項的鍵值與待查找表項的鍵值進行比較,如果取出的表項的鍵值與所述待查找表項的鍵值相匹配,則將該表項的信息作為最終查表結果。進一步地,所述方法還包括如果取出的表項的鍵值與所述待查找表項的鍵值不相匹配,則返回查找失敗的消息。更進一步地,根據(jù)計算得到的所述哈希值在對應的位圖中并行查找的步驟,包括根據(jù)計算得到的所述哈希值對應的哈希子表的容量,對所述哈希值進行截取;將截取后的哈希值作為索引,在其對應的位圖中并行查找。更進一步地,所述位圖對應的哈希函數(shù)與存儲表項時所述哈希子表對應的哈希函數(shù)相同。一種哈希表存儲裝置,包括主控邏輯模塊,以及與所述主控邏輯模塊相連的控制線路和數(shù)據(jù)線路,其中,主控邏輯模塊控制所述控制線路完成表項的添加和/或刪除,以及控制數(shù)據(jù)線路完成表項查找,所述控制線路包括表項拆分模塊,目標哈希子表確定模塊和表項存儲模塊,其中,所述表項拆分模塊,用于將哈希表拆分為多張哈希子表和多張位圖,且每張哈希子表對應一張位圖和一個哈希函數(shù);
所述目標哈希子表確定模塊,與所述表項拆分模塊相連,用于從所述表項拆分模塊拆分得到的多張哈希子表中的確定一張哈希子表作為當前的目標哈希子表;并當接收到所述表項存儲模塊發(fā)出的更新指令后,用于將當前的目標哈希子表更新為其下一張哈希子表;所述表項存儲模塊,與所述目標哈希子表確定模塊相連,用于利用所述當前目標哈希子表所對應的哈希函數(shù),計算所述待存儲表項的鍵值的哈希值,并根據(jù)所述哈希值確定當前目標哈希子表所對應的存儲位置是否為空位,如是,將待存儲表項的信息存入該空位,否則向所述目標哈希子表確定模塊發(fā)送更新指令,直至查找到空位存儲所述待存儲表項的。進一步地,所述位圖包含沖突位和有效位,所述表項存儲模塊包括計算子模塊、查找子模塊、表項添加子模塊,其中,所述計算子模塊,與所述目標哈希子表確定模塊相連,用于利用所述當前目標哈希子表所對應的哈希函數(shù),計算所述待存儲表項的鍵值的哈希值;所述查找子模塊,與所述計算子模塊相連,用于判斷所述目標哈希子表確定模塊計算的哈希值的位數(shù)是否大于等于所述當前目標哈希子表的容量,如是,則截取所述哈希值,并將截取后的哈希值作為索引,查找相應的位圖,并判斷所述位圖的有效位是否有效, 且所述位圖的沖突位是否為無效,如是,則判定所述目標哈希子表中的存儲位置為空位,否則,則向所述目標哈希子表確定模塊發(fā)送更新指令,直至查找到空位;所述表項添加子模塊,與所述查找子模塊相連,用于當所述查找子模塊在所述當前目標哈希子表中查找到空位時,將所述待存儲表項的信息存入所述空位中。進一步地,當所述表項添加子模塊,將所述待存儲表項的信息存入所述空位中后, 所述表項添加子模塊還用于將所述位圖的有效位置為無效,并將所述待存儲表項的鍵值存儲到所述位圖中。進一步地,當所述查找子模塊判斷出所述位圖的有效位為無效時,還用于判斷所述位圖的沖突位是否為無效,如是,則所述表項添加子模塊用于將所述位圖對應哈希子表中已存儲的表項取出,并將取出的表項的鍵值與所述當前待存儲表項的鍵值存入到所述位圖中;當所述查找子模塊判斷出所述位圖的沖突位為有效時,則所述表項存儲模塊的表項添加子模塊用于將當前的所述待存儲表項的鍵值存儲到所述位圖中。進一步地,所述哈希表包括多張哈希子表,每張哈希子表對應一張位圖和一個哈希函數(shù),所述數(shù)據(jù)線路包括并行計算模塊,并行查找模塊以及比較模塊,其中,并行計算模塊,用于利用每張哈希子表對應的哈希函數(shù),并行計算待查找表項的鍵值的哈希值;并行查找模塊,與所述并行計算模塊相連,用于根據(jù)計算得到的哈希值在其各自對應的位圖中并行地查找;比較模塊,用于將各個位圖的查表結果進行比較判斷,確定出匹配的表項所在的哈希子表的地址,將該地址存儲的表項的信息取出,并與需要查找的鍵值進行比較,判斷取出的表項是否與待查找的表項相匹配,如匹配,則將該表項的信息作為最終查表結果。本發(fā)明的有益效果是本發(fā)明的哈希表的表項添加方法,通過將哈希表拆分為多張哈希子表,且每一張哈希子表對應一張位圖和一個哈希函數(shù),再利用該哈希函數(shù)計算待存儲表項的鍵值的哈希值,由該哈希值來確定存儲待存儲表項的空位,即由于每張哈希子表都是通過對哈希表進行拆分得到,且在位圖中已經(jīng)確定了匹配表項的存儲地址,從而以極小的更新時間代價以及較高的表空間利用率實現(xiàn)全部表項存儲,而無表項遺留。本發(fā)明的哈希表查找方法,通過并行計算待查找表項鍵值的哈希值,并根據(jù)該哈希值到對應位圖中進行查找,并將查找的結果進行對比,當?shù)谝淮纬霈F(xiàn)沖突位為無效時,取出該位圖的地址對應的哈希子表中的表項;將其與帶查找表項進行對比,如果相匹配,則該表項即為待查找的表項,由于每張哈希子表都是通過對哈希表進行拆分得到,且在位圖中已經(jīng)確定了匹配表項的存儲地址,從而只需訪問一次哈希子表就能夠準確的查找到需要的表項,同時也便于硬件與存儲器之間接口的實現(xiàn),能夠在表空間大小,查找效率以及硬件實現(xiàn)方面獲得比較好的均衡。
圖1為本發(fā)明的哈希表存儲裝置的一實施例的結構示意圖;圖2為本發(fā)明的表項存儲模塊的一實施例的結構示意圖;圖3為本發(fā)明的哈希表存儲裝置的一具體實施例的結構示意圖;圖4為本發(fā)明的哈希表的表項添加方法的一實施例的流程圖;圖5為本發(fā)明的哈希表的表項添加方法的步驟S407的一實施例的流程圖;圖6為本發(fā)明的哈希表的表項添加方法的步驟S409b的一實施例的流程圖;圖7為本發(fā)明的哈希表的表項刪除方法的一實施例的流程圖;圖8為本發(fā)明的哈希表查找方法的一實施例的流程圖;圖9為本發(fā)明的哈希表的一實施例的邏輯結構圖;圖10為本發(fā)明的哈希表的表項添加的一具體實施例的流程圖;圖11為本發(fā)明的查找哈希表的一實施例的邏輯結構示意圖。
具體實施例方式下面通過具體實施方式
結合附圖對本發(fā)明作進一步詳細說明。請參考圖1,為本實施方式的哈希表存儲裝置的一實施例的結構框圖。本實施方式的哈希表存儲裝置包括主控邏輯模塊100,以及與主控邏輯模塊100相連的控制線路和數(shù)據(jù)線路,其中,主控邏輯模塊100控制控制線路完成表項的添加和/或刪除,控制數(shù)據(jù)線路完成表項查找,其中控制線路包括表項拆分模塊101,目標哈希子表確定模塊102和表項存儲模塊103,其中,表項拆分模塊101,目標哈希子表確定模塊102和表項存儲模塊103,其中,表項拆分模塊101,用于將哈希表拆分為多張哈希子表和多張位圖,且每張哈希子表對應一張位圖和一個哈希函數(shù);目標哈希子表確定模塊102與表項拆分模塊101相連,用于將表項拆分模塊101拆分得到的多張哈希子表中的第一張哈希子表作為當前的目標哈希子表,并當接收到表項存儲模塊103發(fā)出的更新指令后,用于將當前的目標哈希子表更新為其下一張哈希子表;表項存儲模塊103,與目標哈希子表確定模塊102相連,用于利用當前目標哈希子表所對應的哈希函數(shù),計算待存儲表項的鍵值的哈希值,并根據(jù)該哈希值確定當前目標哈希子表所對應的存儲位置是否為空位,如是,將待存儲表項的信息存入該空位,否則向目標哈希子表確定模塊102發(fā)送更新指令,直至查找到空位存儲待存儲表項。請參考圖2,為本實施方式的表項存儲模塊的一實施例的結構示意圖。本實施方式中的位圖包含沖突位和有效位。本實施方式中表項存儲模塊包括計算子模塊200、查找子模塊201、表項添加子模塊203,其中,計算子模塊200,與目標哈希子表確定模塊相連,用于利用當前目標哈希子表所對應的哈希函數(shù),計算待存儲表項的鍵值的哈希值;查找子模塊201,與計算子模塊200相連,用于判斷該目標哈希子表確定模塊計算的哈希值的位數(shù)是否大于等于當前目標哈希子表的容量,如是,則截取該哈希值,并將截取后的哈希值作為索引,查找相應的位圖,并判斷查找到的位圖的有效位是否有效,且沖突位是否為無效,如是, 則判定該目標哈希子表中的存儲位置為空位,否則,則向目標哈希子表確定模塊發(fā)送更新指令,直至查找到空位;表項添加子模塊202,與查找子模塊201相連,用于當查找子模塊 201在當前目標哈希子表中查找到空位時,將待存儲表項的信息存入空位中,并將該位圖的有效位置為無效,將待存儲表項的鍵值存儲到該位圖中,而當查找子模塊201判斷出該位圖的有效位為無效時,還用于判斷該位圖的沖突位是否為無效,如是,則表項添加子模塊用于將位圖對應哈希子表中已存儲的表項取出,并將取出的表項的鍵值與當前待存儲表項的鍵值存入到位圖中;當查找子模塊201判斷出位圖的沖突位為有效時,則表項添加子模塊 202用于將當前的待存儲表項的鍵值存儲到該位圖中。本實施方式中的每張位圖包含了一位沖突位和一位有效位,多個沖突鍵值存儲槽位。本實施方式中的位圖的有效位置為0,即表示有效,置為1,即表示無效;位圖的沖突位置為0則表示無效,置為1則表示有效。請參考圖1,本實施方式中的哈希表存儲裝置的數(shù)據(jù)線路包括并行計算模塊301, 并行查找模塊302以及比較模塊303,其中,并行計算模塊301,用于利用每張哈希子表對應的哈希函數(shù),并行計算待查找表項的鍵值的哈希值;并行查找模塊302,與并行計算模塊 301相連,用于根據(jù)計算得到的哈希值在其各自對應的位圖中并行地查找;比較模塊303, 用于將各個位圖的查表結果進行比較判斷,確定出匹配的表項所在的哈希子表的地址,將該地址存儲的表項的信息取出,并與需要查找的鍵值進行比較,確定表項是否匹配,如匹配,則將該表項的信息作為最終查表結果。本實施方式中查找表項時的哈希子表對應的位圖與存儲表項時,哈希子表對應的位圖深度相同;且哈希子表對應的哈希函數(shù)與存儲表項時,該哈希子表對應的哈希函數(shù)相同。本實施方式中查找表項時,對應的位圖只包含一位的沖突位。本實施方式的哈希表存儲裝置通過表項拆分模塊將哈希表拆分為多張哈希子表, 再由目標哈希子表確定模塊從其中確定一張目標哈希子表,并由表項存儲模塊利用目標哈希子表對應的哈希函數(shù)計算待存儲表項的鍵值對應的哈希值,并根據(jù)該哈希值才目標哈希子表中查找空位,從而將待存儲表項存入該空位中,當沒有查找到空位時,則將待存儲表項的鍵值存儲在對應的位圖中,并更新目標哈希子表直至找到空位來存儲該待存儲表項,從而以極小的更新時間代價以及較高的表空間利用率實現(xiàn)全部表項存儲,而無表項遺留;另一方面本裝置通過并行計算模塊來并行計算待查找表項的鍵值對應的哈希值,再由并行查找模塊根據(jù)該哈希值在各自對應的位圖中查找,最后由比較模塊來比較查找結果,并匹配表項所在的哈希子表地址中取出對應的表項,如果該表項與待查找的表項相匹配,則該表項即為待查找的表項,則將其作為最終的查找結果返回,從而由于每張哈希子表都是通過對哈希表進行拆分得到,且在位圖中已經(jīng)確定了匹配表項的存儲地址,從而只需訪問一次哈希子表就能夠準確的查找到需要的表項,同時也便于硬件與存儲器之間接口的實現(xiàn),能夠在表空間大小,查找效率以及硬件實現(xiàn)方面獲得比較好的均衡。實施例一請參考圖3,為本實施方式的哈希表存儲裝置的一實施例的結構示意圖。本實施方式的哈希表存儲查找系統(tǒng)包括主控邏輯模塊505,多個計算模塊50 502η,多個查找模塊503a 503η,表項添加模塊504,統(tǒng)計模塊505,表項拆分模塊506,多個bitmap模塊 507a 507η,多個表項存儲模塊508a 508η,數(shù)據(jù)判決模塊509和異常處理模塊550。本實施方式的哈希表存儲裝置的內部連接分為數(shù)據(jù)線路和控制線路,在數(shù)據(jù)線路上,主控邏輯模塊501耦合至多個計算模塊50 502η,數(shù)據(jù)判決模塊509 ;多個計算模塊50 502η分別耦合至多個查找模塊503a 503η ;多個查找模塊503a 503η分別耦合至多個 bitmap模塊507a 507η,多個bitmap模塊507a 507η耦合至多個表項存儲模塊508a 508η ;在控制線路上,主控邏輯模塊501耦合至表項添加模塊504,統(tǒng)計模塊505,表項拆分模塊506和異常處理模塊510,且表項添加模塊504,統(tǒng)計模塊505,表項拆分模塊506和異常處理模塊510均分別耦合至多個查找模塊503a 503η。其中,主控邏輯模塊501,是哈希表存儲裝置的控制部件,主要用于控制控制線路和數(shù)據(jù)線路上的算法啟動,終止,任務調度以及數(shù)據(jù)路徑上的數(shù)據(jù)分發(fā),結果收集等操作。本實施方式中的主控邏輯模塊501可以由硬件邏輯實現(xiàn),如ASIC (專用集成電路) 或者是FPGA(現(xiàn)場可編程邏輯門陣列)或者是其他可以實現(xiàn)邏輯函數(shù)功能的芯片。當然本實施方式中的主控邏輯模塊501也可以通過運行在CPU(中央處理)上的軟件來實現(xiàn),在這種實現(xiàn)方式下,控制線路上的模塊,包括表項添加模塊504,統(tǒng)計模塊505,表項拆分模塊 506和異常處理模塊550,且均可以通過軟件來實現(xiàn)。多個計算模塊50 502η耦接至主控邏輯模塊501和多個查找模塊503a 503η,在表項查找過程中,當主控邏輯模塊501將待查找的鍵值同時發(fā)送給多個計算模塊 502a 502η時,該多個計算模塊502用于對所分配到的鍵值同時進行一次哈希運算,獲得與其他計算模塊不同的索引。本實施方式中的每個計算模塊502中包含一個與其他計算模塊502不同的哈希函數(shù),且本實施方式中的哈希函數(shù)可以采用各種已知的方法實現(xiàn),如異或陣列或者類CRC函數(shù),或者經(jīng)過復雜的數(shù)學運算等等。哈希函數(shù)的選取準則是要盡可能的減少不同的鍵值經(jīng)過哈希函數(shù)運算后獲得的索引號沖突。多個查找模塊503a 503η分別耦合至多個計算模塊50 502η和多個bitmap 模塊507a 507η,以及統(tǒng)計模塊505,表項拆分模塊506和異常處理模塊110。本實施方式中的每個查找模塊503獨立的耦合于一個bitmap模塊507,通過bitmap模塊507的地址總線和數(shù)據(jù)總線對bitmap模塊507以及該bitmap所對應的存儲模塊508中的數(shù)據(jù)進行訪問和修改。在數(shù)據(jù)線路上,每個查找模塊503接收計算模塊502生成的不同的索引,并將其轉換成bitmap模塊507的地址,從而讀取該地址對應于存儲模塊508中的數(shù)據(jù)。在獲取到對應于該地址的數(shù)據(jù)后,查找模塊503將接收的多個計算模塊50 502η計算得到的索引值和多個bitmap模塊507a 507η獲取的數(shù)據(jù)值,一起傳送給數(shù)據(jù)判決模塊509與查找鍵值比較,確定是否匹配;在控制線路上,多個查找模塊503a 503η接收統(tǒng)計模塊505,表項拆分模塊506和異常處理模塊509發(fā)出的讀寫指令,轉換成多個bitmap模塊507a 507η的地址,對多個bitmap模塊507a 507η中的存儲數(shù)據(jù)進行操作,進而對多個存儲模塊508a 508η中存儲的數(shù)據(jù)進行操作。本實施方式中的查找模塊503同時實現(xiàn)控制線路和數(shù)據(jù)線路的功能,當然也可以分別針對控制線路和數(shù)據(jù)線路設置相應的查找模塊。本實施方式中可以存在索引值的擴充,加減偏移量或者截取等運算。多個bitmap模塊507a 507η分別耦合于多個查找模塊503a 503η,且每個 bitmap模塊507具有獨立的地址訪問總線和獨立的數(shù)據(jù)總線,對每一個模塊而言,地址總線和數(shù)據(jù)總線可以復用,但是多個存儲模塊508之間不復用,多個bitmap模塊507a 507η通過上述的獨立的地址訪問總線和獨立的數(shù)據(jù)總線分別耦合于多個查找模塊503a 503η,多個查找模塊503a 503η通過發(fā)送地址來訪問多個bitmap模塊507a 507η中對應于所發(fā)送地址處存儲的數(shù)據(jù)(沖突位,有效位和鍵值),且該多個bitmap模塊507a 507η還分別對應一個存儲模塊508a 508η,每個存儲模塊508存儲一張哈希子表,每張子表都是通過表項拆分模塊506對哈希表進行拆分得到,且在bitmap模塊507中已經(jīng)確定了匹配表項的存儲地址,只需訪問一次存儲模塊508a 508η,所以存儲模塊508a 508η共享一組地址訪問總線和數(shù)據(jù)總線。多個bitmap模塊507a 507η分別耦合于所述多個查找模塊503a 503η。其中每個bitmap模塊具有獨立的地址訪問總線和獨立的數(shù)據(jù)總線,其中對每一個模塊而言,地址總線和數(shù)據(jù)總線可以復用,但是多個表項存儲模塊之間不復用。多個bitmap模塊507a 507η通過上述的獨立的地址訪問總線和獨立的數(shù)據(jù)總線分別耦合于多個查找模塊503a 503η,多個查找模塊503a 503η可以通過發(fā)送地址來訪問多個bitmap模塊507a 507η 中對應于所發(fā)送地址處存儲的數(shù)據(jù)(沖突位,有效位和鍵值)。多個bitmap模塊507a 507η分別對應一個表項存儲模塊508a 508η,每個表項存儲模塊存儲一張哈希子表,其中每張子表都是通過對所述哈希表進行拆分得到,因為在bitmap中已經(jīng)確定了匹配表項的存儲地址,只需訪問一次表項存儲模塊508a 508η,所以表項存儲模塊508a 508η共享一組地址訪問總線和數(shù)據(jù)總線。本實施方式中的多個bitmap模塊507和存儲模塊508可以通過當前存在的各種數(shù)據(jù)存儲技術來實現(xiàn)。由于bitmap模塊507需要并行訪問且占用的存儲空間比較小,可以用片內SRAM實現(xiàn)。而對于存儲模塊508,如在需要少延時的應用場景下,可以用η個獨立的高速SRAM芯片來作為存儲模塊508a 508η,所述的高速SRAM芯片可以是^T SRAM, QDR SRAM, QDRII SRAM,QDRII+SRAM等各種常用的SRAM芯片;在需要大容量表項空間的情況下, 可以用η個獨立的高速DRAM芯片來作為存儲模塊508a 508η,所述的高速DRAM芯片可以是 SDRAM,DDR SDRAM, DDRII SDRAM, DDRIII SDRAM 等各種常用的 SDRAM 芯片;在需要掉電保存數(shù)據(jù)的情況下,可以用η個獨立的FLASH芯片來作為存儲模塊508a 508η,所述的 FLASH芯片可以是NAND FLASH,N0R FLASHjNV RAM或者其他各種常用的存儲芯片;在海量數(shù)據(jù)的情況下,存儲模塊508a 508η還可以用多個獨立的硬盤,多個獨立的磁盤存儲陣列, 或者是光盤驅動器等海量數(shù)據(jù)存儲技術來實現(xiàn),也可在不脫離本實施方式的范圍下任意選取多個bitmap模塊507a 507η和存儲模塊508a 508η的實現(xiàn)介質。數(shù)據(jù)判決模塊509,耦合至多個查找模塊503a 50 和多個存儲模塊508a 508η,完成查找結果的判決操作。多個查找503a 503η,在獲取了多個bitmap模塊507a 507η查找結果后,將結果傳送至數(shù)據(jù)判決模塊509,數(shù)據(jù)判決模塊按a η順序比較bitmap 模塊507a 507η的查找結果,找出最先沖突位為0的bitmap模塊507,將找到的bitmap 地址傳送給多個存儲模塊508a 508η,從存儲模塊508中獲取到的數(shù)據(jù)再傳送給數(shù)據(jù)判決模塊509,根據(jù)主控邏輯模塊501傳送過來的原始鍵值,比較該數(shù)據(jù)是否是匹配的表項,由于多個查找模塊103a 103η獲取的多個查找結果來自于多個bitmap模塊107a 107η 中存儲的沖突位,而沖突位只有當其不與其他表項沖突時才會置0,若有一次沖突就將其置 1,所以最先出現(xiàn)的沖突位為0的地址對應的表項存儲模塊中存儲的數(shù)據(jù)是唯一的,因此, 這當中不存在重復的表項,只有一個查找存儲模塊508的結果是可能的正確結果,或者返回的結果均與鍵值不符,本次哈希查找失敗。在查找正確的情況下,數(shù)據(jù)判決模塊509將正確的一組數(shù)據(jù)中的索引值返回給主控邏輯模塊501,代表本次哈希查找的結果;在查找失敗的情況下,數(shù)據(jù)判決模塊509將返回給主控邏輯模塊501 —個無效索引值或者一個中斷信號,通知主控邏輯模塊501本次查找失敗。表項拆分模塊506和表項添加模塊504協(xié)同工作,用于將哈希表拆分為Ν(Ν > = 1)張哈希子表并存入到多個存儲模塊508中。每張哈希子表對應一張bitmap和一個哈希函數(shù),其中N張哈希子表和N張bitmap的存儲空間大小可以根據(jù)需要進行選擇。本實施方式中的哈希表包含M個條目(M可以是從1到很大的條目數(shù),如2的32 次方),哈希子表生成過程中,表項拆分模塊506依次選取M個條目中的一個,將其目標哈希子表和bitmap設定為第一張哈希子表和bitmap,并將該條目傳送給表項添加模塊504。表項添加模塊104根據(jù)第一張哈希子表對應的哈希函數(shù),計算得出該條目的索引值K,并嘗試將該條目存入所取的哈希函數(shù)對應的哈希子表中的對應于索引值K的位置,同時將與該哈希子表對應的bitmap中對應的索引值K位置中的沖突位置0,有效位置1,將原始鍵值存入該位置中。本實施方式中,在表項拆分模塊506對多個哈希子表進行拆分的時候,有可能遇到哈希沖突的情況,即兩個不同的鍵值經(jīng)過計算得到同一張哈希子表的同一個索引值。在這種情況下,如果該位置的bitmap沖突位為0,有效位為1,說明該位置已放入一條表項,需要將已存入該索引值對應的表項存儲模塊的數(shù)據(jù)取出,并將該索引值對應的bitmap中的沖突位值1,當前鍵值與取出表項對應的鍵值都放在bitmap中;如果該位置的bitmap沖突位為1,說明該位置已經(jīng)沖突超過一次,將當前鍵值放入bitmap中。當出現(xiàn)上述兩種沖突情況時,返回失敗消息給表項拆分模塊106,表項拆分模塊506再判斷當前的目標哈希子表是否為最后一張哈希子表,若不是則將該條目的目標子表設置為下一張子表,傳遞給表項添加模塊504,重復上述過程;若已經(jīng)是最后一張哈希子表,則返回失敗消息給主控邏輯模塊 501,通過主控邏輯模塊501調用異常處理模塊509來完成哈希表的更新。雖然本實施方式中的表項添加模塊504處于控制線路上,但是可以通過多個查找模塊503a 503η讀取或修改bitmap模塊507和存儲模塊508中的內容。異常處理模塊110和統(tǒng)計模塊105分別耦合至多個查找模塊503和主控邏輯模塊 501,完成系統(tǒng)監(jiān)控和錯誤恢復等任務。如每次查詢失敗,統(tǒng)計模塊505均會將其計入到查找失敗記錄。異常處理模塊510則用于響應主控邏輯模塊501發(fā)出的哈希表刷新請求,并通過多個查找模塊503a 503η對多個Bitmap模塊107a 107η和多個存儲模塊108a 108η進行清零和重新賦值操作。下面將本實施例的哈希表存儲裝置拆分成數(shù)據(jù)線路和控制線路兩個部分來進行詳細的說明。其中,數(shù)據(jù)線路由主控邏輯模塊501,多個計算模塊50 502η,多個查找模塊 503a 503η,多個Bitmap模塊507a 507η,多個存儲模塊508a 508η以及數(shù)據(jù)判決模塊509構成,該數(shù)據(jù)線路用來完成查找操作,控制線路由主控邏輯模塊501,表項添加模塊504,統(tǒng)計模塊505,表項拆分模塊 506和異常處理模塊510構成。表項添加模塊504耦合至多個查找模塊503,用于將沖突狀態(tài)信息和表項數(shù)據(jù)添加進多個bitmap模塊507a 507η和多個存儲模塊508a 508η,該控制線路用來完成表項添加和刪除操作。本實施例的哈希表存儲裝置中,拆分后得到的哈希子表對應的N個哈希函數(shù)可以是CRC函數(shù)也可以是其他函數(shù),當采用CRC函數(shù)做為本實施例中哈希子表對應的哈希函數(shù)時,若干張哈希子表對應的哈希函數(shù)之間可以采用不同的CRC多項式。基于上述的哈希表存儲裝置,本實施方式還提供一種哈希表的表項添加方法。請參考圖4,為本實施方式的哈希表的表項添加方法的一實施例的流程示意圖。本實施方式哈希表的表項添加方法包括S401,哈希表拆分為多張哈希子表,每一張哈希子表對應一張位圖,每一張位圖對應一個哈希函數(shù)。本實施方式中拆分的關鍵影響因素是每張子表的存儲空間大小選擇。本實施方式中的多張哈希子表的存儲空間可以根據(jù)需要搭配選擇,比如可以設置每張小表空間大小一致,也可以采用存儲空間大小遞減的方式,但是,拆分方式不局限于上述兩種方式。S403,將第一張哈希子表作為當前的目標哈希子表。S405,取待存儲表項的鍵值,利用當前目標哈希子表對應的哈希函數(shù)計算其哈希值。S407,根據(jù)計算得到的哈希值,確定當前目標哈希子表所對應的存儲位置是否空位,如是,則執(zhí)行步驟S409a,否則,執(zhí)行步驟S409b。S409a,將待存儲表項的信息進存入該空位中,并執(zhí)行步驟S4011。本實施方式中的表項的信息包括查表鍵值、查表結果等信息。S409b,更新當前目標哈希子表并執(zhí)行步驟S405。S4011,將該位圖中的有效位置為無效,并將待存儲表項的鍵值存儲到該位圖中。S4013,待存儲表項存儲完成后,同步更新位圖的沖突位信息和哈希子表的信息。請參考圖5,為本實施方式的步驟S407的一實施例的流程圖。本實施方式中的步驟S407包括S501,判斷當前目標哈希子表的容量是否小于計算的哈希值,如是,則執(zhí)行步驟 S503a,否則執(zhí)行步驟S503b。S503a,根據(jù)哈希子表的容量對應的比特位數(shù),從高比特位開始截取計算得到的哈希值的相同比特位數(shù),得到截取后的哈希值,并將該截取后的哈希值作為索引,執(zhí)行步驟 S505。S503b,直接以計算得到的哈希值作為索引。
S505,根據(jù)索引在目標哈希子表中查找空位,即判斷該位圖的有效位是否為0,且該位圖的沖突位為0,如是,即該目標哈希子表對應的存儲位置為空位,則執(zhí)行步驟S409a ; 否則執(zhí)行步驟S409b。請參考圖6,本實施方式中的步驟S409b包括S601,判斷該位圖的沖突位是否為0,有效位是否為1,如是,則執(zhí)行步驟S603a,如果該位圖的沖突位為1,則執(zhí)行步驟S603b。S603a,將該位圖對應哈希子表中已存儲的表項取出,并將該位圖的沖突位置為1, 并執(zhí)行步驟S605。S603b,將當前的待存儲表項的鍵值存儲到該位圖中,執(zhí)行步驟S607。S605,將取出表項的鍵值與當前待存儲表項的鍵值存入到該位圖中。S607,判斷當前目標哈希子表是否為最后一張哈希子表,如是,執(zhí)行步驟S609a,否則執(zhí)行步驟S609b。S609a,返回存儲失敗消息,結束操作。S609b,將目標哈希子表更新為下一張哈希子表,并執(zhí)行步驟S405。本實施方式的哈希表的表項添加方法中,哈希子表對應的哈希函數(shù)為循環(huán)冗余碼校驗函數(shù),且多張哈希子表對應的哈希函數(shù)之間采用不同的循環(huán)冗余碼校驗多項式。本實施方式的哈希表的表項添加方法,通過將哈希表拆分為多張哈希子表,且每一張哈希子表對應一張位圖和一個哈希函數(shù),再利用該哈希函數(shù)計算待存儲表項的鍵值的哈希值,由該哈希值來確定存儲待存儲表項的空位。由于每張哈希子表都是通過對哈希表進行拆分得到,且在位圖中已經(jīng)確定了匹配表項的存儲地址,從而以極小的更新時間代價以及較高的表空間利用率實現(xiàn)全部表項存儲,而無表項遺留。本實施方式還提供一種哈希表的表項刪除方法。本實施方式中的哈希表包括多張哈希子表,每一張哈希子表對應一張位圖,每一張位圖對應一個哈希函數(shù),且每張所述位圖包括多個條目。請參考圖7,本實施方式的哈希表存儲裝置的表項刪除方法,包括S701,每張位圖所對應的哈希函數(shù)并行計算需要刪除的條目的哈希值。S703,根據(jù)計算得到的哈希值,在其各自對應的位圖中并行查找。S705,將每一張位圖的查找結果順序進行比較,當?shù)谝淮纬霈F(xiàn)沖突位為無效時,將該位圖的地址對應的哈希子表中的表項取出。S707,將取出的表項的鍵值與需要查找的鍵值進行比較,如果相同,則執(zhí)行步驟 S709。S709,將該表項從哈希子表中刪除。S7011,將對應的位圖的沖突位置為0,有效位置為0。S7013,將刪除的表項所在的位圖之前的所有位圖中的所存儲的所有鍵值進行比較,如果某個位圖中所存儲的鍵值大于兩個,則執(zhí)行步驟,如果某個位圖中所存儲的鍵值等于兩個,則執(zhí)行步驟S70Mb。S7015a,直接將需要刪除的鍵值刪掉,結束。S7015b,將需要刪除的鍵值刪掉,并查找到另一個鍵值所存儲的位置。S7017,將另一個鍵值對應的表項取出,存入該位圖所對應的哈希子表中。本實施方式還提供一種哈希表查找方法,本方法中查找的哈希表由若干張哈希子表組成,若干張哈希子表的存儲空間大小可以根據(jù)需要搭配選擇。每張bitmap具有獨立的地址控制線,可以同時被訪問,所有的哈希子表共享一組地址控制線,每一條表項查找只訪問一次哈希子表。每張哈希子表對應一個哈希函數(shù),每張哈希子表對應的哈希函數(shù)與存儲表項時該哈希子表對應的哈希函數(shù)相同。請參閱圖8,該圖為本實施方式的哈希表查找方法的實現(xiàn)原理流程圖。本實施方式的哈希表查找方法主要包括以下步驟S801,利用多個哈希子表對應的多個哈希函數(shù)并行計算待查找表項的鍵值對應的哈希值。S803,根據(jù)計算得到的哈希值在對應的位圖中并行查找。S805,將每一張位圖的查找結果順序進行比較,當?shù)谝淮纬霈F(xiàn)沖突位為0時,取出該沖突位所對應位圖的地址對應的哈希子表中的表項。S807,將取出的表項的鍵值與待查找表項的鍵值進行比較,如果取出的表項的鍵值與所述待查找表項的鍵值相匹配,則執(zhí)行步驟S809a,否則,執(zhí)行步驟S809b。S809a,將該表項的信息作為最終查表結果。S809b,返回查找失敗的消息。本實施方式中步驟S805包括根據(jù)計算得到的哈希值對應的哈希子表的容量,對該哈希值進行截??;將截取后的哈希值作為索引,在其對應的位圖以及哈希子表中并行查找。本實施方式的哈希表查找方法,通過并行計算待查找表項鍵值的哈希值,并根據(jù)該哈希值到對應位圖中進行查找,并將查找的結果進行對比,當?shù)谝淮纬霈F(xiàn)沖突位為無效時,取出該位圖的地址對應的哈希子表中的表項;將其與帶查找表項進行對比,如果相匹配,則該表項即為待查找的表項,由于每張哈希子表都是通過對哈希表進行拆分得到,且在位圖中已經(jīng)確定了匹配表項的存儲地址,從而只需訪問一次哈希子表就能夠準確的查找到需要的表項,同時也便于硬件與存儲器之間接口的實現(xiàn),能夠在表空間大小,查找效率以及硬件實現(xiàn)方面獲得比較好的均衡。實施例二請參閱圖9,該圖為本實施方式的哈希表的一實施例的邏輯結構圖,每個哈希子表對應于一張bitmap和一個哈希函數(shù),其中輸入鍵值通過輸入接口輸入到本實施方式的哈希子表中,通過哈希表存儲裝置計算輸入鍵值的哈希值,以該哈希值作為索引在bitmap和哈希子表中查找空位并填入;其中bitmapO 9是10個大小相同的,存儲深度為m的狀態(tài)表,哈希子表0 9是10個大小相同的,存儲深度為m的存儲器。本實施例中的哈希表存儲裝置用于根據(jù)用戶請求完成對輸入鍵值的全部操作,包括添加、查找、監(jiān)控、異常處理等。請參考圖3,當哈希鍵值輸入主控邏輯模塊501,由主控邏輯模塊501選擇哈希函數(shù),并利用該哈希函數(shù)通過哈希計算邏輯計算得到對應的哈希值, 添加表項邏輯模塊504完成添加表項的工作,查找邏輯模塊503完成對指定哈希鍵值的查找工作。本實施例的哈希表存儲裝置還包括刪除表項邏輯模塊,和監(jiān)控邏輯模塊,均未在附圖中畫出。其中刪除表項邏輯模塊完成刪除表項的工作;監(jiān)控邏輯模塊監(jiān)控在添加和刪除表項的過程中哈希子表中的空間占用情況,并將此信息反饋給主控邏輯模塊501。本實施例中,如果遍歷了所有哈希子表都無法將某一表項添加進哈希表的異常處理情況時,需要異常處理邏輯510來進行處理,以最大程度實現(xiàn)所有表項的添加入哈希表中。請參閱圖10,該圖為本實施方式的一種哈希表的表項添加方法的一具體實施例的流程圖,包括以下步驟S1001,利用第i張哈希子表對應的哈希函數(shù),即CRC16函數(shù),計算待存儲表項的鍵值的16bit哈希值。本實施例中i的初始值是0,取值范圍是0-9。S1003,判斷第i張哈希子表的表容量是否小于計算的哈希值,如是,則執(zhí)行步驟 S1005a,否則執(zhí)行步驟S1005b。S1005a,對計算得到的16bit哈希值從高比特位開始進行截取,并以截取后的哈希值作為索引,執(zhí)行步驟S1007。S1005b,以計算得到的哈希值作為索引。S1007、根據(jù)索引值在第i張哈希子表中查找是否有空位,即判斷對應的bitmap中沖突位為0,有效位為0,若是執(zhí)行步驟S1009,否則,執(zhí)行步驟SlOl 1。S1009,將待存儲表項所對應的所有信息放入查找到的空位中,將其對應的bitmap 中沖突位置0,有效位置1。至此,本條表項計算、存儲過程結束,開始存儲下條表項。S1011,如果該位圖的沖突位為0,且有效位為1,即該地址已存儲一條表項,則執(zhí)行步驟S1012 ;如果該位圖的沖突位為1,則執(zhí)行步驟S1013。S1013,將該存儲的表項取出,將當前鍵值與取出的表項鍵值存入到bitmap中,且沖突位置1,執(zhí)行步驟S1017。S1013,將當前鍵值存入對應的bitmap中。S1015,i = i+1,返回步驟S1001,即開始在下一張表中查找空位,直到找到空位存儲該條表項為止。請參閱圖11,該圖為本實施方式中的一種查找表項的一種實施例的邏輯結構圖, 對于一個需要查找的哈希鍵值,首先經(jīng)過哈希函數(shù)0 9并行計算出哈希值,這里的每個哈希函數(shù)必須與存儲表項時所用的哈希函數(shù)相同;然后利用計算得到的哈希值作為索引值分別在各自對應的bitmap表中并行地查找,確定出匹配表項的地址,將該地址傳送給哈希子表存儲器取出表項,各個哈希子表存儲器還留有一個端口用作CPU訪問;最后,將取出的表項與需要查找的鍵值比較,確定匹配后,將該項所有的信息作為最終的查表結果返回給用戶,至此查表過程結束。由于在查找時是對所有10張bitmap表進行并行查找,那么只需要一個查找周期和一個周期讀取哈希子表存儲器就能實現(xiàn)全部命中,這樣就實現(xiàn)了在保證無表項遺留的前提條件下,以比較小的片內表空間容量和一個存儲器接口,實現(xiàn)快速的哈希查找。實施例三請參閱圖9,該圖為本實施方式中的哈希表的一實施例邏輯結構圖,其中輸入鍵值通過輸入接口輸入到本實施例的哈希子表中,通過哈希表控制器對輸入鍵值計算其哈希值,以該哈希值作為索引在哈希子表中查找空位并填入;其中哈希子表0 9是10個存儲器,代表10張哈希子表,bitmapO 9是10個狀態(tài)表,但本實施例中的10個存儲器中的前4個的存儲深度為m,而后6個的存儲深度為m/2。本實施例中哈希表控制器的邏輯結構,哈希表的存儲、查找流程,以及查找表項的邏輯結構與實施例二中完全一致。與實施例二相比,實施例三的空間利用率更高。以上內容是結合具體的實施方式對本發(fā)明所作的進一步詳細說明,不能認定本發(fā)明的具體實施只局限于這些說明。對于本發(fā)明所屬技術領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干簡單推演或替換,都應當視為屬于本發(fā)明的保護范圍。
權利要求
1.一種哈希表的表項添加方法,其特征在于,包括將哈希表拆分為多張哈希子表,每一張哈希子表對應一張位圖,每一張位圖對應一個哈希函數(shù);確定當前目標哈希子表,利用當前目標哈希子表所對應的位圖相應的哈希函數(shù)計算待存儲表項的鍵值的哈希值,根據(jù)所述哈希值確定當前目標哈希子表所對應的存儲位置是否空位,如是,將所述待存儲表項的信息存入該空位中,否則,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息。
2.如權利要求1所述的方法,其特征在于,所述位圖包含了沖突位和有效位,根據(jù)所述哈希值確定當前目標哈希子表所對應的存儲位置是否空位,如是,將所述待存儲表項的信息存入該空位中,否則,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息的步驟,包括以所述哈希值作為索引,查找所述當前目標哈希子表對應的位圖;判斷所述位圖的有效位是否有效,且所述位圖的沖突位是否為無效;如果所述有效位為有效,且所述沖突位為無效,則確定所述當前目標哈希子表所對應的存儲位置為空位,則將所述待存儲表項的信息存入該空位;否則,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息。
3.如權利要求2所述的方法,其特征在于,所述以所述哈希值作為索引,查找所述當前目標哈希子表對應的位圖的步驟,包括判斷當前目標哈希子表的容量是否小于計算得到的所述哈希值的位數(shù);如果所述當前目標哈希子表的容量小于計算得到的所述哈希值的位數(shù),則截取所述哈希值,并將截取后的哈希值作為索引,查找所述當前目標哈希子表對應的位圖。
4.如權利要求2所述的方法,其特征在于,將所述待存儲表項的信息存入空位后,還包括將所述位圖的有效位置為無效,并將所述待存儲表項的鍵值存儲到該位圖中。
5.如權利要求2所述的方法,其特征在于,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息的步驟,包括當所述位圖的沖突位為無效,有效位為無效,則將該位圖對應的哈希子表中已存的表項取出,將該沖突位置為有效,并將取出表項的鍵值與當前的待存儲表項的鍵值存入該位圖中;判斷當前的目標哈希子表是否為最后一張哈希子表,如果不是最后一張哈希子表,則將當前目標哈希子表更新為下一張哈希子表,直至查找到空位存儲所述待存儲表項的信息。
6.如權利要求2所述的方法,其特征在于,更新當前目標哈希子表直至找到空位存儲所述待存儲表項的信息的步驟,包括當該位圖的沖突位為有效,則當前的待存儲表項的鍵值直接存入到該位圖中;判斷當前目標哈希子表是否為最后一張哈希子表,如果不是最后一張哈希子表,則將當前目標哈希子表更新為下一張哈希子表,直至找到空位存儲所述待存儲表項的信息。
7.如權利要求1至6中任意一項所述的方法,其特征在于,還包括當所述待存儲表項存儲完成后,同步更新位圖的沖突位信息和哈希子表的信息。
8.如權利要求1至6中任意一項所述的方法,其特征在于,所述哈希子表對應的哈希函數(shù)為循環(huán)冗余碼校驗函數(shù)。
9.如權利要求1至6中任意一項所述的方法,其特征在于,所述多張哈希子表對應的哈希函數(shù)之間采用不同的循環(huán)冗余碼校驗多項式。
10.一種哈希表的表項刪除方法,其特征在于,哈希表包括多張哈希子表,每一張哈希子表對應一張位圖,每一張位圖對應一個哈希函數(shù),且每張所述位圖包括多個條目,則所述方法包括每張位圖所對應的哈希函數(shù)并行計算需要刪除的條目的哈希值; 根據(jù)計算得到的哈希值,在其各自對應的位圖中并行查找;將每一張位圖的查找結果順序進行比較,當?shù)谝淮纬霈F(xiàn)沖突位為無效時,將該位圖的地址對應的哈希子表中的表項取出;將取出的表項的鍵值與需要查找的鍵值進行比較,如果相同,則將所述表項從所述哈希子表中刪除。
11.如權利要求10所述的方法,其特征在于,刪除表項后還包括; 將對應的位圖的沖突位置為無效,有效位置為有效。
12.如權利要求10所述的方法,其特征在于,還包括將刪除的表項所在的位圖之前的所有位圖中的所存儲的所有鍵值進行比較; 如果某個位圖中所存儲的鍵值大于兩個,則直接將需要刪除的鍵值刪掉;或者, 如果某個位圖中所存儲的鍵值等于兩個,則將需要刪除的鍵值刪掉,并查找到另一個鍵值所存儲的位置,將其取出,存入該位圖所對應的哈希子表中。
13.—種哈希表的查找方法,其特征在于,所述哈希表包括多張哈希子表,每張哈希子表對應一張位圖,每張位圖對應一個哈希函數(shù),則所述哈希表查找方法包括利用每張哈希子表對應的哈希函數(shù)并行計算待查找表項的鍵值的哈希值; 根據(jù)計算得到的所述哈希值在對應的位圖中并行查找;將每一張位圖的查找結果順序進行比較,當?shù)谝淮纬霈F(xiàn)沖突位為無效時,取出該位圖的地址對應的哈希子表中的表項;將取出的表項的鍵值與待查找表項的鍵值進行比較,如果取出的表項的鍵值與所述待查找表項的鍵值相匹配,則將該表項的信息作為最終查表結果。
14.如權要求13所述的方法,其特征在于,還包括如果取出的表項的鍵值與所述待查找表項的鍵值不相匹配,則返回查找失敗的消息。
15.如權利要求13或者14所述的方法,其特征在于,根據(jù)計算得到的所述哈希值在對應的位圖中并行查找的步驟,包括根據(jù)計算得到的所述哈希值對應的哈希子表的容量,對所述哈希值進行截??; 將截取后的哈希值作為索引,在其對應的位圖中并行查找。
16.如權利要求15所述的方法,其特征在于,所述位圖對應的哈希函數(shù)與存儲表項時所述哈希子表對應的哈希函數(shù)相同。
17.—種哈希表存儲裝置,包括主控邏輯模塊,以及與所述主控邏輯模塊相連的控制線路和數(shù)據(jù)線路,其中,主控邏輯模塊控制所述控制線路完成表項的添加和/或刪除,以及控制數(shù)據(jù)線路完成表項查找,其特征在于,所述控制線路包括表項拆分模塊,目標哈希子表確定模塊和表項存儲模塊,其中,所述表項拆分模塊,用于將哈希表拆分為多張哈希子表和多張位圖,且每張哈希子表對應一張位圖和一個哈希函數(shù);所述目標哈希子表確定模塊,與所述表項拆分模塊相連,用于從所述表項拆分模塊拆分得到的多張哈希子表中的確定一張哈希子表作為當前的目標哈希子表;并當接收到所述表項存儲模塊發(fā)出的更新指令后,用于將當前的目標哈希子表更新為其下一張哈希子表;所述表項存儲模塊,與所述目標哈希子表確定模塊相連,用于利用所述當前目標哈希子表所對應的哈希函數(shù),計算所述待存儲表項的鍵值的哈希值,并根據(jù)所述哈希值確定當前目標哈希子表所對應的存儲位置是否為空位,如是,將待存儲表項的信息存入該空位,否則向所述目標哈希子表確定模塊發(fā)送更新指令,直至查找到空位存儲所述待存儲表項的。
18.如權利要求17所述的裝置,其特征在于,所述位圖包含沖突位和有效位,所述表項存儲模塊包括計算子模塊、查找子模塊、表項添加子模塊,其中,所述計算子模塊,與所述目標哈希子表確定模塊相連,用于利用所述當前目標哈希子表所對應的哈希函數(shù),計算所述待存儲表項的鍵值的哈希值;所述查找子模塊,與所述計算子模塊相連,用于判斷所述目標哈希子表確定模塊計算的哈希值的位數(shù)是否大于等于所述當前目標哈希子表的容量,如是,則截取所述哈希值,并將截取后的哈希值作為索引,查找相應的位圖,并判斷所述位圖的有效位是否有效,且所述位圖的沖突位是否為無效,如是,則判定所述目標哈希子表中的存儲位置為空位,否則,則向所述目標哈希子表確定模塊發(fā)送更新指令,直至查找到空位;所述表項添加子模塊,與所述查找子模塊相連,用于當所述查找子模塊在所述當前目標哈希子表中查找到空位時,將所述待存儲表項的信息存入所述空位中。
19.如權利要求18所述的裝置,其特征在于,當所述表項添加子模塊,將所述待存儲表項的信息存入所述空位中后,所述表項添加子模塊還用于將所述位圖的有效位置為無效, 并將所述待存儲表項的鍵值存儲到所述位圖中。
20.如權利要求18所述的裝置,其特征在于,當所述查找子模塊判斷出所述位圖的有效位為無效時,還用于判斷所述位圖的沖突位是否為無效,如是,則所述表項添加子模塊用于將所述位圖對應哈希子表中已存儲的表項取出,并將取出的表項的鍵值與所述當前待存儲表項的鍵值存入到所述位圖中;當所述查找子模塊判斷出所述位圖的沖突位為有效時, 則所述表項存儲模塊的表項添加子模塊用于將當前的所述待存儲表項的鍵值存儲到所述位圖中。
21.如權利要求17所述的裝置,其特征在于,所述哈希表包括多張哈希子表,每張哈希子表對應一張位圖和一個哈希函數(shù),所述數(shù)據(jù)線路包括并行計算模塊,并行查找模塊以及比較模塊,其中,并行計算模塊,用于利用每張哈希子表對應的哈希函數(shù),并行計算待查找表項的鍵值的哈希值;并行查找模塊,與所述并行計算模塊相連,用于根據(jù)計算得到的哈希值在其各自對應的位圖中并行地查找;比較模塊,用于將各個位圖的查表結果進行比較判斷,確定出匹配的表項所在的哈希子表的地址,將該地址存儲的表項的信息取出,并與需要查找的鍵值進行比較,判斷取出的表項是否與待查找的表項相匹配,如匹配,則將該表項的信息作為最終查表結果。
全文摘要
本發(fā)明公開了一種哈希表的表項添加、刪除、查找方法及哈希表存儲裝置。本發(fā)明的哈希表的表項查找方法通過并行計算待查找表項鍵值的哈希值,并根據(jù)該哈希值到對應位圖中進行查找,并將查找的結果進行對比,當?shù)谝淮纬霈F(xiàn)沖突位為無效時,取出該位圖的地址對應的哈希子表中的表項;將其與帶查找表項進行對比,如果相匹配,則該表項即為待查找的表項,即查找到待查找的表項。本發(fā)明的哈希表表項查找方法以極小的查找時間代價以及較高的表空間利用率實現(xiàn)全部表項存儲而無表項遺留,只需訪問一次存儲器就能夠準確的查找到需要的表項,同時也便于硬件與存儲器之間接口的實現(xiàn),能夠在表空間大小,查找效率以及硬件實現(xiàn)方面獲得比較好的均衡。
文檔編號G06F17/30GK102194002SQ201110138340
公開日2011年9月21日 申請日期2011年5月25日 優(yōu)先權日2011年5月25日
發(fā)明者孫遠航, 崔玉姣, 張煒, 李彧, 鄭永梅 申請人:中興通訊股份有限公司