專利名稱:一種數(shù)據(jù)存儲及搜索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)處理方法,更確切地講,本發(fā)明涉及一種數(shù)據(jù)的存儲及搜索方法。
背景技術(shù):
目前,數(shù)據(jù)通訊技術(shù)飛速發(fā)展,對數(shù)據(jù)量的要求亦日益增大,由此推動了存儲技術(shù)的發(fā)展,使數(shù)據(jù)的大容量存儲成為可能。比如,通過將路由器等網(wǎng)絡(luò)產(chǎn)品的各種轉(zhuǎn)發(fā)表項(xiàng)的規(guī)模不斷擴(kuò)大即可實(shí)現(xiàn)大量數(shù)據(jù)的存儲。另一方面,在對所存儲的大量數(shù)據(jù)進(jìn)行搜索時,搜索算法的優(yōu)劣直接影響到所存儲的大量數(shù)據(jù)的利用效率及存儲數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)合理程度,不合理的數(shù)據(jù)結(jié)構(gòu)及低效的搜索算法會降低所存儲數(shù)據(jù)的應(yīng)用價值。如在路由產(chǎn)品中,相關(guān)轉(zhuǎn)發(fā)表項(xiàng)的搜索效率可直接影響到產(chǎn)品的性能指標(biāo)。
在存儲方面,對于不是特別大的數(shù)據(jù)量時,一般采用鏈表式的存儲結(jié)構(gòu),在搜索時,采用簡單的逐項(xiàng)比較關(guān)鍵值的方法進(jìn)行搜索。但當(dāng)數(shù)據(jù)量很大時,鏈表的長度也會較長,這樣會導(dǎo)致上述搜索算法的性能嚴(yán)重下降,從而使得系統(tǒng)的實(shí)時性變差。
另外,還可以采用哈希算法與鏈表相結(jié)合的方案,實(shí)現(xiàn)原理如圖1所示。以每個要搜索的數(shù)據(jù)項(xiàng)的關(guān)鍵值作為輸入,計算出的哈希值作為鏈表的索引,然后在鎖定的鏈表中進(jìn)行數(shù)據(jù)搜索。該方法雖然比所述簡單的鏈表方案有所改進(jìn),但當(dāng)數(shù)據(jù)條目數(shù)量很大時,鏈表的長度也很長,也會導(dǎo)致搜索算法的性能嚴(yán)重下降,從而使得系統(tǒng)的實(shí)時性仍然比較明顯地變差。
發(fā)明內(nèi)容
本發(fā)明解決的技術(shù)問題是提供一種數(shù)據(jù)存儲及搜索方法,其可有效提高數(shù)據(jù)量較大時系統(tǒng)的搜索效率,并提高系統(tǒng)的實(shí)時性;本方法可應(yīng)用于各種需要進(jìn)行大量數(shù)據(jù)項(xiàng)存儲、搜索的產(chǎn)品中,并可提高如高端核心路由器產(chǎn)品的性能。
為解決上述問題,本發(fā)明提供一種數(shù)據(jù)存儲方法,該方法包括確定至少兩個哈希桶;根據(jù)待存儲數(shù)據(jù)的關(guān)鍵值以及各個哈希桶的哈希函數(shù)計算確定各個哈希桶中該待存儲數(shù)據(jù)對應(yīng)的哈希值;確定各哈希桶中相應(yīng)哈希值對應(yīng)的數(shù)據(jù)鏈表;將數(shù)據(jù)存儲于該數(shù)據(jù)關(guān)鍵值確定的各哈希桶中相應(yīng)哈希值對應(yīng)的數(shù)據(jù)鏈表中。
其中,所述各個哈希桶可采用不同的哈希函數(shù)。
其中,所述數(shù)據(jù)鏈表可以采用單向鏈表結(jié)構(gòu)、雙向鏈表結(jié)構(gòu)、樹形結(jié)構(gòu)或圖形結(jié)構(gòu)。
相應(yīng)地,本發(fā)明還提供一種數(shù)據(jù)搜索方法,該方法包括根據(jù)各哈希桶的哈希函數(shù)以及待搜索的數(shù)據(jù)的關(guān)鍵值計算得到各哈希桶中該待搜索的數(shù)據(jù)對應(yīng)的哈希值;根據(jù)所述哈希值確定各哈希桶中該哈希值對應(yīng)的數(shù)據(jù)鏈表;從所述確定的各個哈希桶的數(shù)據(jù)鏈表中選擇其一進(jìn)行數(shù)據(jù)搜索。
優(yōu)選地,所述在確定的數(shù)據(jù)鏈表中選擇其一進(jìn)行數(shù)據(jù)搜索為選擇數(shù)據(jù)搜索長度最短的數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索。
優(yōu)選地,所述在確定的數(shù)據(jù)鏈表中選擇其一進(jìn)行數(shù)據(jù)搜索為選擇搜索時間最短的數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索。
可選地,所述數(shù)據(jù)鏈表為單向鏈表結(jié)構(gòu)。
可選地,所述數(shù)據(jù)鏈表為雙向鏈表結(jié)構(gòu)。
可選地,所述數(shù)據(jù)鏈表為樹形結(jié)構(gòu)。
可選地,所述數(shù)據(jù)鏈表為圖形結(jié)構(gòu)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果本發(fā)明提供的一種數(shù)據(jù)存儲及搜索方法,通過具有不同哈希桶的哈希函數(shù)的計算而于數(shù)據(jù)鏈表中提取數(shù)據(jù)鏈表,再選擇最佳數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索,該方法可有效提高數(shù)據(jù)量較大時系統(tǒng)的搜索效率,并提高系統(tǒng)的實(shí)時性;另外,本方法可應(yīng)用于各種需要進(jìn)行大量數(shù)據(jù)項(xiàng)存儲、搜索的產(chǎn)品中,并可提高如高端核心路由器產(chǎn)品的性能。
圖1是現(xiàn)有的哈希桶與數(shù)據(jù)鏈表相結(jié)合的原理圖;圖2是本發(fā)明一種數(shù)據(jù)存儲及搜索方法的哈希桶與數(shù)據(jù)鏈表相結(jié)合的原理圖。
具體實(shí)施例方式
請參照圖2所示,圖2是本發(fā)明的哈希桶與數(shù)據(jù)鏈表相結(jié)合的原理圖。存儲數(shù)據(jù)時,首先,確定至少兩個哈希桶,具體實(shí)現(xiàn)時所述哈希桶采用不同的哈希函數(shù);根據(jù)待存儲數(shù)據(jù)的關(guān)鍵值以及各個哈希桶的哈希函數(shù)計算確定各個哈希桶中該待存儲數(shù)據(jù)對應(yīng)的哈希值;然后確定各哈希桶中相應(yīng)哈希值對應(yīng)的數(shù)據(jù)鏈表;最后將數(shù)據(jù)存儲于該數(shù)據(jù)關(guān)鍵值確定的各哈希桶中相應(yīng)哈希值對應(yīng)的數(shù)據(jù)鏈表中,舉例說,確定兩個哈希桶,即哈希桶一及哈希桶二,其中,所述哈希桶一及哈希桶二具有不同的哈希函數(shù)。由于每個數(shù)據(jù)均對應(yīng)有一個相應(yīng)的關(guān)鍵值,這樣數(shù)據(jù)的關(guān)鍵值經(jīng)不同的哈希函數(shù)的運(yùn)算可得到一個相應(yīng)的哈希值,而在哈希桶中每個哈希值對應(yīng)有不同的數(shù)據(jù)鏈表,所述各個存儲同一數(shù)據(jù)的不同數(shù)據(jù)鏈表節(jié)點(diǎn)上的指針域中的指針均指向存儲該數(shù)據(jù)的同一節(jié)點(diǎn),如哈希桶一的刻度“2”處所對應(yīng)的數(shù)據(jù)鏈表i,其包含節(jié)點(diǎn)1節(jié)、點(diǎn)2及節(jié)點(diǎn)3上所存儲的數(shù)據(jù),哈希桶二的刻度“1”處所對應(yīng)的數(shù)據(jù)鏈表j,其包含節(jié)點(diǎn)1節(jié)及點(diǎn)2上所存儲的數(shù)據(jù),哈希桶二的刻度“N-3”處所對應(yīng)的數(shù)據(jù)鏈表k,其包含節(jié)點(diǎn)3上所存儲的數(shù)據(jù)。
在搜索數(shù)據(jù)時,本發(fā)明中采用下述步驟進(jìn)行首先根據(jù)各哈希桶的哈希函數(shù)以及待搜索的數(shù)據(jù)的關(guān)鍵值計算得到各哈希桶中該待搜索的數(shù)據(jù)對應(yīng)的哈希值;然后根據(jù)所述哈希值確定各哈希桶中該哈希值對應(yīng)的多個鏈表;從所述多個鏈表中選擇其一進(jìn)行數(shù)據(jù)搜索,具體搜索時,本發(fā)明中可選擇數(shù)據(jù)搜索長度最短的數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索,也可以采用選擇數(shù)據(jù)搜索時間最短的數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索,這里不再贅述。
以要搜索節(jié)點(diǎn)3中所存儲的數(shù)據(jù)為例,哈希桶一及哈希桶二所具有的不同的哈希函數(shù),其中所述哈希桶一中刻度“2”處對應(yīng)一個數(shù)據(jù)鏈表i,所述哈希桶二中刻度“1”處對應(yīng)一個數(shù)據(jù)鏈表j,哈希桶二的刻度“N-3”處對應(yīng)一個數(shù)據(jù)鏈表k,若要搜索節(jié)點(diǎn)3中所存儲的數(shù)據(jù),則根據(jù)節(jié)點(diǎn)3中存儲的數(shù)據(jù)的關(guān)鍵值,計算得到其所對應(yīng)的哈希值,結(jié)果得到哈希桶一的刻度“2”處所對應(yīng)的哈希值及哈希桶二的刻度“N-3”處所對應(yīng)的哈希值,哈希桶一的刻度“2”處的哈希值對應(yīng)的數(shù)據(jù)鏈表i包含節(jié)點(diǎn)1、節(jié)點(diǎn)2及節(jié)點(diǎn)3上所存儲的數(shù)據(jù),哈希桶二的刻度“N-3”處的哈希值所對應(yīng)的數(shù)據(jù)鏈表k包含節(jié)點(diǎn)3上所存儲的數(shù)據(jù)。
得到可搜索到節(jié)點(diǎn)3上所存儲數(shù)據(jù)的兩條數(shù)據(jù)鏈表i及k后,再從所述兩條數(shù)據(jù)鏈表i及k中查找到節(jié)點(diǎn)3上所存儲數(shù)據(jù)的最優(yōu)的一條數(shù)據(jù)鏈表,最后于所述在確定的最優(yōu)的一條數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索。具體實(shí)現(xiàn)時,判斷數(shù)據(jù)鏈表最優(yōu)的一種方法是該數(shù)據(jù)鏈表的數(shù)據(jù)搜索長度最短,而所述數(shù)據(jù)鏈表長度由從該數(shù)據(jù)鏈表所包含的數(shù)據(jù)數(shù)目表征。另外,判斷該最優(yōu)數(shù)據(jù)鏈表的另一種方法是在數(shù)據(jù)鏈表中搜索數(shù)據(jù)所花費(fèi)的時間最短。對兩條數(shù)據(jù)鏈表i及k進(jìn)行比較得出,要搜索到節(jié)點(diǎn)3中所存儲的數(shù)據(jù),即要達(dá)到節(jié)點(diǎn)3,顯然數(shù)據(jù)鏈表k的路徑最短,因而其所花費(fèi)的時間亦為最短,所以,選擇數(shù)據(jù)鏈表k為搜索節(jié)點(diǎn)3中所存儲的數(shù)據(jù)的數(shù)據(jù)鏈表。
可以理解,本發(fā)明所提供的一種數(shù)據(jù)存儲及搜索方法中所述的數(shù)據(jù)鏈表及數(shù)據(jù)鏈表可為單向鏈表結(jié)構(gòu)、雙向鏈表結(jié)構(gòu)、樹形結(jié)構(gòu)或圖形結(jié)構(gòu)。另外,存儲數(shù)據(jù)前所設(shè)置的哈希桶的數(shù)目可任意確定,不僅限于所述實(shí)施方式所述的兩個哈希桶,其中,由于某種原因一個哈希桶有唯一的一個哈希函數(shù),所以設(shè)置的哈希桶個數(shù)與通過哈希函數(shù)運(yùn)算得到的數(shù)據(jù)鏈表個數(shù)是相等的。
本發(fā)明提供的一種數(shù)據(jù)存儲及搜索方法,通過具有不同哈希桶的哈希函數(shù)的計算而確定多個數(shù)據(jù)鏈表,并從所述多個數(shù)據(jù)鏈表中選擇最佳數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索,該方法可有效提高數(shù)據(jù)量較大時系統(tǒng)的搜索效率,并提高系統(tǒng)的實(shí)時性;另外,本方法可應(yīng)用于各種需要進(jìn)行大量數(shù)據(jù)項(xiàng)存儲、搜索的產(chǎn)品中,并可提高如高端核心路由器產(chǎn)品的性能。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種數(shù)據(jù)存儲方法,其特征在于,該方法包括確定至少兩個哈希桶;根據(jù)待存儲數(shù)據(jù)的關(guān)鍵值以及各個哈希桶的哈希函數(shù)計算確定各個哈希桶中該待存儲數(shù)據(jù)對應(yīng)的哈希值;確定各哈希桶中相應(yīng)哈希值對應(yīng)的數(shù)據(jù)鏈表;將數(shù)據(jù)存儲于該數(shù)據(jù)關(guān)鍵值確定的各哈希桶中相應(yīng)哈希值對應(yīng)的數(shù)據(jù)鏈表中。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存儲方法,其特征在于,所述哈希桶采用不同的哈希函數(shù)。
3.根據(jù)權(quán)利要求1或2所述的數(shù)據(jù)存儲方法,其特征在于,所述數(shù)據(jù)鏈表為單向鏈表結(jié)構(gòu)、雙向鏈表結(jié)構(gòu)、樹形結(jié)構(gòu)或圖形結(jié)構(gòu)。
4.一種數(shù)據(jù)搜索方法,其特征在于,該方法包括根據(jù)各哈希桶的哈希函數(shù)以及待搜索的數(shù)據(jù)的關(guān)鍵值計算得到各哈希桶中該待搜索的數(shù)據(jù)對應(yīng)的哈希值;根據(jù)所述哈希值確定各哈希桶中該哈希值對應(yīng)的數(shù)據(jù)鏈表;從所述確定的各個哈希桶的數(shù)據(jù)鏈表中選擇其一進(jìn)行數(shù)據(jù)搜索。
5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)搜索方法,其特征在于,所述在確定的數(shù)據(jù)鏈表中選擇其一進(jìn)行數(shù)據(jù)搜索為選擇數(shù)據(jù)搜索長度最短的數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索。
6.根據(jù)權(quán)利要求4所述的數(shù)據(jù)搜索方法,其特征在于,所述在確定的數(shù)據(jù)鏈表中選擇其一進(jìn)行數(shù)據(jù)搜索為選擇搜索時間最短的數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索。
7.如權(quán)利要求4-6任一項(xiàng)所述的數(shù)據(jù)搜索方法,其特征在于,所述數(shù)據(jù)鏈表為單向鏈表結(jié)構(gòu)。
8.如權(quán)利要求4-6任一項(xiàng)所述的數(shù)據(jù)搜索方法,其特征在于,所述數(shù)據(jù)鏈表為雙向鏈表結(jié)構(gòu)。
9.如權(quán)利要求4-6任一項(xiàng)所述的數(shù)據(jù)搜索方法,其特征在于,所述數(shù)據(jù)鏈表為樹形結(jié)構(gòu)。
10.如權(quán)利要求4-6任一項(xiàng)所述的數(shù)據(jù)搜索方法,其特征在于,所述數(shù)據(jù)鏈表為圖形結(jié)構(gòu)。
全文摘要
一種數(shù)據(jù)存儲方法包括確定至少兩個不同的哈希桶,將數(shù)據(jù)存儲于數(shù)據(jù)鏈表中,每個數(shù)據(jù)均具有一個相應(yīng)的關(guān)鍵值,其中,每個關(guān)鍵值經(jīng)哈希函數(shù)的運(yùn)算得到一個相應(yīng)的哈希值,而每個哈希值對應(yīng)有不同的數(shù)據(jù)鏈表,所述數(shù)據(jù)鏈表中的數(shù)據(jù)均包含于所述數(shù)據(jù)鏈表中。數(shù)據(jù)搜索方法包括根據(jù)各哈希桶的不同的哈希函數(shù),計算得到所要搜索數(shù)據(jù)的關(guān)鍵值所對應(yīng)的各個哈希值,再根據(jù)所述哈希值確定其分別對應(yīng)的數(shù)據(jù)鏈表,在所述確定的數(shù)據(jù)鏈表中選擇其一進(jìn)行數(shù)據(jù)搜索。通過具有不同哈希桶的哈希函數(shù)的計算而于數(shù)據(jù)鏈表中提取數(shù)據(jù)鏈表,再選擇最佳數(shù)據(jù)鏈表進(jìn)行數(shù)據(jù)搜索,該方法可有效提高數(shù)據(jù)量較大時系統(tǒng)的搜索效率,并提高系統(tǒng)的實(shí)時性。
文檔編號G06F17/30GK1858734SQ20051012116
公開日2006年11月8日 申請日期2005年12月28日 優(yōu)先權(quán)日2005年12月28日
發(fā)明者丁兆坤 申請人:華為技術(shù)有限公司