您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何進(jìn)行Elasticsearch數(shù)據(jù)寫入的分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
一、Elasticsearch & Lucene 是什么?
分布式的實(shí)時(shí)文件存儲(chǔ),每個(gè)字段都被索引并可被搜索
分布式的實(shí)時(shí)分析搜索引擎
可以擴(kuò)展到上百臺(tái)服務(wù)器,處理 PB 級(jí)結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)
二、Elasticsearch & Lucene 的關(guān)系
因此,入門 ES 的同學(xué),稍微了解下 Lucene 即可。如果往高級(jí)走,還是需要學(xué)習(xí) Lucene 底層的原理。因?yàn)榈古潘饕?、打分機(jī)制、全文檢索原理、分詞原理等等,這些都是不會(huì)過(guò)時(shí)的技術(shù)。
三、新文檔寫入流程
3.1 數(shù)據(jù)模型
如圖
一個(gè) ES Index (索引,比如商品搜索索引、訂單搜索索引)集群下,有多個(gè) Node (節(jié)點(diǎn))組成。每個(gè)節(jié)點(diǎn)就是 ES 的實(shí)例。
每個(gè)節(jié)點(diǎn)上會(huì)有多個(gè) shard (分片), P1 P2 是主分片 R1 R2 是副本分片
每個(gè)分片上對(duì)應(yīng)著就是一個(gè) Lucene Index(底層索引文件)
Lucene Index 是一個(gè)統(tǒng)稱。由多個(gè) Segment (段文件,就是倒排索引)組成。每個(gè)段文件存儲(chǔ)著就是 Doc 文檔。
3.2 Lucene Index
lucene 中,單個(gè)倒排索引文件稱為 segment。其中有一個(gè)文件,記錄了所有 segments 的信息,稱為 commit point:
文檔 create 新寫入時(shí),會(huì)生成新的 segment。同樣會(huì)記錄到 commit point 里面
文檔查詢,會(huì)查詢所有的 segments
當(dāng)一個(gè)段存在文檔被刪除,會(huì)維護(hù)該信息在 .liv 文件里面
3.3 新文檔寫入流程
數(shù)據(jù)持久化步驟如下:write -> refresh -> flush -> merge
3.3.1 write 過(guò)程
一個(gè)新文檔過(guò)來(lái),會(huì)存儲(chǔ)在 in-memory buffer 內(nèi)存緩存區(qū)中,順便會(huì)記錄 Translog。
in-memory buffer 中的文檔寫入到新的 segment 中,但 segment 是存儲(chǔ)在文件系統(tǒng)的緩存中。此時(shí)文檔可以被搜索到
最后清空 in-memory buffer。注意: Translog 沒(méi)有被清空,為了將 segment 數(shù)據(jù)寫到磁盤
文檔經(jīng)過(guò) refresh 后, segment 暫時(shí)寫到文件系統(tǒng)緩存,這樣避免了性能 IO 操作,又可以使文檔搜索到。refresh 默認(rèn) 1 秒執(zhí)行一次,性能損耗太大。一般建議稍微延長(zhǎng)這個(gè) refresh 時(shí)間間隔,比如 5 s。因此,ES 其實(shí)就是準(zhǔn)實(shí)時(shí),達(dá)不到真正的實(shí)時(shí)。
3.3.3 flush 過(guò)程
上個(gè)過(guò)程中 segment 在文件系統(tǒng)緩存中,會(huì)有意外故障文檔丟失。那么,為了保證文檔不會(huì)丟失,需要將文檔寫入磁盤。那么文檔從文件緩存寫入磁盤的過(guò)程就是 flush。寫入磁盤后,清空 translog。
保證文件緩存中的文檔不丟失
系統(tǒng)重啟時(shí),從 translog 中恢復(fù)
新的 segment 收錄到 commit point 中
具體可以看官方文檔:https://www.elastic.co/guide/...
3.3.4 merge 過(guò)程
上面幾個(gè)步驟,可見(jiàn) segment 會(huì)越來(lái)越多,那么搜索會(huì)越來(lái)越慢?怎么處理呢?
就是各個(gè)小段文件,合并成一個(gè)大段文件。段合并過(guò)程
段合并結(jié)束,舊的小段文件會(huì)被刪除
.liv 文件維護(hù)的刪除文檔,會(huì)通過(guò)這個(gè)過(guò)程進(jìn)行清除
四、小結(jié)
如這個(gè)圖,ES 寫入原理不難,記住關(guān)鍵點(diǎn)即可。
write:文檔數(shù)據(jù)到內(nèi)存緩存,并存到 translog
refresh:內(nèi)存緩存中的文檔數(shù)據(jù),到文件緩存中的 segment 。此時(shí)可以被搜到
flush 是緩存中的 segment 文檔數(shù)據(jù)寫入到磁盤
上述就是小編為大家分享的如何進(jìn)行Elasticsearch數(shù)據(jù)寫入的分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。