国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      數(shù)據(jù)讀取方法、數(shù)據(jù)寫入方法及數(shù)據(jù)服務(wù)器的制造方法

      文檔序號:10725144閱讀:444來源:國知局
      數(shù)據(jù)讀取方法、數(shù)據(jù)寫入方法及數(shù)據(jù)服務(wù)器的制造方法
      【專利摘要】本發(fā)明實施例提供了一種數(shù)據(jù)讀取方法,應(yīng)用于數(shù)據(jù)服務(wù)器,其中,數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,其中,哈希表用于存儲鍵值的索引信息,鏈表用于存儲與索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù)。該數(shù)據(jù)讀取方法通過計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;確定哈希表中與目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;獲取與目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù),并將目標(biāo)數(shù)據(jù)發(fā)送至終端??梢姡痉桨覆捎霉<渔湵淼姆绞?,簡化了內(nèi)存管理邏輯,讀取速度快。
      【專利說明】
      數(shù)據(jù)讀取方法、數(shù)據(jù)寫入方法及數(shù)據(jù)服務(wù)器
      技術(shù)領(lǐng)域
      [0001]本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,更具體地說,涉及一種數(shù)據(jù)讀取方法、數(shù)據(jù)寫入方法及數(shù)據(jù)服務(wù)器。
      【背景技術(shù)】
      [0002]隨著大數(shù)據(jù)時代的到來,數(shù)據(jù)量不斷增加,數(shù)據(jù)庫的訪問量也不斷增大,用戶對數(shù)據(jù)的訪問速度要求也越來越高。通常,為了提高數(shù)據(jù)的訪問速度,需要將要訪問的數(shù)據(jù)寫入數(shù)據(jù)服務(wù)器的內(nèi)存,再進(jìn)行訪問。
      [0003]目前,采用兩層哈希表的結(jié)構(gòu)實現(xiàn)數(shù)據(jù)的讀取和寫入,其中,第一層哈希表存儲Key的索引,第二層存儲Field的索引,發(fā)明人發(fā)現(xiàn),該數(shù)據(jù)存儲方式,在數(shù)據(jù)寫入時,要求每一個Key新建時,需要分配一個連續(xù)的內(nèi)存空間,用于創(chuàng)建第二層哈希結(jié)構(gòu),使得內(nèi)存管理邏輯非常繁重。而且,采用此方式,在同時讀取多個Field值時,需要計算多次哈希,數(shù)據(jù)讀取速度慢。
      [0004]因此,如何快速讀取數(shù)據(jù)成為本領(lǐng)域技術(shù)人員亟待解決的問題。

      【發(fā)明內(nèi)容】

      [0005]有鑒于此,本發(fā)明實施例提供數(shù)據(jù)讀取方法、數(shù)據(jù)寫入方法及數(shù)據(jù)服務(wù)器,通過哈希加鏈表的方式,簡化了內(nèi)存管理邏輯,讀取速度快。
      [0006]為實現(xiàn)上述目的,本發(fā)明實施例提供如下技術(shù)方案:
      [0007]—種數(shù)據(jù)讀取方法,應(yīng)用于數(shù)據(jù)服務(wù)器,
      [0008]數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù);
      [0009]計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;
      [0010]確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;
      [0011 ]獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)。
      [0012]—種數(shù)據(jù)寫入方法,應(yīng)用于數(shù)據(jù)服務(wù)器,
      [0013]數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù);
      [0014]判斷所述索引信息中是否包含目標(biāo)鍵值,如果是,將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲;如果否,將所述索引信息中的鍵值賦值為目標(biāo)鍵值,并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲。
      [0015]一種數(shù)據(jù)服務(wù)器,包括:
      [0016]創(chuàng)建模塊,用于存儲哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù);
      [0017]第一計算模塊,用于計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;
      [0018]第一確定模塊,用于確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;
      [0019]第一獲取模塊,用于獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)。
      [0020]基于上述技術(shù)方案,本發(fā)明實施例提供了一種數(shù)據(jù)讀取方法,應(yīng)用于數(shù)據(jù)服務(wù)器,其中,數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,其中,哈希表用于存儲鍵值的索引信息,鏈表用于存儲與索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù)。該數(shù)據(jù)讀取方法通過計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;確定哈希表中與目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;獲取與目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù),并將目標(biāo)數(shù)據(jù)發(fā)送至終端??梢姡痉桨覆捎霉<渔湵淼姆绞?,簡化了內(nèi)存管理邏輯,讀取速度快。
      【附圖說明】
      [0021]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
      [0022]圖1為本發(fā)明實施例提供的數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)框圖;
      [0023]圖2為本發(fā)明實施例提供的數(shù)據(jù)處理系統(tǒng)的信令流程圖;
      [0024]圖3為本發(fā)明實施例提供的數(shù)據(jù)處理系統(tǒng)的又一流程圖;
      [0025]圖4為本發(fā)明實施例提供的數(shù)據(jù)讀取方法的流程圖;
      [0026]圖5為本發(fā)明實施例提供的數(shù)據(jù)讀取方法的又一流程圖;
      [0027]圖6為本發(fā)明實施例提供的數(shù)據(jù)服務(wù)器的結(jié)構(gòu)示意圖;
      [0028]圖7為本發(fā)明實施例提供的數(shù)據(jù)服務(wù)器的又一結(jié)構(gòu)示意圖;
      [0029]圖8為本發(fā)明實施例提供的服務(wù)器的硬件結(jié)構(gòu)框圖。
      【具體實施方式】
      [0030]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都對應(yīng)本發(fā)明保護(hù)的范圍。
      [0031]本發(fā)明實施例提供了一種數(shù)據(jù)讀取方法,應(yīng)用于數(shù)據(jù)服務(wù)器,其中,數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,其中,哈希表用于存儲鍵值的索引信息,鏈表用于存儲與索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù)。該數(shù)據(jù)讀取方法通過計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;確定哈希表中與目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;獲取與目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù),并將目標(biāo)數(shù)據(jù)發(fā)送至終端??梢?,本方案采用哈希加鏈表的方式,簡化了內(nèi)存管理邏輯,讀取速度快。
      [0032]圖1為本發(fā)明實施例提供的數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)框圖,本發(fā)明實施例提供的數(shù)據(jù)讀取方法以及數(shù)據(jù)寫入方法可基于圖1所示系統(tǒng)實現(xiàn),參照圖1,本發(fā)明實施例提供的數(shù)據(jù)處理系統(tǒng)可以包括:服務(wù)器10,至少一個終端20;
      [0033]服務(wù)器10可以為網(wǎng)絡(luò)側(cè)設(shè)置的用于數(shù)據(jù)處理的設(shè)備,服務(wù)器10可以為單臺服務(wù)器,也可以為由多臺服務(wù)器組成的服務(wù)器群組;
      [0034]至少一個終端20為用戶側(cè)的用于提交數(shù)據(jù)查詢請求的設(shè)備,如手機、平板電腦、筆記本電腦等。
      [0035]基于圖1所示系統(tǒng),圖2示出了本發(fā)明實施例提供的數(shù)據(jù)處理系統(tǒng)的信令流程圖,結(jié)合圖1和圖2所示,該流程可以包括:
      [0036]S10、終端發(fā)送數(shù)據(jù)查詢請求至服務(wù)器。
      [0037]S11、服務(wù)器接收所述數(shù)據(jù)查詢請求。
      [0038]SI 2、建立哈希表和鏈表。
      [0039]其中,所述哈希表用于存儲鍵值Key的索引信息,所述鍵值的索引信息可以包括鍵值、所述鍵值的修改時間以及數(shù)據(jù)偏移指針,所述數(shù)據(jù)偏移指針為與所述鍵值對應(yīng)的區(qū)域的數(shù)據(jù)在所述鏈表中的位置。
      [0040]具體的,哈希表可以使用二維數(shù)組保存,如一個桶長為m、桶深為η的哈希表,用形如hash[n][m]的二位數(shù)組保存。即該二維數(shù)組的結(jié)點定義為:
      [0041]struct THashEIem{
      [0042]char key[128];//Key值
      [0043]uint32_t modify_time;//修改時間
      [0044]uint32_t posit1n;//數(shù)據(jù)在Field數(shù)據(jù)鏈表的位置
      [0045]}。
      [0046]另外,還會保存一個長度為n的遞減素數(shù)數(shù)組mod[n],其中,mod[0]為小于m的最大素數(shù)。具體的,mod是用來計算每個哈希值所映射的位置。例如某一個Key計算出來的哈希值是k= 18932,哈希表第一行的長度是mod[0] =9973,則k對mod[0]取模得到的值8959為k在第一行的位置。
      [0047]又由于哈希表每一行的長度必須要不一樣,以保證當(dāng)k在上一行沖突時,在下一行可以映射到不同的位置,因此,mod[n]為遞減數(shù)組。
      [0048]而鏈表采用一維數(shù)組,鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域Field的數(shù)據(jù)。
      [0049]數(shù)據(jù)中每個Field根據(jù)Fie IdName排序,并以FieldLen/FieldName/ValueLen/ValueType/ValueBuf方式緊縮存儲。其中,F(xiàn)ieldLen為Field的長度,在本實施例中,該Field的長度為4字節(jié);FieldName:為Field的名稱;ValueLen為Field對應(yīng)值的長度,也是4字節(jié);ValueType為Field對應(yīng)值的類型,如整數(shù)、字符串、數(shù)組等,本實施例中ValueType也選用4字節(jié);ValueBuf為Field對應(yīng)值的具體空間。具體的,數(shù)組的下標(biāo)代表鏈表的位置。即上述哈希表對結(jié)點的定義里的THashEl em.posi t 1n就是此鏈表數(shù)組的下標(biāo)值。
      [0050]數(shù)組中每個結(jié)點定義為:
      [0051]struct TLinkElem{
      [0052]uint32_t next_positon;
      [0053]char buffer[512];
      [0054]};
      [0055]每個Key對應(yīng)的數(shù)據(jù)部分,可能多個結(jié)點鏈接成的數(shù)據(jù)鏈表組成。其中每個數(shù)據(jù)鏈表包括一個表頭部分,定義如下:
      [0056]struct TLinkBufHead{
      [0057]char key [ 128];//Key 的值
      [0058]uint32_t crc;//數(shù)據(jù)空間的crc校驗值
      [0059]uint32_t bufTer_len;//數(shù)據(jù)空間長度
      [0060]};
      [0061 ]數(shù)據(jù)的每個 Field 均以 FieldLen/FieldName/ValueLen/ValueType/ValueBuf 的方式緊縮存儲,并且按FieldName的值從小到大排序。
      [0062]S13、計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值。
      [0063]此處,可以通過預(yù)設(shè)算法計算Key值對應(yīng)的哈希值,例如采用FNV算法,當(dāng)然,采用其他算法也可以。
      [0064]S14、確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息。
      [0065]S15、獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)。
      [0066]需要說明的是,此處可以通過獲取所述索引信息中根據(jù)所述目標(biāo)哈希值得到的鍵值。再獲取與所述鍵值對應(yīng)的數(shù)據(jù)偏移指針,根據(jù)所述數(shù)據(jù)偏移指針,確定所述目標(biāo)數(shù)據(jù)。
      [0067]其中,服務(wù)器在獲取所述索引信息中根據(jù)所述目標(biāo)哈希值得到的鍵值時,可以通過在獲取所述目標(biāo)哈希值在所述哈希表中每i行的位置j后,獲取目標(biāo)位置hash[i][j]的鍵值與所述目標(biāo)鍵值相同的鍵值。
      [0068]服務(wù)器在獲取與所述鍵值對應(yīng)的數(shù)據(jù)偏移指針,根據(jù)所述數(shù)據(jù)偏移指針,確定所述目標(biāo)數(shù)據(jù)時,可以通過獲取所述目標(biāo)位置hash[ i ] [ j ]的數(shù)據(jù)偏移指針的數(shù)值;根據(jù)所述數(shù)據(jù)偏移指針的數(shù)值,確定所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置;再根據(jù)預(yù)設(shè)的數(shù)據(jù)空間的長度以及所述首結(jié)點的位置,獲取第一鏈表數(shù)據(jù);最后遍歷所述第一鏈表數(shù)據(jù),判斷所述第一鏈表數(shù)據(jù)的區(qū)域名與目標(biāo)數(shù)據(jù)是否一致,如果是,確定所述第一鏈表數(shù)據(jù)為目標(biāo)數(shù)據(jù)。
      [0069]S16、將所述目標(biāo)數(shù)據(jù)發(fā)送至所述終端。
      [0070]現(xiàn)結(jié)合一具體實例,對本方案提供的數(shù)據(jù)處理系統(tǒng)在實現(xiàn)數(shù)據(jù)讀取的工作原理進(jìn)行說明,例如,現(xiàn)在需要查詢一個Key值為k,F(xiàn)ield為fl、f2、f3的值(其中fl、f2、f3按字母由小到大排序),操作如下:
      [0071 ] 1、先用FNV算法計算k對應(yīng)的哈希值,假設(shè)哈希值為h。
      [0072]2、對哈希表每一行i(i從O開始),計算h在該行的位置,假設(shè)值為j。
      [0073]3、判斷hash[i] [j]的key字段與k是否一致。是則繼續(xù),否則增加i的值,返回操作步驟2。
      [0074]4、取出hash[i][ j]的posit1n字段的值,假設(shè)為p。則link[p]為k對應(yīng)的數(shù)據(jù)鏈表首結(jié)點的位置。
      [0075]5、從I ink[p]中取出buffer部分,解析出TLinkBufHead,并根據(jù)buff er_len獲取整個鏈表的數(shù)據(jù)部分。
      [0076]6、依次遍歷整個數(shù)據(jù)部分,先取出4個字節(jié)作為FieldLen的值,取出FieldLen個字節(jié)作為FieldName的值。判斷FieldName與f!是否一致,是則繼續(xù),否則重復(fù)執(zhí)行本步驟,直至找到FieldName的值與f I相同。
      [0077]7、取出4字節(jié)作為ValueLen的值,取出ValueLen個字節(jié)作為ValueType和ValueBuf的值,此值即為fl的值。
      [0078]繼續(xù)步驟7,查詢f2、f3的值。
      [0079]上面介紹了本數(shù)據(jù)處理系統(tǒng)讀取數(shù)據(jù)的處理流程,本實施例還提供了一種數(shù)據(jù)寫入的處理流程,如圖3所示,具體為:
      [0080]步驟S21、服務(wù)器判斷所述索引信息中是否包含目標(biāo)鍵值,如果是,將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲;如果否,將所述索引信息中的鍵值賦值為目標(biāo)鍵值,并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲。
      [0081]其中,服務(wù)器將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲,具體可以按照預(yù)設(shè)字段壓縮所述多個區(qū)域的數(shù)據(jù),并計算每個所述區(qū)域的數(shù)據(jù)的目標(biāo)長度。之后獲取所述鏈表中長度大于所述目標(biāo)長度的結(jié)點,將壓縮后的數(shù)據(jù)存儲到所述鏈表的數(shù)據(jù)空間。
      [0082]具體的,該服務(wù)器還可以獲取與所述目標(biāo)鍵值相關(guān)聯(lián)的目標(biāo)哈希值在所述哈希表中每i行的位置j ;
      [0083]將所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置賦值為目標(biāo)位置hash[i][j]的數(shù)據(jù)偏移指針的數(shù)值。
      [0084]現(xiàn)結(jié)合一具體實例,對本數(shù)據(jù)寫入流程進(jìn)行說明,如下:
      [0085]假設(shè)哈希表使用名為hash的二維數(shù)組保存,F(xiàn)ield數(shù)據(jù)鏈表使用名為link的一維數(shù)組保存。
      [0086]現(xiàn)在需要寫入一個1(67值為1^,?161(1為€14243的值(其中€14243按字母由小到大排序),操作如下:
      [0087]1、判斷k在hash中是否存在。
      [0088]其具體實現(xiàn)步驟參見上述數(shù)據(jù)讀取流程中的步驟1-4,如果存在,是則將fl、f2、f3按?丨61(11^11/^丨61(1他1116/\%11161^11/\^111617口6/\^11161311;1^緊縮存儲到臨時空間1:內(nèi),并計算其總大小,假設(shè)為I。
      [0089]如果不存在,貝Ij判斷hash[i][j]的key值是否為空,是則將hash[i] [ j]的key值賦值為k, posit1n值賦值為O;否則查找下一個空結(jié)點。
      [0090]從link中的空閑結(jié)點中,取出總大小大于I的結(jié)點,并組成數(shù)據(jù)鏈表。并將臨時空間t的數(shù)據(jù)保存在數(shù)據(jù)鏈表的buf空間內(nèi)。同時設(shè)置鏈表的表頭TLinkBufHead的key字段為k,crc字段賦值為根據(jù)t計算的crc校驗值,buf f er_l en字段賦值為I。
      [0091 ] 2、將hash[ i ] [ j ]的posit1n字段賦值為數(shù)據(jù)鏈表首結(jié)點的下標(biāo)值。如果賦值之前,posit1n字段為0,則返回成功,如果否,貝Ij刪除hash[i][j]原posit1n字段對應(yīng)的link的數(shù)據(jù)鏈表的內(nèi)容。
      [0092]采用本實施例提供的數(shù)據(jù)處理系統(tǒng),能夠快速的實現(xiàn)數(shù)據(jù)讀取或?qū)懭耄绕涫轻槍σ粋€Key對應(yīng)多個Field的情況,如,緩存視頻數(shù)據(jù)時,Key可以是此影片的ID,F(xiàn)ield可以包括影片的標(biāo)題、海報、劇集列表、明星、劇照等。對于影片字段名這類數(shù)據(jù),每一個Key需要緩存的Field字段相似的場景,F(xiàn)ield數(shù)據(jù)使用鏈表的方式代替哈希表,可以減少查詢的次數(shù)。
      [0093]例如,Key中需要緩存的總Field個數(shù)為20,需要查詢的Field個數(shù)為15。用本方案,即采用鏈表的方式,查詢次數(shù)為20,而現(xiàn)有技術(shù)中,采用哈希表的方式查詢的次數(shù)為15*ln
      (20)=34。相比可知,本方案采用哈希加鏈表的方式,簡化了內(nèi)存管理邏輯,讀取速度快。
      [0094]下面以服務(wù)器的角度對本發(fā)明實施例提供的數(shù)據(jù)讀取方法進(jìn)行介紹,下文描述的數(shù)據(jù)讀取方法可與上文描述的信令流程內(nèi)容相互參照。
      [0095]圖4為本發(fā)明實施例提供的數(shù)據(jù)讀取方法的流程圖,該方法可應(yīng)用于服務(wù)器,包括:
      [0096]步驟SlOl、計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;
      [0097]步驟S102、確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;
      [0098]步驟S103、獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)。
      [0099]需要說明的是,本數(shù)據(jù)讀取方法基于數(shù)據(jù)服務(wù)器的硬件架構(gòu)實現(xiàn),其中,數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,哈希表用于存儲鍵值的索引信息,鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù)。當(dāng)然,該哈希表和鏈表可以是在執(zhí)行上述數(shù)據(jù)讀取方法之前進(jìn)行構(gòu)建,并存儲于數(shù)據(jù)服務(wù)器中。
      [0100]優(yōu)選的,所述鍵值的索引信息包括鍵值、所述鍵值的修改時間以及數(shù)據(jù)偏移指針,所述數(shù)據(jù)偏移指針為與所述鍵值對應(yīng)的區(qū)域的數(shù)據(jù)在所述鏈表中的位置;
      [0101 ]所述確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息包括:
      [0102]獲取所述索引信息中根據(jù)所述目標(biāo)哈希值得到的鍵值;
      [0103]所述獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)包括:
      [0104]獲取與所述鍵值對應(yīng)的數(shù)據(jù)偏移指針,根據(jù)所述數(shù)據(jù)偏移指針,確定所述目標(biāo)數(shù)據(jù)。
      [0105]優(yōu)選的,所述獲取所述索引信息中根據(jù)所述目標(biāo)哈希值得到的鍵值包括:
      [0106]獲取所述目標(biāo)哈希值在所述哈希表中每i行的位置j;
      [0107]獲取目標(biāo)位置hash[ i ] [ j ]的鍵值與所述目標(biāo)鍵值相同的鍵值。
      [0108]優(yōu)選的,所述獲取與所述鍵值對應(yīng)的數(shù)據(jù)偏移指針,根據(jù)所述數(shù)據(jù)偏移指針,確定所述目標(biāo)數(shù)據(jù)包括:
      [0109]獲取所述目標(biāo)位置hash[i ] [ j ]的數(shù)據(jù)偏移指針的數(shù)值;
      [0110]根據(jù)所述數(shù)據(jù)偏移指針的數(shù)值,確定所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置;
      [0111]根據(jù)預(yù)設(shè)的數(shù)據(jù)空間的長度以及所述首結(jié)點的位置,獲取第一鏈表數(shù)據(jù);
      [0112]遍歷所述第一鏈表數(shù)據(jù),判斷所述第一鏈表數(shù)據(jù)的區(qū)域名與目標(biāo)數(shù)據(jù)是否一致,如果是,確定所述第一鏈表數(shù)據(jù)為目標(biāo)數(shù)據(jù)。
      [0113]請參閱圖5,為本實施例提供的一種數(shù)據(jù)寫入方法的流程圖,該數(shù)據(jù)寫入方法應(yīng)用于數(shù)據(jù)服務(wù)器,具體包括:
      [0114]步驟S201、判斷所述索引信息中是否包含目標(biāo)鍵值,如果是,將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲;如果否,將所述索引信息中的鍵值賦值為目標(biāo)鍵值,并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲。
      [0115]優(yōu)選的,所述將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲包括:
      [0116]按照預(yù)設(shè)字段壓縮所述多個區(qū)域的數(shù)據(jù),并計算每個所述區(qū)域的數(shù)據(jù)的目標(biāo)長度;
      [0117]獲取所述鏈表中長度大于所述目標(biāo)長度的結(jié)點,將壓縮后的數(shù)據(jù)存儲到所述鏈表的數(shù)據(jù)空間。
      [0118]優(yōu)選的,當(dāng)所述索引信息中不否包含所述目標(biāo)鍵值,將所述索引信息中的鍵值賦值為目標(biāo)鍵值之后,所述并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲包括:
      [0119]獲取與所述目標(biāo)鍵值相關(guān)聯(lián)的目標(biāo)哈希值在所述哈希表中每i行的位置j;
      [0120]將所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置賦值為目標(biāo)位置hash[i][j]的數(shù)據(jù)偏移指針的數(shù)值。
      [0121 ]其方法實施例的工作原理可參見上述系統(tǒng)實施例。
      [0122]下面對本發(fā)明實施例提供的服務(wù)器進(jìn)行介紹,下文描述的服務(wù)器可與上文以服務(wù)器角度描述的數(shù)據(jù)讀取方法和數(shù)據(jù)寫入系統(tǒng)相互對應(yīng)參照。
      [0123]圖6為本發(fā)明實施例提供的服務(wù)器的結(jié)構(gòu)框圖,參照圖6,該服務(wù)器可以包括:
      [0124]第一計算模塊20,用于計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;
      [0125]第一確定模塊30,用于確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;
      [0126]第一獲取模塊40,用于獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)。
      [0127]可選的,還可以包括創(chuàng)建模塊,用于存儲哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù)。
      [0128]可選的,如圖7所示,所述第一確定模塊30包括第一獲取單元301,用于獲取所述索引信息中根據(jù)所述目標(biāo)哈希值得到的鍵值;
      [0129]第一獲取模塊40包括第二獲取單元401,用于獲取與所述鍵值對應(yīng)的數(shù)據(jù)偏移指針,根據(jù)所述數(shù)據(jù)偏移指針,確定所述目標(biāo)數(shù)據(jù)。
      [0130]有選的,所述第一獲取單元包括:
      [0131]第一獲取子單元,用于獲取所述目標(biāo)哈希值在所述哈希表中每i行的位置j;
      [0132]第二獲取子單元,用于獲取目標(biāo)位置hash[i][j]的鍵值與所述目標(biāo)鍵值相同的鍵值。
      [0133]優(yōu)選的,所述第二獲取單元包括:
      [0134]第三獲取子單元,用于獲取所述目標(biāo)位置hash[i ] [ j ]的數(shù)據(jù)偏移指針的數(shù)值;
      [0135]第一確定子單元,用于根據(jù)所述數(shù)據(jù)偏移指針的數(shù)值,確定所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置;
      [0136]第四獲取子單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)空間的長度以及所述首結(jié)點的位置,獲取第一鏈表數(shù)據(jù);
      [0137]第一判斷子單元,用于遍歷所述第一鏈表數(shù)據(jù),判斷所述第一鏈表數(shù)據(jù)的區(qū)域名與目標(biāo)數(shù)據(jù)是否一致,如果是,確定所述第一鏈表數(shù)據(jù)為目標(biāo)數(shù)據(jù)。
      [0138]優(yōu)選的,還包括,
      [0139]第一判斷模塊,用于判斷所述索引信息中是否包含目標(biāo)鍵值,如果是,將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲;如果否,將所述索引信息中的鍵值賦值為目標(biāo)鍵值,并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲。
      [0140]優(yōu)選的,所述第一判斷模塊包括:
      [0141]壓縮單元,用于按照預(yù)設(shè)字段壓縮所述多個區(qū)域的數(shù)據(jù),并計算每個所述區(qū)域的數(shù)據(jù)的目標(biāo)長度;
      [0142]第三獲取單元,用于獲取所述鏈表中長度大于所述目標(biāo)長度的結(jié)點,將壓縮后的數(shù)據(jù)存儲到所述鏈表的數(shù)據(jù)空間。
      [0143]優(yōu)選的,所述第一判斷模塊包括:
      [0144]第四獲取單元,用于獲取與所述目標(biāo)鍵值相關(guān)聯(lián)的目標(biāo)哈希值在所述哈希表中每i行的位置j ;
      [0145]賦值單元,用于將所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置賦值為目標(biāo)位置hash
      [i][j]的數(shù)據(jù)偏移指針的數(shù)值。
      [0146]本發(fā)明實施例提供的服務(wù)器的硬件結(jié)構(gòu)可如圖8所示,包括:處理器1,通信接口2,存儲器3和通信總線4;
      [0147]其中處理器1、通信接口 2、存儲器3通過通信總線4完成相互間的通信;
      [0148]可選的,通信接口2可以為通信模塊的接口,如GSM模塊的接口 ;
      [0149]處理器I,用于執(zhí)行程序;
      [0150]存儲器3,用于存放程序;
      [0151]程序可以包括程序代碼,所述程序代碼包括計算機操作指令。
      [0152]處理器I可能是一個中央處理器CPU,或者是特定集成電路ASIC(Applicati0nSpecific Integrated Circuit),或者是被配置成實施本發(fā)明實施例的一個或多個集成電路。
      [0153]存儲器3可能包含高速RAM存儲器,也可能還包括非易失性存儲器(non-volatilememory),例如至少一個磁盤存儲器。
      [0154]其中,程序可具體用于:
      [0155]存儲哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù);
      [0156]計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;
      [0157]確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;
      [0158]獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)。
      [0159]或,
      [0160]存儲哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù);
      [0161]判斷所述索引信息中是否包含目標(biāo)鍵值,如果是,將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲;如果否,將所述索引信息中的鍵值賦值為目標(biāo)鍵值,并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲。
      [0162]綜上所述,本發(fā)明實施例提供了一種數(shù)據(jù)讀取方法,應(yīng)用于數(shù)據(jù)服務(wù)器,其中,數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,其中,哈希表用于存儲鍵值的索引信息,鏈表用于存儲與索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù)。該數(shù)據(jù)讀取方法通過計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值;確定哈希表中與目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息;獲取與目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù),并將目標(biāo)數(shù)據(jù)發(fā)送至終端??梢?,本方案采用哈希加鏈表的方式,簡化了內(nèi)存管理邏輯,讀取速度快。
      [0163]本說明書中各個實施例采用遞進(jìn)的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
      [0164]專業(yè)人員還可以進(jìn)一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
      [0165]結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存儲器(R0M)、電可編程R0M、電可擦除可編程R0M、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
      [0166]對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
      【主權(quán)項】
      1.一種數(shù)據(jù)讀取方法,應(yīng)用于數(shù)據(jù)服務(wù)器,其特征在于,所述數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù),所述數(shù)據(jù)讀取方法包括: 計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值; 確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息; 獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)讀取方法,其特征在于, 所述鍵值的索引信息包括鍵值、所述鍵值的修改時間以及數(shù)據(jù)偏移指針,所述數(shù)據(jù)偏移指針為與所述鍵值對應(yīng)的區(qū)域的數(shù)據(jù)在所述鏈表中的位置; 所述確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息包括: 獲取所述索引信息中根據(jù)所述目標(biāo)哈希值得到的鍵值; 所述獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)包括: 獲取與所述鍵值對應(yīng)的數(shù)據(jù)偏移指針,根據(jù)所述數(shù)據(jù)偏移指針,確定所述目標(biāo)數(shù)據(jù)。3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)讀取方法,其特征在于,所述獲取所述索引信息中根據(jù)所述目標(biāo)哈希值得到的鍵值包括: 獲取所述目標(biāo)哈希值在所述哈希表中每i行的位置j; 獲取目標(biāo)位置hash [i][j]的鍵值與所述目標(biāo)鍵值相同的鍵值。4.根據(jù)權(quán)利要求3所述的數(shù)據(jù)讀取方法,其特征在于,所述獲取與所述鍵值對應(yīng)的數(shù)據(jù)偏移指針,根據(jù)所述數(shù)據(jù)偏移指針,確定所述目標(biāo)數(shù)據(jù)包括: 獲取所述目標(biāo)位置hash[ i ] [ j ]的數(shù)據(jù)偏移指針的數(shù)值; 根據(jù)所述數(shù)據(jù)偏移指針的數(shù)值,確定所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置; 根據(jù)預(yù)設(shè)的數(shù)據(jù)空間的長度以及所述首結(jié)點的位置,獲取第一鏈表數(shù)據(jù); 遍歷所述第一鏈表數(shù)據(jù),判斷所述第一鏈表數(shù)據(jù)的區(qū)域名與目標(biāo)數(shù)據(jù)是否一致,如果是,確定所述第一鏈表數(shù)據(jù)為目標(biāo)數(shù)據(jù)。5.一種數(shù)據(jù)寫入方法,應(yīng)用于數(shù)據(jù)服務(wù)器,其特征在于,所述數(shù)據(jù)服務(wù)器存儲有哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù),所述數(shù)據(jù)寫入方法包括: 判斷所述索引信息中是否包含目標(biāo)鍵值,如果所述索引信息中包含目標(biāo)鍵值,將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲;如果所述索引信息中沒有包含目標(biāo)鍵值,將所述索引信息中的鍵值賦值為目標(biāo)鍵值,并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲。6.根據(jù)權(quán)利要求5所述的數(shù)據(jù)寫入方法,其特征在于, 所述將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲包括: 按照預(yù)設(shè)字段壓縮所述多個區(qū)域的數(shù)據(jù),并計算每個所述區(qū)域的數(shù)據(jù)的目標(biāo)長度; 獲取所述鏈表中長度大于所述目標(biāo)長度的結(jié)點,將壓縮后的數(shù)據(jù)存儲到所述鏈表的數(shù)據(jù)空間。7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)寫入方法,其特征在于,當(dāng)所述索引信息中不否包含所述目標(biāo)鍵值,將所述索引信息中的鍵值賦值為目標(biāo)鍵值之后,所述并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲包括: 獲取與所述目標(biāo)鍵值相關(guān)聯(lián)的目標(biāo)哈希值在所述哈希表中每i行的位置j; 將所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置賦值為目標(biāo)位置hash[ i ][ j ]的數(shù)據(jù)偏移指針的數(shù)值。8.一種數(shù)據(jù)服務(wù)器,其特征在于,包括: 創(chuàng)建模塊,用于存儲哈希表和鏈表,所述哈希表用于存儲鍵值的索引信息,所述鏈表用于存儲與所述索引信息對應(yīng)的多個區(qū)域的數(shù)據(jù); 第一計算模塊,用于計算目標(biāo)鍵值對應(yīng)的目標(biāo)哈希值; 第一確定模塊,用于確定所述哈希表中與所述目標(biāo)哈希值相關(guān)聯(lián)的索引信息為目標(biāo)索引信息; 第一獲取模塊,用于獲取與所述目標(biāo)索引信息對應(yīng)的目標(biāo)數(shù)據(jù)。9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)服務(wù)器,其特征在于, 所述第一確定模塊包括第一獲取單元,用于獲取所述索引信息中根據(jù)所述目標(biāo)哈希值得到的鍵值; 第一獲取模塊包括第二獲取單元,用于獲取與所述鍵值對應(yīng)的數(shù)據(jù)偏移指針,根據(jù)所述數(shù)據(jù)偏移指針,確定所述目標(biāo)數(shù)據(jù)。10.根據(jù)權(quán)利要求9所述的數(shù)據(jù)服務(wù)器,其特征在于,所述第一獲取單元包括: 第一獲取子單元,用于獲取所述目標(biāo)哈希值在所述哈希表中每i行的位置j; 第二獲取子單元,用于獲取目標(biāo)位置hash [i][j]的鍵值與所述目標(biāo)鍵值相同的鍵值。11.根據(jù)權(quán)利要求10所述的數(shù)據(jù)服務(wù)器,其特征在于,所述第二獲取單元包括: 第三獲取子單元,用于獲取所述目標(biāo)位置hash [i][j]的數(shù)據(jù)偏移指針的數(shù)值; 第一確定子單元,用于根據(jù)所述數(shù)據(jù)偏移指針的數(shù)值,確定所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置; 第四獲取子單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)空間的長度以及所述首結(jié)點的位置,獲取第一鏈表數(shù)據(jù); 第一判斷子單元,用于遍歷所述第一鏈表數(shù)據(jù),判斷所述第一鏈表數(shù)據(jù)的區(qū)域名與目標(biāo)數(shù)據(jù)是否一致,如果是,確定所述第一鏈表數(shù)據(jù)為目標(biāo)數(shù)據(jù)。12.根據(jù)權(quán)利要求11所述的數(shù)據(jù)服務(wù)器,其特征在于,還包括, 第一判斷模塊,用于判斷所述索引信息中是否包含目標(biāo)鍵值,如果是,將所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲;如果否,將所述索引信息中的鍵值賦值為目標(biāo)鍵值,并對所述目標(biāo)鍵值對應(yīng)的多個區(qū)域的數(shù)據(jù)進(jìn)行存儲。13.根據(jù)權(quán)利要求12所述的數(shù)據(jù)服務(wù)器,其特征在于,所述第一判斷模塊包括: 壓縮單元,用于按照預(yù)設(shè)字段壓縮所述多個區(qū)域的數(shù)據(jù),并計算每個所述區(qū)域的數(shù)據(jù)的目標(biāo)長度; 第三獲取單元,用于獲取所述鏈表中長度大于所述目標(biāo)長度的結(jié)點,將壓縮后的數(shù)據(jù)存儲到所述鏈表的數(shù)據(jù)空間。14.根據(jù)權(quán)利要求13所述的數(shù)據(jù)服務(wù)器,其特征在于,所述第一判斷模塊包括: 第四獲取單元,用于獲取與所述目標(biāo)鍵值相關(guān)聯(lián)的目標(biāo)哈希值在所述哈希表中每i行的位置j; 賦值單元,用于將所述鍵值對應(yīng)的數(shù)據(jù)鏈表的首結(jié)點的位置賦值為目標(biāo)位置hash[ i ][j]的數(shù)據(jù)偏移指針的數(shù)值。
      【文檔編號】G06F17/30GK106096023SQ201610473734
      【公開日】2016年11月9日
      【申請日】2016年6月24日
      【發(fā)明人】廖錫光
      【申請人】騰訊科技(深圳)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1