搜索引擎CACHE策略研究

一.關於 索引 用 戶查詢得出的結論:

(1)      用戶查詢有很大比例的重複性。有 30 % 到 40 %的用戶查詢是重複查詢。

(2)       大多數重複的用戶查詢會在較短的間隔時間被再次重複訪問。

(3)       大多數用戶的查詢是短查詢,大約包含 2 5 個單詞。

(4)       用戶一般只查看返回結果的前三個頁面(前 30 個 返回結果)。 58 %用戶只查看第一個頁面( TOP 10 ,15% 用戶查看第二個頁面,不超過 12 %的 用戶會查看第三個頁面以後的檢索結果。

(5)       關於用戶查詢差異程度。有比較大的查詢程度,一百萬個用戶查詢中大約 63.7% 的用戶查詢只出現過一次。另外一方面,集中的重複查詢也非常集中: 25 個高頻查詢大約佔總查詢的 1.23%-1.5%.

二. CACHE 的基本策略

(1)       LRU: 最近最少使用策略

基本假設:最近很少被重複訪問的緩存記錄在最近的將來也不會被訪 問。這是最簡單的一種 CACHE 策略。將用戶查詢按照最近使用時間進行排序,淘汰策略將最老的查詢淘汰出 CACHE

 

(2)       FBR: 不僅考慮時間也考慮引用計數的問題。

FBR LRU 策略的基礎上將 CACHE 分爲三個不同的部分: NEW,OLD,MIDDLE

NEW: 存儲最近被訪問過的記錄;

OLD :存儲最近最少使用的一批記錄;

MIDDLE: 存儲介於 NEW OLD 之間的一批記錄;

引用計數的時候不考慮 NEW 區 域的記錄,只考慮 OLD MIDDLE 兩個區域的記錄引用計 數增加,在替換記錄的時候從 OLD 區域選擇引用計數最少的那個記錄進行替換。

 

(3)       LRU/2 :對於 LRU 的改進,計算第二次到最後 一次被訪問總的 LRU ,將老的記錄淘汰。

(4)       SLRU:

CACHE 被分爲兩個部分:非保護區域和保 護區域。每個區域的記錄都按照最近使用頻度由高到低排序,高端叫做 MRU , 低端叫做 LRU 。如果某個查詢沒有在 CACHE 找 到,那麼將這個查詢放入非保護區域的 MRU 端;如果某個查詢在 CACHE 命 中,則把這個查詢記錄放到保護區的 MRU 端;如果保護區已滿,則把記錄從保護區放入非保護區的 MRU ,這樣保護區的記錄最少要被訪問兩次。淘汰的機制是將非保護區的 LRU 淘汰。

(5)       LandLord 策略

將一個記錄增加到 CACHE 的時候,給予這個記錄一個值( DEADLINE , 如果需要淘汰記錄的時候,選擇 CACHE 裏 面 DEADLINE 最小的那個淘汰,同時將 CACHE 裏 面其它所有記錄減去這個被淘汰的記錄的 DEADLINE 值,如果一個記錄被命中,則將這個記錄的 DEADLINE 放大到一定值。

 

(6)       TSLRU Topic based SLRU: SLRU 策略相同,不過不是按照查 詢調整替換策略,而是按照查詢所屬主題進行調整。

(7)       TLRU: Topic based LRU

基本策略和 LRU 相 同,區別在於保留查詢的主題( TOPIC )信息,對於某個查詢來說,不僅該主題的檢索結果進入 CACHE ,而且原先在 CACHE 裏 面的相同主題的查詢及其結果也調整時間,更新爲最新進入 CACHE 。可以看作是主題 LRU ,而 LRU 是查詢 LRU

 

(8)       PDC (probability driven cache) :針對用戶的瀏覽行爲建立概率模型,然後調整 CACHE 裏面的記錄優先級別,針對某個查詢,將用戶瀏覽數目比較多的文檔在 CACHE 裏 面的級別提高。

(9)       預取策略

         所謂預取,就是系統預測用戶在很短時間內的行爲,然後將該行爲涉及到的數據預先存儲在 CACHE 裏面。存在不同的預取策略,比如預取策略:因爲一般用戶在查看完第一頁檢索結果後會翻看第二頁結果, 所以將該用戶查詢的第二頁結果首先預取到 CACHE 裏面,這樣可以減少存取時間。

 

(10)   二級 CACHE

有兩級 CACHE ,一級是查詢結果 CACHE ,保留了原始查詢以及相關文件;第二級 CACHE 是倒排文檔列表 CACHE ,也就是查詢中某個單詞在索引中的倒排列表信息,這個 CACHE 主要減少了磁盤 I/O 時 間。替換策略採取 LRU ,結果證明該方法提高 30 %的 性能。

 

(11)   三級 CACHE

是對二級 CACHE 的一種改進策略,除了 二級 CACHE 裏面保留的兩個 CACHE , 另外增加一個 CACHE ,這個 CACHE 記錄了兩個單詞查詢的 倒排文檔交集記錄,這樣一個是省去了磁盤 I/O 時間,另外一個減少了計算交集的操 作,有效的減少了計算量。

 

 

三. CACHE 方法性能分析與比較

(1)       LRU 適合存儲比較小的記錄效果纔好。

(2)       中等大小的 CACHE 能夠滿足很大一部分重複用戶查詢。(大約 20 % 的查詢能夠在中等大小 CACHE 找到)

(3)       將時間因素和命中次數結合起來的緩存策略好於只考慮時間因素的策略。實驗表明 FBR/LRU2/SLUR 性能總是好於 LRU 策 略。

(4)       對於小 CACHE 來說,靜態 CACHE 策略要好於動態 CACHE 策 略,命中率要高些。

(5)       對於 LRU 來說,大 CACHE 的重複命中率大約佔 30 %。

(6)       對於大 CACHE 來說, TLRU 略微好於 LRU ,但是差別不太大。對於小 CACHE , 結論正好相反。

(7)       隨着 CACHE 逐步增大,命中率逐漸增 加,對於 SLRU 來說,其性能跟兩個分區劃分大小無關。

(8)       PDC 的命中率高於 LRU 變 形算法 ,大約 有 53 %命中率,不過計算複雜度高。

 

 

以前曾經提到過搜 索引擎的緩存策略, 根據搜索引擎搜索的關鍵詞的統計分佈, 可以優化設計搜索引擎的緩存策略. 就普通的緩存策略上講, 緩存是因爲在一定的時間段內的搜索的關鍵詞集中在一定的範圍內, 並且這些搜索相對穩定. 例如每天搜索"美女"的人總有10萬,20萬, 而結果在這段時間相對穩定, 因此沒有必要每次去檢索索引文件, 而將上一個人搜索的結果直接返回便可以了.
     搜索引擎緩存策略也同搜索引擎的算法密切相連, 除了搜索緩存, 索引緩存也是一個好方法. 獨立或者分佈一些權重較高的文檔也是一種提高效率的方法. 例如我們有1000萬的網頁的權重(可以簡單的理解爲pagerank)比較高, 那麼這些網頁的排序相比另外一些權重較低的網頁相對較爲穩定, 就不妨獨立出來進行相對獨立的索引緩存.

     關於緩存的分佈, 一般的小型搜索引擎不會用到, 但是如果每天處理上億次的搜索, 緩存的分佈就應當有一定的分佈規劃, 例如根據提交的關鍵詞構成hash table, 然後對應於不同的搜索服務器, 實現緩存的分佈.

     讓我們看看實際例子吧, 我們拿百度, google, yisou, 中搜, tag.bokee.com 進行簡單的測試:

     因爲測試, 要搜索一些在過去7天沒有人搜索過的關鍵詞, 或者組合詞. 爲了保證沒有人搜索過, 我選擇在各個搜索引擎裏搜索"a s d f v g h" , 這是我在鍵盤上隨機打出的一些組合, 相信這世界上在7天沒有人相同搜索, 這樣保證我的第一次的搜索是 fresh search, 就是一定需要搜索引擎去檢索索引文件, 而不是通過緩存策略.

以下是結果:
百度: 0.279秒
google: 0.24 秒
一搜: 0.24 秒
中搜: 0.001秒(無結果!!!!)
博客搜索: 0.041 秒

下面是第二次搜索的結果:
百度: 0.001秒
google: 0.05 秒
一搜: 0.09 秒
中搜: 0.002秒(無結果!!!!)
博客搜索: 0.019 秒



     經過簡單的測試, 可以看出緩存機制只有在Baidu和google搜索引擎裏都有, 但是各自效率不一樣, 如下是簡單的比例:

百度: 100
google: 5
一搜: 沒有明顯的緩存
中搜: 沒有明顯的緩存
博客搜索: 沒有明顯的緩存

     而在緩存效率上百度要遠遠大於google, 這點大概是因爲google的gfs本身的分佈效率已經相當不錯, 因此進行緩存也不會有數量級的提升.

     而百度, 根據測試可能是集中方式的數據存儲, 但是根據搜索進行hash分佈, 因此纔會在緩存上有顯著的提升. (這個屬於猜測)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章