亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

全文檢索中倒排索引及其追加數(shù)據(jù)的保存方法及存儲(chǔ)裝置的制作方法

文檔序號(hào):6386417閱讀:327來源:國(guó)知局
專利名稱:全文檢索中倒排索引及其追加數(shù)據(jù)的保存方法及存儲(chǔ)裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明屬于數(shù)據(jù)存儲(chǔ)領(lǐng)域,尤其是涉及一種在全文檢索中倒排索引及其追加數(shù)據(jù)的保存方法及存儲(chǔ)裝置
背景技術(shù)
在關(guān)系數(shù)據(jù)庫系統(tǒng)里,全文索引是檢索文檔數(shù)據(jù)最有效率的方式之一,在當(dāng)前的網(wǎng)絡(luò)環(huán)境下,信息量和用戶量都成爆炸性的增長(zhǎng),全文索引成為信息檢索系統(tǒng)的主要手段之一,倒排索引是全文檢索系統(tǒng)的核心部分,其存儲(chǔ)結(jié)構(gòu)對(duì)全文檢索系統(tǒng)性能也有很大的影響。倒排索引(英語Inverted index),也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來存儲(chǔ)在全文搜索下某個(gè)單詞在一個(gè)文檔或者一組文檔中的存儲(chǔ)位置的映射。它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)。通過倒排索引,可以根據(jù)單詞快速獲取包含這個(gè)單詞的文檔列表。全文索引倒排文檔數(shù)據(jù)是由Term ID對(duì)應(yīng)的一組文檔編號(hào)和在文檔中的偏移組成,其表現(xiàn)形式為Term ID—> {〈doc ID, {offset}},其中Term ID是斷詞器劃分的最小索引單元,在中文全文檢索中一般為字、詞、英文、數(shù)字串和幾種形式的組合,具有以下特點(diǎn)1.不同Term對(duì)應(yīng)倒排數(shù)據(jù)長(zhǎng)度相差很大,常見的字如“的”、“地”等字符往往出現(xiàn)頻率相當(dāng)?shù)母?,也有僅出現(xiàn)一次的特殊字符串。2.全文索引中詞匯量巨大,往往一個(gè)全文檢索庫會(huì)擁有千萬個(gè)詞匯,每一個(gè)詞匯都作為一個(gè)檢索單元,會(huì)占用大量的存儲(chǔ)空間全文索引倒排數(shù)據(jù)的存儲(chǔ)一般有兩種一、采用經(jīng)驗(yàn)數(shù)據(jù)把已知詞典按詞頻劃分為中、高、低幾檔的方式,每檔詞頻采用不同的數(shù)據(jù)塊大小存儲(chǔ),存儲(chǔ)高頻詞的每塊數(shù)據(jù)較大,反之最低頻率塊最小。這種方式的好處是磁盤浪費(fèi)較少,讀取效率有保障,缺點(diǎn)是一旦實(shí)際數(shù)據(jù)與經(jīng)驗(yàn)數(shù)據(jù)不符或者出現(xiàn)新的詞匯時(shí),詞頻發(fā)生較大變化,則出現(xiàn)高頻詞空間浪費(fèi),低頻詞詞鏈超長(zhǎng)造成讀取效率低。二、采用劃分大數(shù)據(jù)單元的方式,如每IGB數(shù)據(jù)為一個(gè)單元,每個(gè)單元中所有倒排文檔數(shù)據(jù)按詞條編號(hào)、文檔編號(hào)、偏移量(TermID、Doc ID、Offset)排序,在索引完成之前把所有的數(shù)據(jù)單元進(jìn)行數(shù)據(jù)合并為一個(gè)最終單元。這種方式的優(yōu)點(diǎn)是空間浪費(fèi)為0,缺點(diǎn)是最終的數(shù)據(jù)排序需要一倍磁盤剩余空間,造成磁盤空間利用率為50%,合并的時(shí)間較長(zhǎng)。

