Elasticsearch筆記(十五) 圖解ES文檔的讀寫原理

1. 簡介

ES的Document API分單文檔API和多文檔API,它們的作用是對文檔進行CRUD操作。
注意:所有的CRUD API都單index API,它們只接收一個index name或alias。

1.1 單文檔API

  • Index
  • Get
  • Delete
  • Update

1.2 多文檔API

  • Multi Get
  • Bulk
  • Delete By Query
  • Update By Query
  • Reindex

2. 讀寫文檔

2.1 主分片和副本分片

ES中每個index都被切分爲幾個分片,每個分片都可有多個副本。
舉例:

  • 1個集羣有3個節點(node1~node3)
  • 1個index被分爲2個分片,分片1(P1),分片2(P2),P是Primary的縮寫
  • 1個主分片有2個副本分片,P1的副本爲R1,P2的副本是R2,R是Replica的縮寫

目前分片情況如下圖:
在這裏插入圖片描述
圖中綠色方塊P1+兩個R1是屬於同一個複製組(Replication Group)。
同理黃色方塊P2+兩個R2是屬於同一個複製組(Replication Group)。

3. 寫模式

文檔的寫模式包括新增/修改/刪除文檔。它一般有如下執行步驟。

  • ES的index操作第一步都是通過routing決定發往哪個複製組(Replication Group)。
  • 一旦確定了複製組,index操作會被轉發給這個複製組內的主分片(如上圖的P1或P2)。
  • 主分片負責驗證index操作,驗證通過則執行該index操作。
  • 主分片執行成功後,把index操作轉發給它的所有副本分片。
  • 一旦所有的副本分片執行成功並通知到主分片,主分片才通知主節點(協調節點)執行成功。
  • 主節點將結果返回給客戶端。

下面通過圖片依次介紹上面的操作(PPT畫的圖,不好看,見諒)

3.1 routing到主分片

  • 客戶端(笑臉)把請求發給ES集羣裏的協調節點node1
  • 根據routing算出文檔屬於黃色的複製組
  • 協調節點node1把index操作轉發給黃色複製組中主分片P2
    第一步

3.2 主分片分發給副本分片

  • 主分片P2介紹到請求並驗證,驗證通過後執行操作
  • 主分片P2把請求轉發給它的副本(2個黃色的R2)

在這裏插入圖片描述

3.3 執行成功後返回通知

  • 副本分片R2執行請求,把結果返回給主分片P2,圖中紅色線4
  • 主分片接受到所有的副本分片返回的成功結果,才通知協調節點node1成功了,圖中黃色線5
  • 協調節點node1告訴客戶端(笑臉)該寫操作執行成功

在這裏插入圖片描述

4. 讀模式

ES可以有非常輕量級的查詢:按照ID查找。也可以有複雜的聚合搜索請求。主備模型的一個優點就是它讓所有的分片(主和備)的數據是等同的。
ES的增刪改是在主節點上協調操作的,但是讀操作是可以由非主節點操作。
當一個節點接受到讀請求時,該節點負責將該請求轉發到保存該文檔的相關分片的節點。我們稱該節點爲協調節點(注意只是本次請求的協調節點)。

  • 協調節點解析到相關分片,默認根據id值hash,獲取是哪個分片(複製組1還是複製組2)
  • 從分片的複製組中選擇一個活動分片(通常是輪詢),可以是主分片也可是副本分片
  • 向所選分片發送讀取請求,分片查詢結果返回給協調節點
  • 協調節點將結果整合,返回給客戶端

4.1 接受請求,再獲取分片複製組

  • node1獲取了客戶端的請求,箭頭1
  • node1計算出文檔在綠色的複製組(P1+R1)
  • node1根據輪詢算法,把請求發給node2上的R1
    在這裏插入圖片描述

4.2 返回結果

  • node2把R1裏的文檔飯會給node1,箭頭3
  • node1把文檔返回給客戶端,箭頭4
    在這裏插入圖片描述

5. 總結

ES的知識點太多,這裏只是簡單的介紹下它的讀寫模式,他的讀寫異常處理暫時不涉及到,需要了解的可以看官方文檔,寫的很詳細。
下面打算結合ES的Query DSL和JavaAPI,深入學習ES的Document和Search模塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章