您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何進行Elasticsearch的Refresh與Flush操作,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
初次接觸到這兩個概念,估計都會覺得他們沒什么差別,都是為了在操作索引之后讓索引可以被實時性的搜索,不過它們還是有點不同的。
Elasticsearch底層依賴Lucene,這里我們介紹下Lucene的segment, Reopen,commit。
Segment
在ES中,基本的存儲單元是shard(分片),但是在更底層的Lucene上稍微有點不同,ES的每一個shard是Lucene的一個index(索引),Lucene的索引由多個segment組成,每個segment就是ES文檔的倒序索引,里面包含了一些term(詞)的mapping(映射)。
當每個ES的文檔創建的時候,都會寫入一個新的segment中,因此每次寫入的都是新的segment,所以不需要修改之前的segment。在刪除文檔的時候,只是在它屬于的segment哪里標記為已刪除就可,沒有真正的從磁盤中抹除。更新也是同樣的,只是在對應之前segment哪里標記為邏輯刪除,然后新建一個新的segment。
Lucene Reopen
Reopen是為了讓數據可以可以被搜索到,盡管這個時候數據可以被搜索到,但是不一定保證數據已經被持久化到磁盤中。
Lucene Commit
Commit就是為了讓數據持久化,每一次的Commit,不同segment的數據都會被持久化到磁盤中,雖然這樣可以讓數據更安全,但是每一次操作都會消耗系統資源,會有大量的IO操作。
Translog
ES在持久化的時候引入了一種新的方式,translog(transaction log),一個文檔被索引之后,就會被添加到內存緩沖區,并且 追加到了translog.
ES的Refresh
默認情況下,ES會每秒refresh一次,每次操作都會把內存緩沖區的內容拷貝到新創建的segment中去,這一步是在內存中操作的,這個時候新的文檔就會被搜索了。也就是說ES是近實時性的搜索,差不多1s鐘,才能讓數據可以被搜索到。
ES的Flush
Flush操作意味著,所有在內存緩沖區的文檔被寫到新的Lucene Segment中,也就是所有在內存中的segment被提交到了磁盤,同時清除translog。
一般Flush的時間間隔會比較久,默認30分鐘,或者當translog達到了一定的大小,也會觸發flush操作。
最后
簡單來說,ES的refresh操作是為了讓最新的數據可以立即被搜索到。而flush操作則是為了讓數據持久化到磁盤中,另外ES的搜索是在內存中處理的,因此Flush操作不影響數據能否被搜索到。
translog一般在進行flush的時候被清空,一般在fsync和commit的時候被持久化到磁盤,默認的translog是在6.x版本以后,每次請求都會fsync到磁盤。不過有些index.translog的配置可以設置
以上就是如何進行Elasticsearch的Refresh與Flush操作,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。