es的寫入過程

es的寫入過程

建立((C)reate)緩存

當咱們發送索引一個新文檔的請求到協調節點後,將發生以下一組操做:函數

Elasticsearch集羣中的每一個節點都包含了改節點上分片的元數據信息。協調節點(默認)使用文檔ID參與計算,以便爲路由提供合適的分片。Elasticsearch使用MurMurHash3函數對文檔ID進行哈希,其結果再對分片數量取模,獲得的結果便是索引文檔的分片。索引

shard = hash(document_id) % (num_of_primary_shards)內存

當分片所在的節點接收到來自協調節點的請求後,會將該請求寫入translog(咱們將在本系列接下來的文章中講到),並將文檔加入內存緩衝。若是請求在主分片上成功處理,該請求會並行發送到該分片的副本上。當translog被同步(fsync)到所有的主分片及其副本上後,客戶端纔會收到確認通知。ci

內存緩衝會被週期性刷新(默認是1秒),內容將被寫到文件系統緩存的一個新段上。雖然這個段並無被同步(fsync),但它是開放的,內容能夠被搜索到。路由

每30分鐘,或者當translog很大的時候,translog會被清空,文件系統緩存會被同步。這個過程在Elasticsearch中稱爲沖洗(flush)。在沖洗過程當中,內存中的緩衝將被清除,內容被寫入一個新段。段的fsync將建立一個新的提交點,並將內容刷新到磁盤。舊的translog將被刪除並開始一個新的translog。文檔

引用

相關文章
相關標籤/搜索