搜尋引擎設計實用教程 5 以百度為例

2021-08-22 02:04:13 字數 1291 閱讀 3562

之五:cache結構

中科院軟體所張俊林

2023年1月4日

cache是目前實用的搜尋引擎都必備的功能,因為研究表明使用者的查詢有相當比例(30%-40%)是重複的,而且大多數重複的使用者查詢會在較短的間隔時間被再次重複訪問.比如說目前"芙蓉姐姐"成為街頭巷議的美談,那麼不僅張三想搜尋"芙蓉姐姐",王二麻子同樣也想搜尋,以免被隔壁的李四笑話趕不上時代潮流.既然大家的關注焦點是差不多的,那麼沒有必要每次接受到查詢後都從索引庫裡面查詢,把大量的使用者查詢放到cache裡面,肯定能夠節省不少計算資源.

cache設計主要關注兩個大的方面:

乙個是cache的結構是怎樣的?是只設計乙個cache就拉倒呢?還是設計兩級cache乃至**cache?當然這裡的二級**不是咱們大老爺們們喜聞樂見的電影分級標準,而是優先順序別的意思,你別指望從**cache裡面看到的都是清涼.

第二個方面是採取何種替換演算法?畢竟cache是寶貴的資源,當cache裡面已經被塞滿的時候,把哪個記錄踢出cache才合算呢?

hash_id--->|record1|record2...

當然,上面是個簡略的表達,還有很多其它的資訊比如加入cache的時間長短以及命中次數等其它資訊.

二級cache是否存在呢?為了能夠將故事講明白,在分析其它cache是否存在之前,我們首先需要介紹一下搜尋引擎的索引.

簡單來說,搜尋引擎的最核心的索引是倒排文件,這種資料結構是為了加快資訊提取的速度,倒排文件的結構如下:

word-->||....

至於cache淘汰演算法,現有的成熟並常用的cache淘汰演算法包括lru,slru,fbr,lru/2等等,因為研究表明如果cache足夠大的話,這些演算法的效率儘管有細微的差別,但是總體上差不多,在實現的時候選擇最簡單的乙個即可.

所以,歸納上面的敘述內容,可以得到如下的**cache演算法:

1.存在**cache,一級cache在記憶體中,採取完全精確匹配,二級cache在磁碟中,採取完全精確匹配,**cache在記憶體中,採取非完全精確匹配;

2.得到使用者查詢編碼,hash計算得到hash編碼,在一級cache裡面查詢,如果找到輸出,同時該查詢命中次數計數器加1;

3.如果在一級cache沒有命中,則在二級cache精確查詢,如果找到輸出,同時該查詢命中次數計數器加1並將該查詢相關資訊載入到一級cache;

4.如果在二級cache沒有找到,使用者查詢分詞,判斷組成查詢的各個詞彙是否在**cache裡面存在,如果存在則直接得到倒排文件列表,如果不存在則從索引庫裡面查詢該詞彙的倒排文件列表,並將該詞彙及其倒排文件列表加入**cache,計算各個查詢詞彙倒排文件列表的交集,並將其放入一級cache和二級cache;

!!!!搜尋引擎設計實用教程 以百度為例

之一 查詢處理以及分詞技術 中科院軟體所 張俊林 2005年11月 隨著搜尋經濟的崛起,人們開始越加關注全球各大搜尋引擎的效能 技術和日流量。作為企業,會根據搜尋引擎的知名度以及日流量來選擇是否要投放廣告等 作為普通網民,會根據搜尋引擎的效能和技術來選擇自己喜歡的引擎查詢資料 作為技術人員,會把有代...

搜尋引擎設計實用教程 4 以百度為例

搜尋引擎設計實用教程 4 之四 相關提示功能 中科院軟體所 malefactor 2005年11月 問題二.搜尋引擎拿到使用者的查詢比如 大長今 使用者查詢log裡面有成千上萬的不同查詢,那麼選擇哪些作為提示呢?這裡面牽涉到乙個字串相似性計算的過程.第二步,怎麼計算相似性並排序輸出呢?如果使用者輸入...

引入百度,GOOGLE的搜尋引擎

搜尋 input type hidden name domains value 這裡輸入你的 位址 input type radio name sitesearch value 全球搜尋 input type radio name sitesearch value 這裡輸入你的 位址 checked...