一種數(shù)據(jù)存取方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種數(shù)據(jù)存取方法及裝置。
【背景技術(shù)】
[0002]在服務(wù)器模塊開發(fā)過程中,經(jīng)常會用到狀態(tài)機,狀態(tài)機對應(yīng)的是一個數(shù)據(jù)結(jié)構(gòu),狀態(tài)機的每一個狀態(tài)的變化都是由于網(wǎng)絡(luò)收發(fā)引起的,而在全異步的服務(wù)器模型中,為了實現(xiàn)1復用,映射關(guān)系頻繁被使用,并且服務(wù)器需要感知到狀態(tài)機的超時。
[0003]現(xiàn)有技術(shù)中,標準模板庫(STL, Standard Template Library)是C++標準庫里的一個數(shù)據(jù)結(jié)構(gòu),內(nèi)部是由紅黑樹實現(xiàn)的。
[0004]在以上現(xiàn)有技術(shù)中,數(shù)據(jù)處理效率低,需要平衡樹結(jié)構(gòu),哈希算法選擇不適當,會造成沖突較多,并且檢測狀態(tài)機超時需要遍歷全部元素,檢測效率低。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明提供一種數(shù)據(jù)存取方法及裝置,可實現(xiàn)對數(shù)據(jù)高效的存取操作。
[0006]本發(fā)明實施例提供的數(shù)據(jù)存取方法,包括:
[0007]在存儲器中構(gòu)建哈希桶和鏈表;
[0008]接收存儲數(shù)據(jù)的指令并獲取要存儲的對象;
[0009]新分配一個鏈表的節(jié)點,并在所述節(jié)點內(nèi)寫入所述對象的序列號以及過期時間;
[0010]將所述節(jié)點插入到所述鏈表中對應(yīng)的位置使所述鏈表中所有節(jié)點按照過期時間排序;
[0011]根據(jù)所述序列號獲取一個索引值;
[0012]將所述對象以及所述節(jié)點的地址存儲在所述哈希桶中下標為所述索引值的位置。
[0013]本發(fā)明實施例提供的數(shù)據(jù)存取裝置,包括:
[0014]構(gòu)建模塊,用于在存儲器中構(gòu)建哈希桶和鏈表;
[0015]第一獲取模塊,用于接收存儲數(shù)據(jù)的指令并從所述指令中獲取要存儲的對象;
[0016]鏈表存儲模塊,用于新分配一個鏈表的節(jié)點模塊,并在所述節(jié)點內(nèi)寫入所述對象的序列號以及過期時間;
[0017]鏈表排序模塊,用于將所述節(jié)點插入到所述鏈表中對應(yīng)的位置使所述鏈表中所有節(jié)點按照過期時間排序;
[0018]索引值獲取模塊,用于根據(jù)所述序列號獲取一個索引值;
[0019]存儲模塊,用于將所述對象以及所述節(jié)點的地址存儲在所述哈希桶中下標為所述索引值的位置。
[0020]本發(fā)明實施例提供的數(shù)據(jù)存取方法及裝置,通過在互相可定位的哈希桶和鏈表組成的數(shù)據(jù)結(jié)構(gòu)中,在鏈表中存儲節(jié)點以及節(jié)點對應(yīng)的數(shù)據(jù),并根據(jù)存儲位置生成索引值,以在哈希桶中快速定位需要處理的對象,用以實現(xiàn)高效的添加操作。并且,可以快速查找到過期的節(jié)點,提高處理過期節(jié)點的效率。
[0021]為讓本發(fā)明的上述和其他目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附圖式,作詳細說明如下。
【附圖說明】
[0022]圖1為計算裝置的一個實施例的結(jié)構(gòu)框圖。
[0023]圖2為第一實施例提供的數(shù)據(jù)存取方法流程圖。
[0024]圖3為第一實施例的方法中采用的哈希桶與鏈表的存儲結(jié)構(gòu)示意圖。
[0025]圖4為第二實施例提供的數(shù)據(jù)存取方法流程圖。
[0026]圖5為第三實施例提供的數(shù)據(jù)存取方法流程圖。
[0027]圖6為第四實施例提供的數(shù)據(jù)存取方法流程圖。
[0028]圖7為第五實施例提供的數(shù)據(jù)存儲裝置的結(jié)構(gòu)框圖。
[0029]圖8為第六實施例提供的數(shù)據(jù)存儲裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0030]為更進一步闡述本發(fā)明為實現(xiàn)預定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實施例,對依據(jù)本發(fā)明的【具體實施方式】、結(jié)構(gòu)、特征及其功效,詳細說明如后。[0031 ] 本發(fā)明實施例提供一種數(shù)據(jù)存取方法及裝置,其用于計算裝置中實現(xiàn)對一些特定類型的數(shù)據(jù)結(jié)構(gòu)進行查詢、新增、刪除、遍歷等操作。上述的特定類型的數(shù)據(jù)結(jié)構(gòu)例如是指狀態(tài)機,但也可以為其他數(shù)據(jù)結(jié)構(gòu)。上述的計算裝置例如可包括服務(wù)器、個人計算機、移動電子終端等。
[0032]狀態(tài)機對應(yīng)的是一個數(shù)據(jù)結(jié)構(gòu),其具有多個狀態(tài),而每一個狀態(tài)的變化都是由于網(wǎng)絡(luò)收發(fā)引起的,而在全異步的服務(wù)器模型中,為了實現(xiàn)1 (例如網(wǎng)絡(luò)連接)復用,映射關(guān)系頻繁被使用,并且服務(wù)器需要感知到狀態(tài)機的超時。當然,狀態(tài)機也并不限于僅在服務(wù)器中被使用,任意計算機或者其他計算裝置中使用。
[0033]圖1為上述的計算裝置的一個實施例的結(jié)構(gòu)框圖。如圖1所示,計算裝置100包括:存儲器102、存儲控制器104、一個或多個(圖中僅示出一個)處理器106、外設(shè)接口 108以及網(wǎng)絡(luò)模塊110??梢岳斫?,圖1所示的結(jié)構(gòu)僅為示意,其并不對計算裝置100的結(jié)構(gòu)造成限定。例如,計算裝置100還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。
[0034]存儲器102可用于存儲軟件程序以及模塊,如本發(fā)明實施例中的計算任務(wù)處理方法及裝置對應(yīng)的程序指令/模塊,處理器104通過運行存儲在存儲器102內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實現(xiàn)上述的方法。
[0035]存儲器102可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器102可進一步包括相對于處理器106遠程設(shè)置的存儲器,這些遠程存儲器可以通過網(wǎng)絡(luò)連接至計算裝置100。上述網(wǎng)絡(luò)的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。處理器106以及其他可能的組件對存儲器102的訪問可在存儲控制器104的控制下進行。
[0036]外設(shè)接口 108將各種輸入/輸入裝置耦合至處理器106。處理器106運行存儲器102內(nèi)的各種軟件、指令計算裝置100執(zhí)行各種功能以及進行數(shù)據(jù)處理。在一些實施例中,外設(shè)接口 108、處理器106以及存儲控制器104可以在單個芯片中實現(xiàn)。在其他一些實例中,他們可以分別由獨立的芯片實現(xiàn)。
[0037]網(wǎng)絡(luò)模塊110用于接收以及發(fā)送網(wǎng)絡(luò)信號。上述網(wǎng)絡(luò)信號可包括無線信號或者有線信號。在一個實例中,上述網(wǎng)絡(luò)信號為有線網(wǎng)絡(luò)信號。此時,網(wǎng)絡(luò)模塊110可包括處理器、隨機存儲器、轉(zhuǎn)換器、晶體振蕩器等元件。
[0038]上述的軟件程序以及模塊包括:操作系統(tǒng)122以及數(shù)據(jù)存取模塊124。其中操作系統(tǒng)122例如可為LINUX,UNIX, WINDOWS,其可包括各種用于管理系統(tǒng)任務(wù)(例如存儲器管理、存儲設(shè)備控制、電源管理等)的軟件組件和/或驅(qū)動,并可與各種硬件或軟件組件相互通訊,從而提供其他軟件組件的運行環(huán)境。數(shù)據(jù)存取模塊124運行在操作系統(tǒng)122的基礎(chǔ)上,其具體實現(xiàn)本發(fā)明實施例提供的數(shù)據(jù)存取方法,以下結(jié)合實施例對上述方法進行描述。
[0039]第一實施例提供一種數(shù)據(jù)存取方法,請參閱圖2,本實施例的方法包括:
[0040]步驟201、在存儲器中構(gòu)建哈希桶和鏈表。
[0041]處理器106在存儲器102中劃出一部分存儲空間來構(gòu)建哈希桶和鏈表,該哈希桶和鏈表是基于要存儲的對象相互關(guān)聯(lián)的。圖3為上述的哈希桶及鏈表的存儲結(jié)構(gòu)示意圖。哈希桶301是一個結(jié)構(gòu)化數(shù)組,可以采用H[N] (N為自然數(shù))來表示,其內(nèi)每個項目H[i] (i為自然數(shù)且小于等于N)的成員包括序列號、節(jié)點地址以及有效數(shù)據(jù),其中序列號是一個無符號的整形數(shù)值,節(jié)點地址是指鏈表302中對應(yīng)的節(jié)點的地址,而有效數(shù)據(jù)是指實際此結(jié)構(gòu)實際承載的數(shù)據(jù),例如上述的狀態(tài)機。鏈表302中的每個節(jié)點的成員包括:序列號以及過期時間。
[0042]哈希桶301中的每個項目是與要存儲的對象--對應(yīng)的,鏈表302中的每個節(jié)點也是與要存儲的對象一一對應(yīng)的,而且哈希桶301與鏈表302中用于存儲同一對象的項目或者節(jié)點也是相互關(guān)聯(lián)的。具體地,對應(yīng)于同一對象,若其在鏈表302內(nèi)存儲的節(jié)點的序列號為i,則根據(jù)序列號可直接獲取一個索引值k,其在哈希桶301中對應(yīng)的哈希桶項目即為H[k],由于哈希桶的特性,在訪問鏈表302的節(jié)點時,通過序列號可以直接定位至哈希桶301中的項目。此外,在哈希桶301的項目中還存儲有節(jié)點地址,其直接指向鏈表302中的一個節(jié)點,根據(jù)節(jié)點地址,也可以直接訪問鏈表302中的