1歼秽、優(yōu)化的寫入流程
(1)數(shù)據(jù)寫入buffer緩沖和translog日志文件
(2)每隔一秒鐘应役,buffer中的數(shù)據(jù)被寫入新的segment file,并進(jìn)入os cache,此時(shí)segment被打開并供search使用
(3)buffer被清空
(4)重復(fù)1~3箩祥,新的segment不斷添加院崇,buffer不斷被清空,而translog中的數(shù)據(jù)不斷累加
(5)當(dāng)translog長(zhǎng)度達(dá)到一定程度的時(shí)候袍祖,commit操作發(fā)生
(5-1)buffer中的所有數(shù)據(jù)寫入一個(gè)新的segment底瓣,并寫入os cache,打開供使用
(5-2)buffer被清空
(5-3)一個(gè)commit ponit被寫入磁盤蕉陋,標(biāo)明了所有的index segment
(5-4)filesystem cache中的所有index segment file緩存數(shù)據(jù)捐凭,被fsync強(qiáng)行刷到磁盤上
(5-5)現(xiàn)有的translog被清空,創(chuàng)建一個(gè)新的translog
2、基于translog和commit point,如何進(jìn)行數(shù)據(jù)恢復(fù)
fsync+清空translog萤彩,就是flush,默認(rèn)每隔30分鐘flush一次官套,或者當(dāng)translog過(guò)大的時(shí)候,也會(huì)flush蚁孔。
POST /my_index/_flush
一般來(lái)說(shuō)別手動(dòng)flush奶赔,讓它自動(dòng)執(zhí)行就可以了
translog,每隔5秒被fsync一次到磁盤上杠氢。在一次增刪改操作之后站刑,當(dāng)fsync在primary shard和replica shard都成功之后,那次增刪改操作才會(huì)成功鼻百。
但是這種在一次增刪改時(shí)強(qiáng)行fsync translog可能會(huì)導(dǎo)致部分操作比較耗時(shí)绞旅,也可以允許部分?jǐn)?shù)據(jù)丟失,設(shè)置異步fsync translog
PUT /my_index/_settings
{
"index.translog.durability": "async",
"index.translog.sync_interval": "5s"
}