專利名稱:一種面向海量數(shù)據(jù)檢索的多級桶哈希索引方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種面向海量數(shù)據(jù)檢索的多級桶哈希索引方法,屬于數(shù)據(jù)存儲、檢索
技術(shù)領(lǐng)域。
背景技術(shù):
檢索效率是海量數(shù)據(jù)存儲、服務(wù)應(yīng)用系統(tǒng)的一個重要指標(biāo),索引技術(shù)在數(shù)據(jù)空間 組織和檢索中具有重要的作用,目前大型數(shù)據(jù)庫和數(shù)據(jù)存儲應(yīng)用系統(tǒng)都支持哈希表索引技 術(shù),數(shù)據(jù)來源迅速增長,如何快捷準(zhǔn)確地獲取感興趣的信息,成為人們關(guān)注的主要問題,因 此對海量等特性對檢索技術(shù)提出了更高的要求,各種信息檢索、過濾、提取技術(shù)逐漸成為研 究的重點。哈希索引的一個非常重要的優(yōu)點是檢索效率不隨數(shù)據(jù)量的增長而增加,影響哈 希性能的主要因素是磁盤讀寫次數(shù)和哈希沖突問題。目前哈希索引主要有兩種方式,靜態(tài) 哈希索引和動態(tài)哈希索引。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)的不足,本發(fā)明提供一種面向海量數(shù)據(jù)檢索的多級桶哈希索引方 法。 —種面向海量數(shù)據(jù)檢索的多級桶哈希索引方法,包括哈希索引的創(chuàng)建方法和檢索
方法,哈希索引的創(chuàng)建方法如下 1)對創(chuàng)建索引的信息確定一個關(guān)鍵字; 2)在計算機內(nèi)存中建立索引桶的映射表,即關(guān)鍵字的哈希值h和索引桶在磁盤上 的存儲位置C ; 3)判斷索引桶是否在磁盤上,即判斷存儲位置的值是否等于8個字節(jié)的最大值; 如果等于8個字節(jié)的最大值,說明磁盤上沒有已存儲的索引桶,繼續(xù)步驟4);如果不等于8
個字節(jié)的最大值,說明磁盤上已有已存儲的索引桶,轉(zhuǎn)步驟(7); 4)磁盤上沒有已存儲的索引桶時,在磁盤上創(chuàng)建一個新的磁盤塊d并存儲信息, 建立一個新的索引桶,確定新的索引桶在磁盤塊d內(nèi)的序號;
5)更新映射表,使c = d;
6)更新磁盤,反復(fù)存儲; 7)磁盤上已有已存儲的索引桶時,確定該索引桶在磁盤塊內(nèi)的序號; 8)判斷該索引桶是否有足夠的空間存儲新的關(guān)鍵字,如果有足夠的空間,轉(zhuǎn)步驟
(6);如果沒有足夠的空間,關(guān)鍵字在該索引桶溢出,存儲到磁盤塊內(nèi)溢出桶;如果磁盤塊
內(nèi)溢出桶也沒有足夠的空間,關(guān)鍵字在磁盤塊內(nèi)溢出桶溢出,存儲到全局溢出桶。 哈希索引的檢索方法如下 1)對待檢索索引的信息確定一個關(guān)鍵字; 2)讀映射表; 3)判斷待檢索索引桶是否在磁盤上,即判斷存儲位置的值是否等于8個字節(jié)的最
3大值;如果等于8個字節(jié)的最大值,說明磁盤上沒有已存儲的待檢索索引桶,檢索結(jié)束;如 果不等于8個字節(jié)的最大值,說明磁盤上已有已存儲的待檢索索引桶,轉(zhuǎn)步驟(4);
4)如果不等于8個字節(jié)的最大值,從映射表內(nèi)獲取待檢索索引桶號和該索引桶所 在磁盤塊的磁盤塊號; 5)桶內(nèi)檢索,如果檢索到,則檢索結(jié)束;如果檢索不到,在磁盤塊內(nèi)溢出桶檢索;
6)在磁盤塊內(nèi)溢出桶檢索到,檢索結(jié)束;如果在磁盤塊內(nèi)溢出桶檢索不到,則在 全局溢出桶檢索,檢索結(jié)束。
當(dāng)存儲和檢索海量數(shù)據(jù)時,索引文件本身較大,哈希索引占用空間較大,為了盡量
減小哈希索引文件,提高磁盤利用效率和文件讀性能,本發(fā)明提供了桶映射表,避免了哈希
索引文件中的空桶;數(shù)據(jù)檢索時,為了減少磁盤讀次數(shù),本發(fā)明提供了緩存管理,提高了內(nèi)
存的利用率,當(dāng)桶的數(shù)據(jù)在內(nèi)存中時,直接從內(nèi)存取數(shù)據(jù),避免了磁盤的讀操作;為了減少
哈希沖突引起的性能下降,本發(fā)明提供了基于磁盤塊結(jié)構(gòu)的塊內(nèi)溢出桶和全局溢出桶,減
少了沖突引起的磁盤讀寫操作,提高了效率,實驗證明本發(fā)明具有很高的實用價值。 本發(fā)明能充分利用磁盤和內(nèi)存,并減少磁盤讀寫次數(shù),提高海量數(shù)據(jù)存儲、檢索效率。
圖l為索引創(chuàng)建流程圖。
圖2為索引檢索流程圖。
具體實施例方式
實施例 —種面向海量數(shù)據(jù)檢索的多級桶哈希索引方法,包括哈希索引的創(chuàng)建方法和檢索
方法,哈希索引的創(chuàng)建方法如下 1)對創(chuàng)建索引的信息確定一個關(guān)鍵字; 2)在計算機內(nèi)存中建立索引桶的映射表,即關(guān)鍵字的哈希值h和索引桶在磁盤上 的存儲位置c ; 3)判斷索引桶是否在磁盤上,即判斷存儲位置的值是否等于8個字節(jié)的最大值; 如果等于8個字節(jié)的最大值,說明磁盤上沒有已存儲的索引桶,繼續(xù)步驟4);如果不等于8 個字節(jié)的最大值,說明磁盤上已有已存儲的索引桶,轉(zhuǎn)步驟(7); 4)磁盤上沒有已存儲的索引桶時,在磁盤上創(chuàng)建一個新的磁盤塊d并存儲信息, 建立一個新的索引桶,確定新的索引桶在磁盤塊d內(nèi)的序號;
5)更新映射表,使c = d;
6)更新磁盤,反復(fù)存儲; 7)磁盤上已有已存儲的索引桶時,確定該索引桶在磁盤塊內(nèi)的序號; 8)判斷該索引桶是否有足夠的空間存儲新的關(guān)鍵字,如果有足夠的空間,轉(zhuǎn)步驟
(6);如果沒有足夠的空間,關(guān)鍵字在該索引桶溢出,存儲到磁盤塊內(nèi)溢出桶;如果磁盤塊
內(nèi)溢出桶也沒有足夠的空間,關(guān)鍵字在磁盤塊內(nèi)溢出桶溢出,存儲到全局溢出桶。 哈希索引的檢索方法如下
1)對待檢索索引的信息確定一個關(guān)鍵字;
2)讀映射表; 3)判斷待檢索索引桶是否在磁盤上,即判斷存儲位置的值是否等于8個字節(jié)的最 大值;如果等于8個字節(jié)的最大值,說明磁盤上沒有已存儲的待檢索索引桶,檢索結(jié)束;如 果不等于8個字節(jié)的最大值,說明磁盤上已有已存儲的待檢索索引桶,轉(zhuǎn)步驟(4);
4)如果不等于8個字節(jié)的最大值,從映射表內(nèi)獲取待檢索索引桶號和該索引桶所 在磁盤塊的磁盤塊號; 5)桶內(nèi)檢索,如果檢索到,則檢索結(jié)束;如果檢索不到,在磁盤塊內(nèi)溢出桶檢索;
6)在磁盤塊內(nèi)溢出桶檢索到,檢索結(jié)束;如果在磁盤塊內(nèi)溢出桶檢索不到,則在 全局溢出桶檢索,檢索結(jié)束。
權(quán)利要求
一種面向海量數(shù)據(jù)檢索的多級桶哈希索引方法,其特征在于,方法包括哈希索引的創(chuàng)建方法和檢索方法,哈希索引的創(chuàng)建方法如下1)對創(chuàng)建索引的信息確定一個關(guān)鍵字;2)在計算機內(nèi)存中建立索引桶的映射表,即關(guān)鍵字的哈希值h和索引桶在磁盤上的存儲位置c;3)判斷索引桶是否在磁盤上,即判斷存儲位置的值是否等于8個字節(jié)的最大值;如果等于8個字節(jié)的最大值,說明磁盤上沒有已存儲的索引桶,繼續(xù)步驟4);如果不等于8個字節(jié)的最大值,說明磁盤上已有已存儲的索引桶,轉(zhuǎn)步驟(7);4)磁盤上沒有已存儲的索引桶時,在磁盤上創(chuàng)建一個新的磁盤塊d并存儲信息,建立一個新的索引桶,確定新的索引桶在磁盤塊d內(nèi)的序號;5)更新映射表,使c=d;6)更新磁盤,反復(fù)存儲;7)磁盤上已有已存儲的索引桶時,確定該索引桶在磁盤塊內(nèi)的序號;8)判斷該索引桶是否有足夠的空間存儲新的關(guān)鍵字,如果有足夠的空間,轉(zhuǎn)步驟(6);如果沒有足夠的空間,關(guān)鍵字在該索引桶溢出,存儲到磁盤塊內(nèi)溢出桶;如果磁盤塊內(nèi)溢出桶也沒有足夠的空間,關(guān)鍵字在磁盤塊內(nèi)溢出桶溢出,存儲到全局溢出桶。哈希索引的檢索方法如下1)對待檢索索引的信息確定一個關(guān)鍵字;2)讀映射表;3)判斷待檢索索引桶是否在磁盤上,即判斷存儲位置的值是否等于8個字節(jié)的最大值;如果等于8個字節(jié)的最大值,說明磁盤上沒有已存儲的待檢索索引桶,檢索結(jié)束;如果不等于8個字節(jié)的最大值,說明磁盤上已有已存儲的待檢索索引桶,轉(zhuǎn)步驟(4);4)如果不等于8個字節(jié)的最大值,從映射表內(nèi)獲取待檢索索引桶號和該索引桶所在磁盤塊的磁盤塊號;5)桶內(nèi)檢索,如果檢索到,則檢索結(jié)束;如果檢索不到,在磁盤塊內(nèi)溢出桶檢索;6)在磁盤塊內(nèi)溢出桶檢索到,檢索結(jié)束;如果在磁盤塊內(nèi)溢出桶檢索不到,則在全局溢出桶檢索,檢索結(jié)束。
全文摘要
一種面向海量數(shù)據(jù)檢索的多級桶哈希索引方法,涉及海量數(shù)據(jù)存儲領(lǐng)域。其特征在于(1)提供桶映射表,用于減小哈希索引文件在磁盤上的占用空間(2)哈希索引采用了多級桶,磁盤塊的大小是扇區(qū)大小的整數(shù)倍,每個磁盤塊有一個或多個基本桶,可以有塊內(nèi)溢出桶,具有全局溢出桶(3)提供索引文件的數(shù)據(jù)緩存結(jié)構(gòu),提供了數(shù)據(jù)緩存映射表,數(shù)據(jù)緩存的管理使用緩存映射表上的雙向鏈表實現(xiàn)。本區(qū) 明通過映射表減小索引文件在磁盤上的占用空間,磁盤塊是磁盤扇區(qū)大小的整數(shù)倍,并通過數(shù)據(jù)緩存結(jié)構(gòu)減少了磁盤讀寫次數(shù),提高了內(nèi)存利用效率和數(shù)據(jù)的檢索效率。
文檔編號G06F17/30GK101782922SQ20091025610
公開日2010年7月21日 申請日期2009年12月29日 優(yōu)先權(quán)日2009年12月29日
發(fā)明者劉江, 王希常, 馬磊 申請人:山東山大鷗瑪軟件有限公司