發(fā)明內(nèi)容
本發(fā)明要解決的問題是提供一種在全文檢索系統(tǒng)中的高效保存索引的方法,可以充分提高磁盤空間利用率。為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是一種在全文檢索系統(tǒng)中的高效保存索引的方法,包括I)比較索引單元數(shù)據(jù)長(zhǎng)度和預(yù)設(shè)的閥值K的大小關(guān)系;
2)如果索引單元數(shù)據(jù)長(zhǎng)度小于K,將索引單元數(shù)據(jù)全部存入B樹中;3)如果索引單元數(shù)據(jù)長(zhǎng)度等于K,將索引單元數(shù)據(jù)從開始部分至K的部分存入索引單元數(shù)據(jù)數(shù)據(jù)塊;4)如果大于K,則比較索引單元數(shù)據(jù)長(zhǎng)度和η*Κ (η=2, 3,……)的大小關(guān)系,并按照下列方式進(jìn)行存儲(chǔ)1.如果索引單元數(shù)據(jù)長(zhǎng)度大于(η_1)*Κ且小于η*Κ,將索引單元數(shù)據(jù)從開始部分至η*Κ部分存入索引單元數(shù)據(jù)塊,將剩余部分存入B樹中;2.如果索引單元數(shù)據(jù)長(zhǎng)度等于η*Κ,將所有索引單元數(shù)據(jù)按次序存入索引單元數(shù) 據(jù)塊。進(jìn)一步的,所述的B樹可以存儲(chǔ)至少兩個(gè)長(zhǎng)度小于K值或者長(zhǎng)度大于K值存儲(chǔ)在塊設(shè)備之后的剩余數(shù)據(jù)的索引單元數(shù)據(jù)。進(jìn)一步的,所述的B樹為B+樹的一種變形,所述的B+樹的一種變形為去掉葉子節(jié)點(diǎn)中保存的指向兄弟節(jié)點(diǎn)的指針的B+樹。根據(jù)本發(fā)明的另一方面,本發(fā)明還提供了一種高效保存索引方法的存儲(chǔ)裝置,包括存儲(chǔ)數(shù)據(jù)塊單元,用來存儲(chǔ)固定長(zhǎng)度的整數(shù)倍的索引單元數(shù)據(jù);B樹存儲(chǔ)頁單元,用來存儲(chǔ)索引單元數(shù)據(jù)不足K的剩余部分。進(jìn)一步的,所述的B樹為B+樹的一種變形,所述的B+樹的一種變形為去掉葉子節(jié)點(diǎn)中保存的指向兄弟節(jié)點(diǎn)的指針的B+樹。根據(jù)本發(fā)明所提供的一種高效保存索引方法的存儲(chǔ)裝置的追加全文索引數(shù)據(jù)的存儲(chǔ)方法I)計(jì)算原B樹中的索引單元數(shù)據(jù)與追加的索引單元數(shù)據(jù)之和;2)如果索引單元數(shù)據(jù)長(zhǎng)度之和小于η*Κ且大于(η+1)*Κ(η=2,3……),將B樹存儲(chǔ)的部分取出并將索引單元數(shù)據(jù)從B樹存儲(chǔ)的部分至η*Κ的部分存入索引單元數(shù)據(jù)數(shù)據(jù)塊,將剩余索引單元數(shù)據(jù)存入B樹中;3)如果索引單元數(shù)據(jù)之和等于η*Κ,將B樹存儲(chǔ)的部分取出并將索引單元數(shù)據(jù)從B樹存儲(chǔ)部分至η*Κ的部分存入索引單元數(shù)據(jù)數(shù)據(jù)塊;4)如果索引單元數(shù)據(jù)之和小于K,則將追加部分依次存入原B樹存儲(chǔ)部分。由于采用上述技術(shù)方案,能夠有效的提高倒排文檔的全文索引的存儲(chǔ)效率,減少了磁盤空間的浪費(fèi),有效提高了數(shù)據(jù)讀取速率;能夠方便實(shí)現(xiàn)寫時(shí)復(fù)制(Copy On Write)機(jī)制,進(jìn)而提高了數(shù)據(jù)安全性和讀取數(shù)據(jù)的并發(fā)指標(biāo)。


