以前曾經提到過搜索引擎的緩存策略, 根據搜索引擎搜索的關鍵詞的統計分布, 可以優化設計搜索引擎的緩存策略. 就普通的緩存策略上講, 緩存是因為在一定的時間段內的搜索的關鍵詞集中在一定的范圍內, 并且這些搜索相對穩定. 例如每天搜索"美女"的人總有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分布, 因此才會在緩存上有顯著的提升. (這個屬于猜測)
搜索記錄在以下位置:
http://www.wespoke.com/archives/download/se-buffer/baidu1.png
http://www.wespoke.com/archives/download/se-buffer/baidu2.png
http://www.wespoke.com/archives/download/se-buffer/google1.png
http://www.wespoke.com/archives/download/se-buffer/google2.png
http://www.wespoke.com/archives/download/se-buffer/tag1.png
http://www.wespoke.com/archives/download/se-buffer/tag2.png
http://www.wespoke.com/archives/download/se-buffer/yisou1.png
http://www.wespoke.com/archives/download/se-buffer/yisou2.png
http://www.wespoke.com/archives/download/se-buffer/zhongsou1.png
http://www.wespoke.com/archives/download/se-buffer/zhongsou2.png