天天看點

es 寫入流程

es 寫入流程

elasticsearch寫入資料時涉及到的核心概念講解:

segment file: 存儲反向索引的檔案,每個segment本質上就是一個反向索引,每秒都會生成一個segment檔案,當檔案過多時es會自動進行segment merge(合并檔案),合并時會同時将已經标注删除的文檔實體删除;

commit point(重點了解): 記錄目前所有可用的segment,每個commit point都會維護一個.del檔案(es删除資料本質是不屬于實體删除),當es做删改操作時首先會在.del檔案中聲明某個document已經被删除,檔案内記錄了在某個segment内某個文檔已經被删除,當查詢請求過來時在segment中被删除的檔案是能夠查出來的,但是當傳回結果時會根據commit point維護的那個.del檔案把已經删除的文檔過濾掉;

translog日志檔案: 為了防止elasticsearch當機造成資料丢失保證可靠存儲,es會将每次寫入資料同時寫到translog日志中(圖中會有詳解)。

refresh

es接收資料請求時先存入記憶體中,預設每隔一秒會從記憶體buffer中将資料寫入filesystem cache,這個過程叫做refresh;

fsync

translog會每隔5秒或者在一個變更請求完成之後執行一次fsync操作,将translog從緩存刷入磁盤,這個操作比較耗時,如果對資料一緻性要求不是跟高時建議将索引改為異步,如果節點當機時會有5秒資料丢失;flush

es預設每隔30分鐘會将filesystem cache中的資料刷入磁盤同時清空translog日志檔案,這個過程叫做flush。

https://blog.csdn.net/zsd_31/article/details/79979818

反向索引

正向索引

分詞提取關鍵字

如:

“文檔1”經過分詞,提取了20個關鍵字,每個關鍵詞都會記錄在它的文檔中的出現次數和文檔id;

正向索引:需要掃描索引庫中的所有文檔,根據打分模型,排出名詞後呈現給使用者。

檔案id->關鍵詞的映射

關鍵詞->檔案id清單

{
	 "關鍵詞":帶有此關鍵詞的文檔ID清單。
}

           

繼續閱讀