ElasticSearch最佳入門實踐(六十八)優化寫入流程實現NRT近實時(filesystem cache,refresh)
阿新 • • 發佈:2018-11-18
現有流程的問題,每次都必須等待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"
}
}