1. 程式人生 > 實用技巧 >《elasticsearch》之讀寫資料

《elasticsearch》之讀寫資料

    

es 寫資料過程

1)客戶端選擇一個 node 傳送請求過去,這個 node 就是coordinating node(協調節點)。

2)coordinating node對 document 進行路由,將請求轉發給對應的 node(有 primary shard)。

3)node 上的 主分片(primary shard)處理請求,然後將資料同步到 複製分片(replica node)

4)node報告成功到協調節點,協調節點再報告給客戶端。

es 讀資料過程


可以通過doc id來查詢,會根據doc id進行 hash,判斷出來當時把doc id分配到了哪個 shard 上面去,從那個 shard 去查詢。

1)客戶端傳送請求到任意一個 node,成為coordinate node

2)coordinate nodedoc id進行雜湊路由,將請求轉發到對應的 node,此時會使用round-robin隨機輪詢演算法,在primary shard以及其所有 replica 中隨機選擇一個,讓讀請求負載均衡。

3)接收請求的 node 返回 document 給coordinate node

4)coordinate node返回 document 給客戶端。

es 搜尋資料過程

1)客戶端傳送請求到一個coordinate node

2)協調節點將搜尋請求轉發到所有的 shard 對應的primary shardreplica shard,都可以。

3)query phase:每個 shard 將自己的搜尋結果(其實就是一些doc id)返回給協調節點,由協調節點進行資料的合併、排序、分頁等操作,產出最終結果。

4)fetch phase:接著由協調節點根據doc id去各個節點上拉取實際的document資料,最終返回給客戶端。

查詢階段:

(1)客戶端傳送一個 search(搜尋) 請求給 協調節點,協調節點建立了一個長度為 from+size 的空優先順序佇列。

(2)協調節點轉發這個搜尋請求到索引中每個分片的原本或副本。每個分片在本地執行這個查詢並且結果將結果到一個大小為 from+size 的有序本地優先佇列裡去。

(3)每個分片返回document的ID和它優先佇列裡的所有document的排序值給協調節點 。 協調節點把這些值合併到自己的優先佇列裡產生全域性排序結果。

取回階段:

(1)協調節點辨別出哪個document需要取回,並且向相關分片發出 GET 請求。

(2)每個分片載入document並且根據需要豐富(enrich)它們,然後再將document返回協調節點。

(3)一旦所有的document都被取回,協調節點會將結果返回給客戶端。