天天看點

The scale step when design web crawler

所謂的scale step就是解決一些奇奇怪怪的corner case的

比如說:

how to handle update or failure?這是因為現在爬取的檔案或者網頁 過一段時間後就陳舊了 或者過一段時間就被原主人修改了,怎麼辦呢?或者說

Answer: 進行指數型的更新或者重試,比如第1 2 4 8…個星期進行更新或者重試。

how to handle dead cycle?比如說sina.com裡面的内鍊太多 導緻從sina.com裡面出不來了

Answer: use quota! 就是說在task table裡面隻給sina.com 10% 多了不給

How to design a Typeahead:(自動聯想搜尋)

自動聯想一些被搜尋的次數多的關鍵詞

這個就需要兩個服務:query service and data collection service.

The scale step when design web crawler

查詢服務:就是說在資料庫的表中檢索 data collection service:就是統計次數

follow up:

當我們在資料庫的表中檢索的時候 會用到下面的語句:

select * from hit_status where keyword like ‘¥{key}%’ order by hit_count DESC LIMIT 10.

但是我們同時也注意到Like操作時間花費很多!

那麼怎麼樣減少這個花費呢?用Trie這種資料結構!

那麼針對data collection service,你想選用什麼方式存儲呢?

用bigTable.但是data是每時每刻都在迅速變化的 怎麼樣更新這個big table呢?

我們并不對這個table做實時更新 而是在未來的某個節點建構一個新的表 然後将老的表替換掉

How to reduce response time?

cache results

The scale step when design web crawler

what if the trie gets too large for one machine?

我們這個時候就把query service進行拆分 比如說第一個service隻管以a開頭 第二個隻管以b開頭。。。

how to reduce the size of the log file?

什麼是log file table?

The scale step when design web crawler

是以你可以想象的到儲存20B的amazon條目十分占空間。

解決方法:

The scale step when design web crawler