動態(tài)索引通過在內(nèi)存中維護臨時索引,可以實現(xiàn)對動態(tài)文件和實時搜索的支持哮塞。但是服務(wù)器內(nèi)存總是有限的刨秆,隨著新加入系統(tǒng)的文檔越來越多,臨時索引消耗的內(nèi)存也會隨之增加忆畅。當最初分配的內(nèi)存將被使用完時衡未,要考慮將臨時索引的內(nèi)容更新到磁盤索引中尸执,以釋放內(nèi)存空間來容納后續(xù)的新進文檔。
下面介紹四種索引更新策略:完全重建策略缓醋、再合并策略如失、原地更新策略及混合策略。
完全重建策略(Complete Re-Build)
當新文檔增加到一定數(shù)量送粱,將新文檔和老文檔進行合并褪贵,然后對所有文檔重新建立索引。
因為重建索引需要較長時間抗俄,在進行索引重建的過程中脆丁,內(nèi)存中仍然需要維護老索引來對用戶的查詢做出相應(yīng)。
這種策略適合比較小的文檔集合动雹,但是目前主流商業(yè)搜索引擎也一般是采用這種方式維護索引更新槽卫,這跟互聯(lián)網(wǎng)本身的特性有關(guān)。
再合并策略(Re-Merge)
在合并過程中胰蝠,需要依次遍歷增量索引和老索引單詞詞典中包含的單詞以及其對應(yīng)的倒排列表歼培,可以用兩個指針分別指向增量索引和老索引目前需要合并的單詞。
按如下方式進行合并:
1.如果增量索引中指針指向的單詞ID小于老索引中指針指向的單詞ID茸塞,則說明這個單詞在老索引中沒有出現(xiàn)過躲庄,直接將這個單詞對應(yīng)的倒排列表寫入新索引的倒排列表中,同時增量索引單詞指針指向下一個單詞钾虐。
2.如果兩個單詞ID相等噪窘,則先將老索引中這個單詞對應(yīng)的倒排列表加入新索引,然后在把增量索引這個單詞對應(yīng)的倒排列表追加到其后禾唁。如下圖所示:
3.如果新索引指向的單詞ID大于老索引指針指向的單詞ID效览,則直接將老索引中對應(yīng)的倒排列表加入新索引的倒排文件中无切,老索引的單詞指針指向下一個單詞荡短。
4.兩個索引的所有單詞都遍歷完后,新索引建成哆键。
優(yōu)點:再合并策略是效率非常高的一種索引策略掘托,主要是因為在對老索引進行遍歷時,因為已經(jīng)按照索引單詞的詞典順序由低到高排好順序籍嘹,所以可以順序讀取文件內(nèi)容闪盔,減少磁盤尋道時間。
缺點:對于老索引中的很多單詞來說辱士,盡管其倒排列表并為發(fā)生任何變化泪掀,但是也需要將其從老索引中讀取出來并寫入新索引中,這樣就會造成很大的磁盤輸入輸出消耗颂碘。
原地更新策略(In-Place)
在索引更新過程中异赫,如果老索引的倒排列表沒有變化,可以不需要讀取這些信息,而只是對那些倒排列表變化的單詞進行處理塔拳,或者是直接將發(fā)生變化的倒排列表追加到老索引的末尾鼠证,即只更新增量索引里出現(xiàn)的單詞相關(guān)信息,這樣就可以減少大量的磁盤讀寫操作靠抑,提升系統(tǒng)執(zhí)行效率量九。
存在問題:對于倒排文件中的兩個相鄰單詞,為了在查詢時加快讀寫速度颂碧,其倒排列表一般是順序存儲的荠列,這導(dǎo)致沒有空余位置來追加新信息。為了能夠支持追加操作载城,原地更新策略在初始建立的索引中弯予,會在每一個單詞的倒排列表末尾預(yù)留出一定的磁盤空間。當預(yù)留空間不足時个曙,需要在磁盤中找到一塊完整的連續(xù)存儲區(qū)锈嫩,將增量索引對應(yīng)的倒排列表追加到其后,實現(xiàn)倒排列表的“遷移”工作垦搬。
原地更新策略出發(fā)點很好呼寸,但是實驗數(shù)據(jù)證明其索引更新效率比再合并策略低,主要有兩個原因:
1.在這種方法中猴贰,對倒排列表的“遷移”是比較常見的对雪。這個策略需要對磁盤可用空間進行維護和管理,這種維護和查找成本非常高米绕,這成為該方法效率的一個瓶頸瑟捣。
2.由于存在數(shù)據(jù)遷移,某些單詞及其對應(yīng)的倒排列表會從老索引中溢出栅干,這樣就破壞了單詞的連續(xù)性迈套,導(dǎo)致在進行索引合并的時候不能進行順序讀取,必需維護一個單詞到其倒排文件相應(yīng)位置的映射表碱鳞,這樣不僅降低了磁盤讀寫速度桑李,而且需要大量的內(nèi)存來存儲這種映射信息。
混合策略(Hybrid)
混合策略一般會將單詞根據(jù)其不同性質(zhì)進行分類窿给,不同類別的單詞贵白,對其索引采取不同的索引更新策略。常見做法:根據(jù)單詞的倒排索引列表長度進行區(qū)分崩泡,因為有些單詞經(jīng)常在不同的文檔中出現(xiàn)禁荒,所以其對應(yīng)的倒排列表很長,而有些單詞很少見角撞,對應(yīng)的倒排列表就較短呛伴。根據(jù)這一性質(zhì)將單詞劃分為長倒排列表單詞和短倒排列表單詞寥掐。長倒排列表單詞采取原地更新策略,而短倒排列表單詞采用再合并策略磷蜀。
因為原地更新策略能夠節(jié)省磁盤讀寫次數(shù)召耘,而長倒排列表單詞的讀寫開銷明顯要比短倒排列表單詞大很多,所以如果采用原地更新策略褐隆,效果體現(xiàn)比較顯著污它。而大量的短倒排列表單詞讀寫開銷相對而言不算太大,利用再合并策略來處理庶弃,其順序讀寫優(yōu)勢也能被充分利用衫贬。
參考文獻:
[1] 張俊林. 這就是搜索引擎[M]. 電子工業(yè)出版社, 2012.