ElasticSearch refresh和flush的理解


  在索引數據的時候,要保證被索引的文檔能夠立即被搜索到,就要涉及到_refresh 和_flush這兩個方法。

  1、fresh

    當索引一個文檔,文檔先是被存儲在內存里面,默認1秒后,會進入文件系統緩存,這樣該文檔就可以被搜索到,但是該文檔還沒有存儲到磁盤上,如果機器宕機了,數據就會丟失。

    因此fresh實現的是從內存到文件系統緩存的過程。

  2、flush

    flush是用於translog的。

    ES為了數據的安全,在接受寫入文檔的時候,在寫入內存buffer的同時,會寫一份translog日志,從而在出現程序故障或磁盤異常時,保證數據的安全。

    flush會觸發lucene commit,並清空translog日志文件。

    translog的flush是ES在后頭自動運行的。默認情況下ES每隔5s會去檢測要不要flush translog,默認條件是:每 30 分鍾主動進行一次 flush,或者當 translog 文件大小大於 512MB主動進行一次 flush。

    每次 index、bulk、delete、update 完成的時候,一定觸發flush translog 到磁盤上,才給請求返回 200 OK。這個改變提高了數據安全性,但是會對寫入的性能造成不小的影響。

    在寫入效率優先的情況下,可以在 index template 里設置如下參數:"index.translog.durability":"async" 和 "index.translog.sync_interval":30s (默認是5s)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM