Neil Zhu叮雳,簡(jiǎn)書ID Not_GOD,University AI 創(chuàng)始人 & Chief Scientist,致力于推進(jìn)世界人工智能化進(jìn)程架曹。制定并實(shí)施 UAI 中長(zhǎng)期增長(zhǎng)戰(zhàn)略和目標(biāo)榔至,帶領(lǐng)團(tuán)隊(duì)快速成長(zhǎng)為人工智能領(lǐng)域最專業(yè)的力量抵赢。
作為行業(yè)領(lǐng)導(dǎo)者,他和UAI一起在2014年創(chuàng)建了TASA(中國(guó)最早的人工智能社團(tuán)), DL Center(深度學(xué)習(xí)知識(shí)中心全球價(jià)值網(wǎng)絡(luò)),AI growth(行業(yè)智庫培訓(xùn))等铅鲤,為中國(guó)的人工智能人才建設(shè)輸送了大量的血液和養(yǎng)分。此外邢享,他還參與或者舉辦過各類國(guó)際性的人工智能峰會(huì)和活動(dòng),產(chǎn)生了巨大的影響力骇塘,書寫了60萬字的人工智能精品技術(shù)內(nèi)容伊履,生產(chǎn)翻譯了全球第一本深度學(xué)習(xí)入門書《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》款违,生產(chǎn)的內(nèi)容被大量的專業(yè)垂直公眾號(hào)和媒體轉(zhuǎn)載與連載。曾經(jīng)受邀為國(guó)內(nèi)頂尖大學(xué)制定人工智能學(xué)習(xí)規(guī)劃和教授人工智能前沿課程插爹,均受學(xué)生和老師好評(píng)。
Elasticsearch refresh vs. flush
問:
若一個(gè)新的文檔索引進(jìn)ES索引递惋,則它在索引操作執(zhí)行后約1s可以搜索到。然而我們可以直接調(diào)用_flush
或者_refresh
對(duì)索引進(jìn)行操作萍虽。那么這兩者有什么區(qū)別呢——看起來這兩個(gè)操作的結(jié)果都類似睛廊,文檔都是立即可以被搜索的超全?
答:
我們?cè)敿?xì)解釋一下這兩種操作:
refresh
操作有效地對(duì)Lucene index reader調(diào)用了reopen,使得在數(shù)據(jù)的那個(gè)時(shí)間快照進(jìn)行了更新嘶朱。這是Lucene擁有的近實(shí)時(shí)搜索api的特性。
ES refresh
讓文檔可以搜索到光酣,但是不保證這些信息被寫入disk進(jìn)入一個(gè)永久的存儲(chǔ)狀態(tài)疏遏,因?yàn)樗]有調(diào)用fsync
,這就不能保證持久性了救军。讓你數(shù)據(jù)獲得持久性的是Lucene commit财异,這個(gè)操作代價(jià)比較大。
當(dāng)你可以每秒都調(diào)用lucene reopen時(shí)唱遭,你不能這樣使用lucene的commit戳寸。
借助lucene你可以盡可能頻繁地調(diào)用reopen以使新的文檔可以被搜索到,但是你仍然需要調(diào)用commit來確保數(shù)據(jù)寫入disk并且fsynced拷泽,這樣會(huì)安全疫鹊。
ES通過增加了一個(gè)在每個(gè)shard(一個(gè)lucene的索引)上的事務(wù)解決這個(gè)問題袖瞻,還未被commit的寫操作會(huì)被存起來。事務(wù)log被fsynced拆吆,已經(jīng)安全了虏辫,所以你每時(shí)每刻都獲得了持久性,甚至對(duì)于那些沒有被commit的文檔锈拨,都是這樣砌庄。因?yàn)?code>refresh每秒自動(dòng)地發(fā)生,所以你可以近實(shí)時(shí)地搜索文檔奕枢,并且如果有不好的事件發(fā)生娄昆,事務(wù)log可以被替代從而恢復(fù)那些丟失的文檔。事務(wù)log的優(yōu)越性是它可以被用來做其他的事情缝彬,例如提供實(shí)時(shí)的get_by_id
萌焰。
elasticsearch flush
高效地觸發(fā)lucene commit,并同時(shí)清空事務(wù)log谷浅,因?yàn)橐坏?shù)據(jù)在lucene層面提交扒俯,持久性將會(huì)由lucene保證。Flush
同樣是一個(gè)api一疯,也可以進(jìn)行微調(diào)撼玄,雖然通常沒有必要這樣。Flush
自動(dòng)發(fā)生取決于事務(wù)log增加了多少操作墩邀、它們有多大掌猛、最后一次flush何時(shí)發(fā)生。