1. 程式人生 > >ElasticSearch最佳入門實踐(六十八)優化寫入流程實現NRT近實時(filesystem cache,refresh)

ElasticSearch最佳入門實踐(六十八)優化寫入流程實現NRT近實時(filesystem cache,refresh)

現有流程的問題,每次都必須等待fsync將segment刷入磁碟,才能將segment開啟供search使用,這樣的話,從一個document寫入,到它可以被搜尋,可能會超過1分鐘!!!這就不是近實時的搜尋了!!!主要瓶頸在於fsync實際發生磁碟IO寫資料進磁碟,是很耗時的。

寫入流程別改進如下:
(1)資料寫入buffer
(2)每隔一定時間,buffer中的資料被寫入segment檔案,但是先寫入os cache
(3)只要segment寫入os cache,那就直接開啟供search使用,不立即執行commit

資料寫入os cache,並被開啟供搜尋的過程,叫做refresh,預設是每隔1秒refresh一次。也就是說,每隔一秒就會將buffer中的資料寫入一個新的index segment file,先寫入os cache中。所以,es是近實時的,資料寫入到可以被搜尋,預設是1秒。
在這裡插入圖片描述

POST /my_index/_refresh,可以手動refresh,一般不需要手動執行,沒必要,讓es自己搞就可以了

比如說,我們現在的時效性要求,比較低,只要求一條資料寫入es,一分鐘以後才讓我們搜尋到就可以了,那麼就可以調整refresh interval

PUT /my_index
{
  "settings": {
    "refresh_interval": "30s" 
  }
}