ElasticSearch數(shù)據(jù)讀寫流程

ElasticSearch數(shù)據(jù)讀寫流程

ElasticSearch寫入數(shù)據(jù)
  1. 客戶端選擇一個Node發(fā)送請求過去,這個node就成為coordinating node(協(xié)調(diào)節(jié)點(diǎn))

  2. coordinating node對 document進(jìn)行路由,將請求轉(zhuǎn)發(fā)到對應(yīng)的node(有primary shard) 3.實際的node上的primary shard處理請求,然后將數(shù)據(jù)同步到replica node

  3. coordinating node 發(fā)現(xiàn) pimary node 和 replica node都處理完畢后,就返回響應(yīng)結(jié)果給客戶端

    hp
ElasticSearch讀取數(shù)據(jù)

根據(jù)文檔id進(jìn)行路由到對應(yīng)的節(jié)點(diǎn)機(jī)器上(相當(dāng)于請求轉(zhuǎn)發(fā))

  • 客戶端發(fā)送請求到任意一個 node,成為 coordinate node。

  • coordinate nodedoc id 進(jìn)行路由,將請求轉(zhuǎn)發(fā)到對應(yīng)的 node,實際集群中可能該數(shù)據(jù)對應(yīng)的shard有多個(主、備),根據(jù)負(fù)載輪詢策略在對應(yīng)的shard上進(jìn)行數(shù)據(jù)的讀取。

  • 接收請求的 node 返回 document 給 coordinate node。

  • coordinate node 返回 document 給客戶端。

索引數(shù)據(jù)過程

核心就是兩個階段 query和fetch

  • 客戶端連接到 任一節(jié)點(diǎn)(coordinate node)。

  • 協(xié)調(diào)節(jié)點(diǎn)將搜索請求轉(zhuǎn)發(fā)到所有的 shard 對應(yīng)的 primary shardreplica shard,都可以。

  • query phase:每個 shard 將自己的搜索結(jié)果(其實就是一些 doc id)返回給協(xié)調(diào)節(jié)點(diǎn),由協(xié)調(diào)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)的合并、排序、分頁等操作,產(chǎn)出最終結(jié)果。

  • fetch phase:接著由協(xié)調(diào)節(jié)點(diǎn)根據(jù) doc id 去各個節(jié)點(diǎn)上拉取實際document 數(shù)據(jù),最終返回給客戶端。

刪除更新索引

如果是刪除操作,commit 的時候會生成一個 .del 文件,里面將某個 doc 標(biāo)識為 deleted 狀態(tài),那么搜索的時候根據(jù) .del 文件就知道這個 doc 是否被刪除了。

如果是更新操作,就是將原來的 doc 標(biāo)識為 deleted 狀態(tài),然后新寫入一條數(shù)據(jù)。

buffer 每次 refresh 一次,就會產(chǎn)生一個 segment file,所以默認(rèn)情況下是 1 秒鐘一個 segment file,這樣下來 segment file 會越來越多,此時會定期執(zhí)行 merge。每次 merge 的時候,會將多個 segment file 合并成一個,同時這里會將標(biāo)識為 deleted 的 doc 給物理刪除掉,然后將新的 segment file 寫入磁盤,這里會寫一個 commit point,標(biāo)識所有新的 segment file,然后打開 segment file 供搜索使用,同時刪除舊的 segment file。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容