轉自: 點選打開連結http://zhuanlan.51cto.com/art/201703/533480.htm
二、實時搜尋引擎架構
大資料量、高并發量情況下的搜尋引擎為了保證明時性,架構設計上的兩個要點:
(1)索引分級
(2)dump&merge
索引分級
《深入淺出搜尋架構(上篇)》介紹了搜尋引擎的底層原理,在資料量非常大的情況下,為了保證反向索引的高效檢索效率,任何對資料的更新,并不會實時修改索引,一旦産生碎片,會大大降低檢索效率。
既然索引資料不能實時修改,如何保證最新的網頁能夠被索引到呢?
索引分為全量庫、日增量庫、小時增量庫。
如下圖所述:
(1)300億資料在全量索引庫中
(2)1000萬1天内修改過的資料在天庫中
(3)50萬1小時内修改過的資料在小時庫中
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauIDN3IDMwITOy81ctgXM1YzXodXLnBnauADO2E0TSd2U6pGVDFUQhhmZil2XN92MpFDTvl2S39CX3IzLcVEOvwFMw00LcJDMzZWe39CXt92Yu8GdjFTNuIzcvw1LcpDc0RHaiojIsJye.jpg)
當有修改請求發生時,隻會操作最低級别的索引,例如小時庫。
當有查詢請求發生時,會同時查詢各個級别的索引,将結果合并,得到最新的資料:
(1)全量庫是緊密存儲的索引,無碎片,速度快
(2)天庫是緊密存儲,速度快
(3)小時庫資料量小,速度也快
資料的寫入和讀取都是實時的,是以58同城能夠檢索到1秒鐘之前釋出的文章,即使全量庫有300億的資料。
新的問題來了:小時庫資料何時反映到天庫中,天庫中的資料何時反映到全量庫中呢?
dump&merge
這是由兩個異步的工具完成的:
dumper:将線上的資料導出
merger:将離線的資料合并到高一級别的索引中去
小時庫,一小時一次,合并到天庫中去;
天庫,一天一次,合并到全量庫中去;
這樣就保證了小時庫和天庫的資料量都不會特别大;
如果資料量和并發量更大,還能增加星期庫,月庫來緩沖。