1. 程式人生 > >ELK 學習筆記之 elasticsearch Shard和Segment概念

ELK 學習筆記之 elasticsearch Shard和Segment概念

tran article str 寫到 ext 壓力 執行 details 學習筆記

Shard和segment概念:

轉載: http://blog.csdn.net/likui1314159/article/details/53217750

Shard(分片)
一個Shard就是一個Lucene實例,是一個完整的搜索引擎。一個索引可以只包含一個Shard,只是一般情況下會用多個分片,可以拆分索引到不同的節點上,分擔索引壓力。

Segment
elasticsearch中的每個分片包含多個segment,每一個segment都是一個倒排索引;在查詢的時,會把所有的segment查詢結果匯總歸並後最為最終的分片查詢結果返回;
在創建索引的時候,elasticsearch會把文檔信息寫到內存bugffer中(為了安全,也一起寫到translog),定時(可配置)把數據寫到segment緩存小文件中,然後刷新查詢,使剛寫入的segment可查。
雖然寫入的segment可查詢,但是還沒有持久化到磁盤上。因此,還是會存在丟失的可能性的。
所以,elasticsearch會執行flush操作,把segment持久化到磁盤上並清除translog的數據(因為這個時候,數據已經寫到磁盤上,不在需要了)。
當索引數據不斷增長時,對應的segment也會不斷的增多,查詢性能可能就會下降。因此,Elasticsearch會觸發segment合並的線程,把很多小的segment合並成更大的segment,然後刪除小的segment。
segment是不可變的,當我們更新一個文檔時,會把老的數據打上已刪除的標記,然後寫一條新的文檔。在執行flush操作的時候,才會把已刪除的記錄物理刪除掉。

ELK 學習筆記之 elasticsearch Shard和Segment概念