專利名稱:一種用于訪問關(guān)鍵字的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息處理領(lǐng)域,更具體地,涉及一種用于訪問關(guān)鍵字的方法及裝置。
背景技術(shù):
目前,哈希表廣泛應(yīng)用于網(wǎng)絡(luò)數(shù)據(jù)包處理領(lǐng)域,如IP路由查找、數(shù)據(jù)包分類、負載均衡和網(wǎng)絡(luò)安全系統(tǒng)等。在這些應(yīng)用中,哈希表通常用于管理網(wǎng)絡(luò)中的并發(fā)連接會話,以支持進一步的流粒度分析與處理。在高速網(wǎng)絡(luò)環(huán)境下,并發(fā)連接數(shù)量龐大,可達數(shù)十萬之多。有時需要利用哈希表訪問關(guān)鍵字,即將關(guān)鍵字(key)通過哈希表映射到鍵值(value),如圖I所示為現(xiàn)有哈希表的映射關(guān)系圖,訪問(包括查詢get O和賦值set O)關(guān)鍵字時需要將關(guān)鍵字通過哈希函數(shù)映射到鍵值。然而,從關(guān)鍵字到鍵值的映射需要經(jīng)過復雜的計算,因此,在經(jīng)常訪問關(guān)鍵字,特別是頻繁訪問關(guān)鍵字時的情形下,將嚴重影響性能,降低工作效率,并造成資源浪費。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實施例的目的是提出一種用于訪問關(guān)鍵字的方法和裝置,其能夠便捷地存取關(guān)鍵字的鍵值。為了達到上述目的,本發(fā)明實施例提出一種用于訪問關(guān)鍵字的方法,包括以下步驟獲取關(guān)鍵字對應(yīng)的存儲位置;其中,所述關(guān)鍵字對應(yīng)的存儲位置是在首次訪問該關(guān)鍵字時,根據(jù)該關(guān)鍵字從哈希表獲得、并記錄的該關(guān)鍵字的鍵值的存儲位置;根據(jù)獲取的存儲位置訪問該關(guān)鍵字的鍵值。本發(fā)明實施例是根據(jù)保存有關(guān)鍵字到關(guān)鍵字的鍵值的存儲位置的映射關(guān)系的哈希表,來獲得并記錄某個關(guān)鍵字的鍵值的存儲位置,隨后再次訪問該關(guān)鍵字時只需根據(jù)記錄的該存儲位置就可以獲取或設(shè)置鍵值。因此,減少了重復的計算過程,節(jié)省了時間,提高了效率,并且使用頻繁時還可以提高系統(tǒng)的性能,顯著提高了用戶體驗。作為上述技術(shù)方案的優(yōu)選,在首次訪問該關(guān)鍵字時,無法從哈希表獲得該關(guān)鍵字的鍵值的存儲位置時,在哈希表中建立關(guān)鍵字到該關(guān)鍵字的鍵值的存儲位置的映射關(guān)系。作為上述技術(shù)方案的優(yōu)選,在哈希表中建立關(guān)鍵字到該關(guān)鍵字的鍵值的存儲位置的映射關(guān)系的步驟包括為關(guān)鍵字新建鍵值并存儲;獲得鍵值的存儲位置;將所述關(guān)鍵字到所述鍵值的存儲位置的映射關(guān)系存儲至哈希表。本方案給出了對關(guān)鍵字的訪問進行封裝的方法。作為上述技術(shù)方案的優(yōu)選,所述為關(guān)鍵字新建鍵值并存儲的步驟包括為關(guān)鍵字新建鍵值并存儲至預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)中。作為上述技術(shù)方案的優(yōu)選,所述預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)包括數(shù)組或鏈表。當所述數(shù)據(jù)存儲結(jié)構(gòu)為數(shù)組時,鍵值的存儲位置為數(shù)組下標;當所述數(shù)據(jù)存儲結(jié)構(gòu)為鏈表時,鍵值的存儲位置為鏈表的節(jié)點序號。本方案給出了優(yōu)選的兩種數(shù)據(jù)存儲結(jié)構(gòu)。作為上述技術(shù)方案的優(yōu)選,當使用訪問器訪問關(guān)鍵字時,所述方法還包括將獲得的存儲位置輸入訪問器。本發(fā)明實施例還提出一種用于訪問關(guān)鍵字的裝置,包括獲取模塊,用于獲取關(guān)鍵字對應(yīng)的存儲位置;其中,所述關(guān)鍵字對應(yīng)的存儲位置是在首次訪問該關(guān)鍵字時,根據(jù)該關(guān)鍵字從哈希表獲得、并記錄的該關(guān)鍵字的鍵值的存儲位置;訪問模塊,用于根據(jù)獲取的存儲位置訪問該關(guān)鍵字的鍵值。作為上述技術(shù)方案的優(yōu)選,所述裝置還包括注冊模塊,用于在首次訪問該關(guān)鍵字時,無法從哈希表獲得該關(guān)鍵字的鍵值的存儲位置時,在哈希表中建立關(guān)鍵字到該關(guān)鍵字的鍵值的存儲位置的映射關(guān)系。作為上述技術(shù)方案的優(yōu)選,所述注冊模塊用于為關(guān)鍵字新建鍵值并存儲;獲得鍵值的存儲位置;將所述關(guān)鍵字到所述鍵值的存儲位置的映射關(guān)系存儲至哈希表。作為上述技術(shù)方案的優(yōu)選,所述注冊模塊用于為關(guān)鍵字新建鍵值并存儲預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)中。作為上述技術(shù)方案的優(yōu)選,所述預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)包括數(shù)組或鏈表。當所述數(shù)據(jù)存儲結(jié)構(gòu)為數(shù)組時,鍵值的存儲位置為數(shù)組下標;當所述數(shù)據(jù)存儲結(jié)構(gòu)為鏈表時,鍵值的存儲位置為鏈表的節(jié)點序號。本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。下面通過附圖和實施例,對本發(fā)明實施例的技術(shù)方案做進一步的詳細描述。
附圖用來提供對本發(fā)明實施例的進一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實施例一起用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明實施例的限制。在附圖中圖I是目前關(guān)鍵字通過哈希表映射到鍵值的示意圖;圖2是本發(fā)明優(yōu)選實施例提出的訪問關(guān)鍵字的方法的流程圖;圖3是本發(fā)明一具體實施例提出的訪問關(guān)鍵字的方法的流程圖;圖4是本發(fā)明另一具體實施例提出的訪問關(guān)鍵字的方法的示意圖;圖5是本發(fā)明優(yōu)選實施例提出的訪問關(guān)鍵字的裝置的結(jié)構(gòu)示意圖;圖6是本發(fā)明一具體實施例提出的訪問關(guān)鍵字的裝置的結(jié)構(gòu)示意圖。
具體實施例方式以下結(jié)合附圖對本發(fā)明的優(yōu)選實施例進行說明,應(yīng)當理解,此處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明實施例,并不用于限定本發(fā)明實施例。
如圖2所示為本發(fā)明優(yōu)選實施例提出的一種用于訪問關(guān)鍵字的方法,包括步驟S21 :獲取關(guān)鍵字對應(yīng)的存儲位置;其中,所述關(guān)鍵字對應(yīng)的存儲位置是在首次訪問該關(guān)鍵字時,根據(jù)該關(guān)鍵字從哈希表獲得、并記錄的該關(guān)鍵字的鍵值的存儲位置;步驟S22 :根據(jù)獲取的存儲位置訪問該關(guān)鍵字的鍵值;本發(fā)明實施例是根據(jù)保存有關(guān)鍵字到關(guān)鍵字的鍵值的存儲位置的映射關(guān)系的哈希表,來獲得并記錄某個關(guān)鍵字的鍵值的存儲位置,隨后再次訪問該關(guān)鍵字時只需根據(jù)記錄的該存儲位置就可以獲取或設(shè)置鍵值。因此,減少了重復的計算過程,節(jié)省了時間,提高了效率,并且使用頻繁時還可以提高系統(tǒng)的性能,顯著提高了用戶體驗。下面通過其他具體實施例來對本發(fā)明實施例提出的用于訪問關(guān)鍵字的方法進行詳細說明。如圖3所示為本發(fā)明提出的一種用于訪問關(guān)鍵字的方法的具體實施例,在本實施例中,關(guān)鍵字的鍵值存儲在預(yù)先建立的數(shù)組中。具體地,該方法包括以下步驟步驟S31 :首次對關(guān)鍵字Keyl進行訪問時,在哈希表中查找是否存在關(guān)鍵字Keyl對應(yīng)的數(shù)組下標;若是,執(zhí)行步驟S34 ;若否,執(zhí)行步驟S32。步驟S32 :為關(guān)鍵字Keyl新建鍵值valuel存儲到預(yù)先建立的數(shù)組中。其中,數(shù)組為較佳的數(shù)據(jù)存儲結(jié)構(gòu)。因為數(shù)組是將元素在內(nèi)存中連續(xù)存放,由于每個元素占用內(nèi)存相同,因此通過數(shù)組下標就可以迅速訪問數(shù)組中任何元素,適用于需要快速訪問數(shù)據(jù)的情形。優(yōu)選地,數(shù)據(jù)存儲結(jié)構(gòu)還可以為鏈表。步驟S33 :將鍵值valuel在數(shù)組中的存儲位置即數(shù)組下標和關(guān)鍵字Keyl的映射關(guān)系存儲至哈希表中。若數(shù)據(jù)存儲結(jié)構(gòu)為鏈表,鍵值在數(shù)據(jù)存儲結(jié)構(gòu)中的存儲位置為鏈表的節(jié)點序號。上述步驟S32和步驟S33可以稱為注冊步驟(register())。步驟S34 :根據(jù)從哈希表獲得的關(guān)鍵字Keyl對應(yīng)的數(shù)組下標訪問數(shù)組以獲取或設(shè)置關(guān)鍵字Keyl的鍵值valuel。步驟S35 :記錄關(guān)鍵字Keyl對應(yīng)的數(shù)組下標。該步驟是本方案中的關(guān)鍵步驟,優(yōu)選地,該步驟中所指的記錄是臨時存儲,只在固定訪問關(guān)鍵字Keyl的范圍內(nèi)有效。這樣不會增加額外的存儲負擔。應(yīng)當注意的是,上述步驟S34和步驟S35的執(zhí)行順序可以互換,也可以同時執(zhí)行。此后,若再次訪問關(guān)鍵字Keyl,則可以根據(jù)記錄的數(shù)組下標訪問數(shù)組以獲取或設(shè)置關(guān)鍵字Keyl的鍵值。而無需再根據(jù)關(guān)鍵字Keyl去查找哈希表。本實施例是在根據(jù)哈希表從關(guān)鍵字映射到鍵值的基礎(chǔ)上新增了數(shù)組,將原本關(guān)鍵字通過哈希表映射的鍵值存儲到新增的數(shù)組中,而將數(shù)組下標放入哈希表中。如此,僅在第一次訪問該關(guān)鍵字時需要將該關(guān)鍵字通過哈希表映射得到數(shù)組下標,并記錄該數(shù)組下標,之后的訪問都無需進行哈希映射,只需通過記錄的數(shù)組下標直接訪問數(shù)組。本發(fā)明實施例結(jié)合了哈希表的動態(tài)映射和數(shù)組訪問的高效率,對于固定范圍內(nèi)關(guān)鍵字頻繁訪問的情形能帶來很大的改善和提高。在本發(fā)明的另一具體實施例中,在實施對關(guān)鍵字的訪問時,優(yōu)選地,使用訪問器訪問關(guān)鍵字,即實現(xiàn)對關(guān)鍵字的使用的封裝,以后對該關(guān)鍵字的訪問(即獲取鍵值或設(shè)置鍵值)都通過該訪問器來操作。為關(guān)鍵字創(chuàng)建的訪問器包括以下要素關(guān)鍵字對應(yīng)的存儲位置,獲取鍵值訪問器和/或設(shè)置鍵值訪問器。其中,獲取鍵值訪問器為get訪問器,其功能是獲取鍵值,設(shè)置鍵值訪問器為set訪問器,其功能是設(shè)置鍵值。如圖4所示的使用訪問器訪問關(guān)鍵字的示意圖,訪問器具體實現(xiàn)了 I)關(guān)鍵字在全局第一次被訪問時,發(fā)現(xiàn)在哈希表中沒有找到對應(yīng)的存儲位置(即圖中的數(shù)組下標)時,將關(guān)鍵字進行注冊(register O),即在數(shù)組中創(chuàng)建鍵值,以及獲得該鍵值的數(shù)組下標,并將該關(guān)鍵字和數(shù)組下標的映射關(guān)系存儲至哈希表;2)關(guān)鍵字在此訪問器第一次被訪問時查找哈希表獲得該關(guān)鍵字對應(yīng)的數(shù)組下標;3)關(guān)鍵字在此訪問器第二次及以后被訪問時使用記錄的數(shù)組下標獲取或設(shè)置鍵值。相應(yīng)地,如圖5所示,本發(fā)明實施例還提出一種用于訪問關(guān)鍵字的裝置,包括獲取模塊501,用于獲取關(guān)鍵字對應(yīng)的存儲位置;其中,所述關(guān)鍵字對應(yīng)的存儲位置是在首次訪問該關(guān)鍵字時,根據(jù)該關(guān)鍵字從哈希表獲得、并記錄的該關(guān)鍵字的鍵值的存儲位置;訪問模塊502,用于根據(jù)獲取的存儲位置訪問該關(guān)鍵字的鍵值;優(yōu)選地,所述裝置還可以包括注冊模塊503,用于在首次訪問該關(guān)鍵字時,無法從哈希表獲得該關(guān)鍵字的鍵值的存儲位置時,在哈希表中建立關(guān)鍵字到該關(guān)鍵字的鍵值的存儲位置的映射關(guān)系。注冊模塊503具體用于為關(guān)鍵字新建鍵值并存儲;獲得鍵值的存儲位置;將所述關(guān)鍵字到所述鍵值的存儲位置的映射關(guān)系存儲至哈希表。優(yōu)選地,注冊模塊503用于為關(guān)鍵字新建鍵值并存儲預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)中。其中,所述預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)包括數(shù)組或鏈表。當所述數(shù)據(jù)存儲結(jié)構(gòu)為數(shù)組時,鍵值的存儲位置為數(shù)組下標;當所述數(shù)據(jù)存儲結(jié)構(gòu)為鏈表時,鍵值的存儲位置為鏈表的節(jié)點序號。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產(chǎn)品的形式。本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理
6器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種用于訪問關(guān)鍵字的方法,其特征在于,包括以下步驟獲取關(guān)鍵字對應(yīng)的存儲位置,其中,所述關(guān)鍵字對應(yīng)的存儲位置是在首次訪問該關(guān)鍵字時,根據(jù)該關(guān)鍵字從哈希表獲得、并記錄的該關(guān)鍵字的鍵值的存儲位置;根據(jù)獲取的存儲位置訪問該關(guān)鍵字的鍵值。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述方法還包括在首次訪問該關(guān)鍵字時,無法從哈希表獲得該關(guān)鍵字的鍵值的存儲位置時,在哈希表中建立關(guān)鍵字到該關(guān)鍵字的鍵值的存儲位置的映射關(guān)系。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,在哈希表中建立關(guān)鍵字到該關(guān)鍵字的鍵值的存儲位置的映射關(guān)系的步驟包括為關(guān)鍵字新建鍵值并存儲;獲得鍵值的存儲位置;將所述關(guān)鍵字到所述鍵值的存儲位置的映射關(guān)系存儲至哈希表。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述為關(guān)鍵字新建鍵值并存儲的步驟包括為關(guān)鍵字新建鍵值并存儲至預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)中。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)包括數(shù)組或鏈表;當所述數(shù)據(jù)存儲結(jié)構(gòu)為數(shù)組時,鍵值的存儲位置為數(shù)組下標;當所述數(shù)據(jù)存儲結(jié)構(gòu)為鏈表時,鍵值的存儲位置為鏈表的節(jié)點序號。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于,當使用訪問器訪問關(guān)鍵字時,所述方法還包括將獲得的存儲位置輸入訪問器。
7.一種用于訪問關(guān)鍵字的裝置,其特征在于,包括獲取模塊,用于獲取關(guān)鍵字對應(yīng)的存儲位置;其中,所述關(guān)鍵字對應(yīng)的存儲位置是:在首次訪問該關(guān)鍵字時,根據(jù)該關(guān)鍵字從哈希表獲得、并記錄的該關(guān)鍵字的鍵值的存儲位置;訪問模塊,用于根據(jù)獲取的存儲位置訪問該關(guān)鍵字的鍵值。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括注冊模塊,用于在首次訪問該關(guān)鍵字時,從哈希表無法獲得該關(guān)鍵字的鍵值的存儲位置時,在哈希表中建立關(guān)鍵字到該關(guān)鍵字的鍵值的存儲位置的映射關(guān)系。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述注冊模塊用于為關(guān)鍵字新建鍵值并存儲;獲得鍵值的存儲位置;將所述關(guān)鍵字到所述鍵值的存儲位置的映射關(guān)系存儲至哈希表。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述注冊模塊用于為關(guān)鍵字新建鍵值并存儲至預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)中。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述預(yù)先建立的數(shù)據(jù)存儲結(jié)構(gòu)包括數(shù)組或鏈表;當所述數(shù)據(jù)存儲結(jié)構(gòu)為數(shù)組時,鍵值的存儲位置為數(shù)組下標;當所述數(shù)據(jù)存儲結(jié)構(gòu)為鏈表時,鍵值的存儲位置為鏈表的節(jié)點序號。
全文摘要
本發(fā)明公開了一種用于訪問關(guān)鍵字的方法和裝置,其中,該方法包括獲取關(guān)鍵字對應(yīng)的存儲位置,其中,所述該關(guān)鍵字對應(yīng)的存儲位置是在首次訪問該關(guān)鍵字時,根據(jù)該關(guān)鍵字從哈希表獲得、并記錄的該關(guān)鍵字的鍵值的存儲位置;根據(jù)獲取的存儲位置訪問該關(guān)鍵字的鍵值。本發(fā)明實施例通過查找哈希表獲得關(guān)鍵字的鍵值的存儲位置后,將該存儲位置記錄下來,隨后再次訪問該關(guān)鍵字時只需根據(jù)記錄的該存儲位置即可獲取或設(shè)置鍵值。減少了重復的計算過程,節(jié)省了時間,提高了效率。
文檔編號G06F17/30GK102937993SQ20121044833
公開日2013年2月20日 申請日期2012年11月9日 優(yōu)先權(quán)日2012年11月9日
發(fā)明者許瑞軍, 王亞輝, 孫大慶 申請人:北京小米科技有限責任公司