圖1是本發(fā)明的高效保存索引方法及追加數(shù)據(jù)的保存方法流程示意2是本發(fā)明中一個(gè)實(shí)例的存儲(chǔ)示意3是本發(fā)明實(shí)例中實(shí)現(xiàn)寫時(shí)復(fù)制機(jī)制的示意圖
具體實(shí)施例方式在本發(fā)明的一個(gè)實(shí)施運(yùn)用場(chǎng)景中,根據(jù)全文建立起相應(yīng)的全文索引倒排文檔數(shù)據(jù),其表示形式為Term ID (詞條編號(hào))一> {〈doc ID (文檔編號(hào)),{offset}(偏移量)},在本實(shí)例中采用B樹結(jié)合塊文件的方式來存儲(chǔ)Key-Value數(shù)據(jù),Key為詞條編號(hào),Value為倒排文檔數(shù)據(jù),是變長(zhǎng)數(shù)據(jù),當(dāng)創(chuàng)建索引數(shù)據(jù)時(shí),Value的數(shù)據(jù)不斷追加,當(dāng)長(zhǎng)度超過預(yù)設(shè)的閾
值n*K (n=l, 2, 3......)時(shí),從開始部分提取Value的長(zhǎng)度為n*K的數(shù)據(jù)存儲(chǔ)到塊單元,對(duì)于
余下的小于k的索引數(shù)據(jù),塊單元采用定長(zhǎng)數(shù)據(jù)保存對(duì)應(yīng)TermId的倒排文檔數(shù)據(jù),每個(gè)數(shù)據(jù)塊與B樹中的相對(duì)應(yīng)key值部分組成一個(gè)鏈。從而形成塊文件數(shù)據(jù)保存倒排文檔的成塊部分,B樹中保存倒排文檔的碎塊。這里的的閥值里K值的設(shè)定是參考存儲(chǔ)倒排文檔數(shù)據(jù)的存儲(chǔ)器性能來確定,一般都采用計(jì)算機(jī)存儲(chǔ)的最小單元,如32k,64k等,方便磁盤陣列存儲(chǔ)數(shù)據(jù)。如圖2所示,假設(shè)全文中共有斷詞器所劃定的三個(gè)索引最小單元,分別編號(hào)為Term ID (I),Term ID (2)及Term ID (3),其中Term ID (I)是一個(gè)在全文中只出現(xiàn)過極少的次數(shù)的字符串,當(dāng)將其倒排文檔索引進(jìn)行存儲(chǔ)時(shí),如圖中21所示,Term ID (I)的倒排文檔索引的數(shù)據(jù)長(zhǎng)度并未超過K,即Term ID (I )-value〈k,將其索引數(shù)據(jù)存入到B樹存儲(chǔ)頁中。Term ID (2)是另一個(gè)字符串,在全文中出現(xiàn)的次數(shù)較多,當(dāng)將其倒排文檔索引進(jìn)行存儲(chǔ)時(shí),如圖中22所示,Term ID (2)的倒排文檔索引的數(shù)據(jù)長(zhǎng)度等于預(yù)設(shè)的閥值K,即Term ID (I) -value=nk (n=l, 2, 3......),同樣將其索引數(shù)據(jù)存入到存儲(chǔ)塊單元。Term ID (3)是在全文索引中的另一個(gè)字符串,在全文中經(jīng)常出現(xiàn),當(dāng)將其倒排文檔索引進(jìn)行存儲(chǔ)時(shí),如圖23所示,Term ID (2)的倒排文檔索引的數(shù)據(jù)長(zhǎng)度等于預(yù)設(shè)的閥值K,即(n+l)*k>Term ID (I )-value>n*k,從開始部分提取Value的長(zhǎng)度為K的數(shù)據(jù)存儲(chǔ)到存儲(chǔ)塊單元,剩余部分存入B樹中,數(shù)據(jù)塊與B樹中的相對(duì)應(yīng)key值部分組成一個(gè)鏈。在實(shí)際中,經(jīng)常會(huì)有倒排文檔數(shù)據(jù)追加的情況發(fā)生,根據(jù)倒排文檔數(shù)據(jù)不同長(zhǎng)度的情況,仍然有不同的對(duì)應(yīng)存儲(chǔ)方法,仍以上一實(shí)例中Term ID(1)、來舉例說明,Term ID
(I)有少量的追加數(shù)據(jù),將Term ID (I)中B樹存儲(chǔ)頁中的索引數(shù)據(jù)長(zhǎng)度與追加數(shù)據(jù)長(zhǎng)度相力口,如果相加后的Term ID (I )-value=nk,則將原B樹存儲(chǔ)頁中的索引數(shù)據(jù)取出,從B樹存儲(chǔ)頁中的索引數(shù)據(jù)的部和追加數(shù)據(jù)依次存入數(shù)據(jù)塊,并刪除B樹鍵值為TermID的數(shù)據(jù);如
果相加后的(n+l)K(n=l, 2, 3......) >Term ID (I) -value>nk (n=l, 2, 3......),則將原 B 樹存儲(chǔ)
頁中的索引數(shù)據(jù)取出,并將原B樹存儲(chǔ)頁中的索引數(shù)據(jù)和追加數(shù)據(jù)中從開始部分到與原有索引數(shù)據(jù)相加到nk的部分按順序存入存儲(chǔ)塊中,并將剩余的追加數(shù)據(jù)更新到B樹中相同的TermID中;如果追加的索引單元數(shù)據(jù)與原有的B樹存儲(chǔ)的索引單元數(shù)據(jù)長(zhǎng)度相加仍然小于K,則將追加數(shù)據(jù)依次存入B樹存儲(chǔ)頁內(nèi)。根據(jù)大數(shù)據(jù)的長(zhǎng)尾效應(yīng),全文檢索中的倒排文檔中大部分詞條對(duì)應(yīng)的數(shù)據(jù)非常少,不足以達(dá)到塊文件單位大小,借助B樹頁保存Key-變長(zhǎng)Value的機(jī)制,在一個(gè)頁內(nèi)可以保存多個(gè)Key的倒排文檔的零星數(shù)據(jù),而B樹的缺省磁盤利用率為75%,則總的磁盤利用率為(B樹文件大小X75% +塊文件大小)/ (B樹文件大小+塊文件大小)當(dāng)塊文件比較大時(shí),總磁盤利用率趨向100% (在1000萬新聞型文檔測(cè)試數(shù)據(jù)為99. 5%)0B樹索引的頁面和塊文件的塊單元都是定長(zhǎng)數(shù)據(jù),方便進(jìn)行直接定位和使用緩存算法,其中B樹的頁面大小=4X塊單元大小。在實(shí)際項(xiàng)目中可以綜合考慮可用于Cache的內(nèi)存大小、磁盤讀寫效率和其他因素,最終確定B樹的Page大小和塊文件的每個(gè)塊單元的大小。塊文件可以利用系統(tǒng)空閑時(shí)間進(jìn)行整理,把同一 Term的倒排數(shù)據(jù)放到連續(xù)的磁盤空間。對(duì)于倒排數(shù)據(jù)小于一個(gè)塊單元的詞條,每次讀取耗時(shí)就是讀取B樹的耗時(shí),其讀磁盤次數(shù)為B樹深度L次,對(duì)于倒排數(shù)據(jù)超過一個(gè)塊單元的詞條,每次完整讀取數(shù)據(jù)的成本是讀取一次B樹和讀取一次塊數(shù)據(jù),考慮到全文索引中常用與或等邏輯運(yùn)算,倒排數(shù)據(jù)一般是隨機(jī)讀取,則能充分利用塊文件每塊的定長(zhǎng)特性,最終有效的提高數(shù)據(jù)讀取效率。全文索引實(shí)時(shí)創(chuàng)建索引時(shí),產(chǎn)生倒排數(shù)據(jù)的追加需求,B樹引起為層狀數(shù)據(jù)特性,能夠方便的實(shí)現(xiàn)寫時(shí)復(fù)制機(jī)制,由于B樹是一個(gè)樹狀結(jié)構(gòu),修改時(shí)B樹每個(gè)頁修改之前就先復(fù)制一份,對(duì)直接或者間接引用該頁的存儲(chǔ)頁也創(chuàng)建一個(gè)復(fù)制,所有的修改在復(fù)制上進(jìn)行修改,從而形成了修改前和修改后兩個(gè)版本,在修改前版本上進(jìn)行讀操作,在修改后版本上進(jìn)行寫操作,兩者互不影響,并提高了并發(fā)性能。塊存儲(chǔ)也是如此,數(shù)據(jù)僅在文件尾追加,訪問時(shí)同樣可以實(shí)現(xiàn)讀寫分離,互不影響,提高并發(fā)。在數(shù)據(jù)提交成功時(shí),寫版本轉(zhuǎn)換為讀版本,如果提交失敗,則寫版本放棄,從而保證了數(shù)據(jù)的完整性。如圖3所示,讀寫雙版本能夠完成實(shí)時(shí)的追加數(shù)據(jù)并提高邊建便搜的并發(fā)性能。為了方便實(shí)現(xiàn)COW機(jī)制,B樹采用B+樹的變形,其與B+樹的區(qū)別在于去掉了葉子節(jié)點(diǎn)中保存的指向兄弟節(jié)點(diǎn)的指針,否則會(huì)出現(xiàn)發(fā)生修改時(shí)需要復(fù)制整個(gè)B樹的現(xiàn)象。以上對(duì)本發(fā)明的一個(gè)實(shí)施例進(jìn)行了詳細(xì)說明,但所述內(nèi)容僅為本發(fā)明的較佳實(shí)施例,不能被認(rèn)為用于限定本發(fā)明的實(shí)施范圍。凡依本發(fā)明申請(qǐng)范圍所作的均等變化與改進(jìn)等,均應(yīng)仍歸屬于本發(fā)明的專利涵蓋范圍之內(nèi)。
權(quán)利要求
1. 一種在全文檢索系統(tǒng)中的高效保存倒排索引的方法,包括1)比較索引單元數(shù)據(jù)長(zhǎng)度和預(yù)設(shè)的閥值K的大小關(guān)系;如果索引單元數(shù)據(jù)長(zhǎng)度小于K, 將索引單元數(shù)據(jù)全部存入B樹中;2)如果索引單元數(shù)據(jù)長(zhǎng)度小于K,將索引單元數(shù)據(jù)全部存入B樹中;3)如果索引單元數(shù)據(jù)長(zhǎng)度等于K,將索引單元數(shù)據(jù)從開始部分至K的部分存入索引單元數(shù)據(jù)數(shù)據(jù)塊;4)如果大于K,則比較索引單元數(shù)據(jù)長(zhǎng)度和η*Κ(η=2, 3,……)的大小關(guān)系,并按照下列方式進(jìn)行存儲(chǔ)1.如果索引單元數(shù)據(jù)長(zhǎng)度大于(η-1)*Κ且小于η*Κ,將索引單元數(shù)據(jù)從開始部分至 η*Κ部分存入索引單元數(shù)據(jù)塊,將剩余部分存入B樹中;2.如果索引單元數(shù)據(jù)長(zhǎng)度等于η*Κ,將所有索引單元數(shù)據(jù)按次序存入索引單元數(shù)據(jù)塊。
2.根據(jù)權(quán)利要求1所述的高效保存索引的方法,其特征在于所述的B樹為B+樹的一種變形,所述的B+樹的一種變形為去掉葉子節(jié)點(diǎn)中保存的指向兄弟節(jié)點(diǎn)的指針的B+樹。
3.一種根據(jù)權(quán)利要求1所述高效保存索引方法的存儲(chǔ)裝置,包括存儲(chǔ)數(shù)據(jù)塊單元,用來存儲(chǔ)固定長(zhǎng)度的整數(shù)倍的索引單元數(shù)據(jù);B樹存儲(chǔ)頁單元,用來存儲(chǔ)索引單元數(shù)據(jù)不足K的剩余部分。
4.根據(jù)權(quán)利要求4所述的存儲(chǔ)裝置,其特征在于所述的B樹存儲(chǔ)頁單元可用來存儲(chǔ)至少兩個(gè)長(zhǎng)度小于K值或者長(zhǎng)度大于K值存儲(chǔ)在塊設(shè)備之后的剩余數(shù)據(jù)的索引單元數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的存儲(chǔ)裝置,其特征在于所述的B樹為B+樹的一種變形,所述的B+樹的一種變形為去掉葉子節(jié)點(diǎn)中保存的指向兄弟節(jié)點(diǎn)的指針的B+樹。
6.一種如權(quán)利要求4所述高效保存索引方法的存儲(chǔ)裝置的數(shù)據(jù)追加存儲(chǔ)方法,包括1)計(jì)算原B樹中的索引單元數(shù)據(jù)長(zhǎng)度與追加的索引單元數(shù)據(jù)長(zhǎng)度之和;2)如果索引單元數(shù)據(jù)長(zhǎng)度之和小于η*Κ且大于(η+1)*Κ (η=2, 3……),將B樹存儲(chǔ)的部分取出并將索引單元數(shù)據(jù)從B樹存儲(chǔ)的部分至η*Κ的部分存入索引單元數(shù)據(jù)數(shù)據(jù)塊,將剩余索引單元數(shù)據(jù)存入B樹中;3)如果索引單元數(shù)據(jù)之和等于η*Κ,將B樹存儲(chǔ)的部分取出并將索引單元數(shù)據(jù)從B樹存儲(chǔ)部分至η*Κ的部分存入索引單元數(shù)據(jù)數(shù)據(jù)塊;4)如果索引單元數(shù)據(jù)之和小于K,則將追加部分依次存入原B樹存儲(chǔ)部分。
全文摘要
本發(fā)明提供了一種全文檢索系統(tǒng)中的高效保存倒排索引的方法,包括檢測(cè)索引單元數(shù)據(jù)長(zhǎng)度是否大于閥值K;如果索引單元數(shù)據(jù)大于n*K且小于(n+1)*K(n為自然數(shù)),將索引單元數(shù)據(jù)從開始部分至n*K的部分存入索引單元數(shù)據(jù)數(shù)據(jù)塊,將剩余索引單元數(shù)據(jù)存入B樹中;如果索引單元數(shù)據(jù)等于n*K,將索引單元數(shù)據(jù)從開始部分至n*K的部分存入索引單元數(shù)據(jù)數(shù)據(jù)塊;如果索引單元數(shù)據(jù)小于K,將索引單元數(shù)據(jù)全部存入B樹中。本發(fā)明的有益效果是能夠有效的提高倒排文檔的全文索引的存儲(chǔ)效率,提高了數(shù)據(jù)讀取速率,能夠方便實(shí)現(xiàn)寫時(shí)復(fù)制(Copy On Write)機(jī)制,進(jìn)而提高了數(shù)據(jù)安全性和讀取數(shù)據(jù)的并發(fā)指標(biāo)。
文檔編號(hào)G06F17/30GK103020299SQ201210591989
公開日2013年4月3日 申請(qǐng)日期2012年12月29日 優(yōu)先權(quán)日2012年12月29日
發(fā)明者張學(xué), 范振勇, 崔維力, 武新, 趙偉 申請(qǐng)人:天津南大通用數(shù)據(jù)技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1