現(xiàn)有流程的問題坛增,每次都必須等待fsync將segment刷入磁盤获雕,才能將segment打開供search使用,這樣的話收捣,從一個document寫入届案,到它可以被搜索,可能會超過1分鐘0瞻i沟摺!這就不是近實時的搜索了8莉恰Iㄒ埂悦荒!主要瓶頸在于fsync實際發(fā)生磁盤IO寫數(shù)據(jù)進磁盤求类,是很耗時的狱杰。
寫入流程別改進如下:
(1)數(shù)據(jù)寫入buffer
(2)每隔一定時間,buffer中的數(shù)據(jù)被寫入segment文件期奔,但是先寫入os cache
(3)只要segment寫入os cache侧馅,那就直接打開供search使用,不立即執(zhí)行commit呐萌。
數(shù)據(jù)寫入os cache施禾,并被打開供搜索的過程,叫做refresh搁胆,默認是每隔1秒refresh一次弥搞。也就是說,每隔一秒就會將buffer中的數(shù)據(jù)寫入一個新的index segment file渠旁,先寫入os cache中攀例。所以,es是近實時的顾腊,數(shù)據(jù)寫入到可以被搜索粤铭,默認是1秒。
POST /my_index/_refresh
可以手動refresh杂靶,一般不需要手動執(zhí)行梆惯,沒必要酱鸭,讓es自己搞就可以了。
比如說我們現(xiàn)在的時效性要求垛吗,比較低凹髓,只要求一條數(shù)據(jù)寫入es,一分鐘以后才讓我們搜索到就可以了怯屉,那么就可以調(diào)整refresh interval
PUT /my_index
{
"settings": {
"refresh_interval": "30s"
}
}