對於搜尋引擎來說,索引存放在成千上萬臺機器上,如何進行分布式搜尋呢?
假設搜尋結果是以分頁的方式顯示,以
pagenumber
代表當前頁,從1
開始,以
pagesize
代表頁面大小
,預設為
10,以n代表
搜尋伺服器數量
。最簡單的
分布式搜尋演算法
為:有一台合併伺服器負責接受使用者的搜尋請求,然後分別向
n臺機器獲取前
pagenumber*pagesize
條結果,得到的結果數為
n*pagenumber*pagesize
,然後把這些資料重新進行排序,根據所要顯示的頁面
pagenumber
,獲取從
(pagenumber - 1) * pagesize + 1
開始的pagesize
條結果返回給使用者。
這個演算法很簡單,但有一些問題:
問題一:每次翻頁都要向每台
搜尋伺服器搜尋一遍
通常情況下,使用者在搜尋內容時都是順序翻頁的,即從第一頁往下順序翻,這個演算法沒有設計快取來減輕搜尋伺服器的壓力。
問題二:越往後翻頁,
搜尋伺服器的搜尋壓力越大
如果我們是查第
100頁,即第
991-1000
條記錄,那麼這個演算法需要從
n臺搜尋伺服器分別獲取
1000
條記錄才能完成,對於每台
搜尋伺服器
的搜尋壓力很大。
問題三:越往後翻頁,
合併伺服器的排序壓力越大
大型搜尋引擎往往是由成千上萬臺機器組成的
分布式搜尋集群
,如果按這個演算法來進行翻頁,假設n為
1000
,查詢第
100頁時,
合併伺服器
得到的結果數為
n*pagenumber*pagesize
= 1000 * 100 * 10 = 1000000
,要對這
100萬條結果進行排序,對
合併伺服器
來說壓力很大。對系統的
可伸縮性
是一種極大的破壞。
分布式搜尋elasticsearch配置檔案詳解
elasticsearch的config資料夾裡面有兩個配置檔案 elasticsearch.yml和logging.yml,第乙個是es的基本配置檔案,第二個是日誌配置檔案。elasticsearch.yml檔案中可以配置的如下 cluster.name elasticsearch 配置es的集群...
分布式搜尋方案選型
solr官網 我在學校專案實踐時使用過solandra,它是乙個基於solr和nosql資料庫cassandra的分布式搜尋引擎。cassandra是由facebook開源的nosql數 據庫,facebook的信箱搜尋就是基於它實現的,它是基於列結構的,不同與關聯式資料庫。它的數學模型基於goog...
分布式搜尋elasticsearch幾個概念解析
cluster 代表乙個集群,集群中有多個節點,其中有乙個為主節點,這個主節點是可以通過選舉產生的,主從節點是對於集群內部來說的。es的乙個概念就是去中心化,字面上理解就是無中心節點,這是對於集群外部來說的,因為從外部來看es集群,在邏輯上是個整體,你與任何乙個節點的通訊和與整個es集群通訊是等價的...