然後發現估計半年前某師兄參加某個面試,就說到了倒排檔案。
一、何為倒排檔案
二、倒排檔案應用舉例
1)基於屬性的倒排
在乙個帶結構的記錄檔案中,如資料庫檔案等。檔案裡存放的都是一條接著一條的整齊的記錄,每個記錄又可分為乙個個的屬性。檢索過程往往要求找出,在某個或者某些屬性上滿足一定條件的記錄集合。像這一類的檢索我們稱為基於屬性的檢索。
比如北大裡某次活動的學生報名登記表檔案,部分資訊如下:
001 ***142 張三 男 18 元培
002 ***205 李四 女 17 哲學
003 ***187 王五 男 19 生物
004 ***325 趙六 女 18 元培
而我們利用倒排檔案來實現上述非關鍵碼的查詢,就能大大提高速度。對於前面的情況設計倒排表如下:
男 001,003
女 002,004
1617 002
18 001,004
19 003
20元培 001,004
生物 003
哲學 002
由此可見,有了倒排檔案,我們就可以將查詢變成幾個集合之間的交,並等運算,得到的最後結果即時我們要求的,這樣不用挨個讀取記錄,且參與運算的資料大大減少,基本可以不用多次讀寫磁碟而直接在記憶體裡進行運算,大大提高了檢索速度。 有了這樣的倒排表後,前面的查詢就很容易了。如找出院系為「元培」的所有學生(簡單查詢),可以在院系倒排表中,取出屬性值為「元培」的那一行倒排表,它裡面包含的所有編號對應的記錄就是所求的記錄。又如找出年齡在18到20之間的所有學生(範圍查詢),我們可以把年齡倒排表中18,19和20這三行所對應的三個編號集合做並運算,最後結果就是我們要找的。而找出年齡在19歲以上的所有男生(邏輯查詢),這個我們找出19歲以上的所有編號集合,用並運算合在一起,再同性別倒排表中的男生那一行的集合做與運算,最後就能得到正確結果。
2) 基於文字的倒排
於這樣乙個正文倒排檔案的建立通常需要如下幾個步驟:
由於倒排索引支援高效檢索,所以應用相當廣泛。當然,對倒排表進行集合運算也需要一些運算空間,更大的缺點在於,當檔案發生變化時,要同時維護更新這些索引,而這種更新的工作量會很大,所以它比較適合於當大檔案裡面內容比較穩定的情況下。尤其像光碟上的資料檢索等就會是它最理想的應用場所之一。
對這類檔案的往往會進行這樣的一些查詢,如:找出院系為「元培」的所有學生(簡單查詢),找出年齡在18到20之間的所有學生(範圍查詢),找出年齡在19歲以上的所有男生(邏輯查詢)等等。如果沒有倒排表,我們則只能順序從頭到尾的一條一條檢查記錄,判斷是否符合條件。這樣當檔案很大的時候,往往要多次讀寫磁碟會耗費相當大的時間。就算之前我們把記錄按照關鍵碼排序,也仍無法使用普通的檢索方式來提高效率,因為查詢的條件不是和關鍵碼相關的。
倒排檔案(二) 多特徵倒排檔案
如果不懂什麼是倒排檔案,請看上乙個博文 這樣討論一下二維倒排檔案,它的思想與一維倒排檔案是一樣的。以下圖為例說明 在這張中,有乙個二維的表示,它表示乙個二維索引結構,向右方向是sift特徵量化形成的visual word索引 向下方向是對顏色資訊量化形成的color索引。多重索引檔案的工作過程及工作...
倒排檔案(一)
最近做影象檢索,發現倒排檔案裡邊也大有文章。倒排檔案對於檢索效能沒有影響,它只有乙個作用,就是加速。舉個例子 有兩本書,兩本書裡的內容分別是 book1 語文 語文 語文 語文 語文 數學 數學 數學 英語 英語 book2 語文 語文 語文 數學 數學 數學 數學 英語 英語 英語 英語 則它們的...
InfluxDB 倒排索引之Index檔案
本文主要講解influxdb中的倒排索引,influxdb和傳統的lsm tree hbase使用的模型 不一樣的地方是其內部中多了乙個倒排索引,這也是讓influxdb查詢較快的秘訣。在1.7的 版本中,influxdb提供了兩種型別的倒排索引,記憶體和磁碟的,之前只有記憶體版本的,但是隨著資料的...