中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Elasticsearch數據寫入的分析

發布時間:2021-11-30 15:18:18 來源:億速云 閱讀:179 作者:柒染 欄目:數據庫

這期內容當中小編將會給大家帶來有關如何進行Elasticsearch數據寫入的分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

前言
主要講 ES -> Lucene的底層結構,然后詳細描述新數據寫入 ES 和 Lucene 的流程和原理。這是基礎理論知識,整理了一下。

一、Elasticsearch & Lucene 是什么?

如何進行Elasticsearch數據寫入的分析
什么是 Elasticsearch ?
Elasticsearch 是一個基于 Apache Lucene(TM) 的開源搜索引擎。
那 Lucene 是什么?
無論在開源還是專有領域,Lucene 可以被認為是迄今為止最先進、性能最好的、功能最全的搜索引擎庫,并通過簡單的 RESTful API 來隱藏 Lucene 的復雜性,從而讓全文搜索變得簡單。
Elasticsearch 不僅僅是 Lucene 和全文搜索,我們還能這樣去描述它:
  • 分布式的實時文件存儲,每個字段都被索引并可被搜索

  • 分布式的實時分析搜索引擎

  • 可以擴展到上百臺服務器,處理 PB 級結構化或非結構化數據

二、Elasticsearch & Lucene 的關系

如何進行Elasticsearch數據寫入的分析
就像很多業務系統是基于 Spring 實現一樣,Elasticsearch 和 Lucene 的關系很簡單:Elasticsearch 是基于 Lucene 實現的。ES 基于底層這些包,然后進行了擴展,提供了更多的更豐富的查詢語句,并且通過 RESTful API 可以更方便地與底層交互。類似 ES 還有 Solr 也是基于 Lucene 實現的。
在應用開發中,用 Elasticsearch 會很簡單。但是如果你直接用 Lucene,會有大量的集成工作。

因此,入門 ES 的同學,稍微了解下 Lucene 即可。如果往高級走,還是需要學習 Lucene 底層的原理。因為倒排索引、打分機制、全文檢索原理、分詞原理等等,這些都是不會過時的技術。

三、新文檔寫入流程

3.1 數據模型

如何進行Elasticsearch數據寫入的分析

如圖

  • 一個 ES Index (索引,比如商品搜索索引、訂單搜索索引)集群下,有多個 Node (節點)組成。每個節點就是 ES 的實例。

  • 每個節點上會有多個 shard (分片), P1 P2 是主分片 R1 R2 是副本分片

  • 每個分片上對應著就是一個 Lucene Index(底層索引文件)

  • Lucene Index 是一個統稱。由多個 Segment (段文件,就是倒排索引)組成。每個段文件存儲著就是 Doc 文檔。

3.2 Lucene Index

如何進行Elasticsearch數據寫入的分析

lucene 中,單個倒排索引文件稱為 segment。其中有一個文件,記錄了所有 segments 的信息,稱為 commit point:

  • 文檔 create 新寫入時,會生成新的 segment。同樣會記錄到 commit point 里面

  • 文檔查詢,會查詢所有的 segments

  • 當一個段存在文檔被刪除,會維護該信息在 .liv 文件里面

3.3 新文檔寫入流程

新文檔創建或者更新時,進行如下流程:
更新不會修改原來的 segment,更新和創建操作都會生成新的一個 segment。數據哪里來呢?先會存在內存的 bugger 中,然后持久化到 segment 。

數據持久化步驟如下:write -> refresh -> flush -> merge

3.3.1 write 過程

如何進行Elasticsearch數據寫入的分析

一個新文檔過來,會存儲在 in-memory buffer 內存緩存區中,順便會記錄 Translog。

這時候數據還沒到 segment ,是搜不到這個新文檔的。數據只有被 refresh 后,才可以被搜索到。那么 講下 refresh 過程3.3.2 refresh 過程
如何進行Elasticsearch數據寫入的分析
refresh 默認 1 秒鐘,執行一次上圖流程。ES 是支持修改這個值的,通過 index.refresh_interval 設置 refresh (沖刷)間隔時間。refresh 流程大致如下:
  • in-memory buffer 中的文檔寫入到新的 segment 中,但 segment 是存儲在文件系統的緩存中。此時文檔可以被搜索到

  • 最后清空 in-memory buffer。注意: Translog 沒有被清空,為了將 segment 數據寫到磁盤

文檔經過 refresh 后, segment 暫時寫到文件系統緩存,這樣避免了性能 IO 操作,又可以使文檔搜索到。refresh 默認 1 秒執行一次,性能損耗太大。一般建議稍微延長這個 refresh 時間間隔,比如 5 s。因此,ES 其實就是準實時,達不到真正的實時。

3.3.3 flush 過程

如何進行Elasticsearch數據寫入的分析

上個過程中 segment 在文件系統緩存中,會有意外故障文檔丟失。那么,為了保證文檔不會丟失,需要將文檔寫入磁盤。那么文檔從文件緩存寫入磁盤的過程就是 flush。寫入磁盤后,清空 translog。

translog 作用很大:
  • 保證文件緩存中的文檔不丟失

  • 系統重啟時,從 translog 中恢復

  • 新的 segment 收錄到 commit point 中

具體可以看官方文檔:https://www.elastic.co/guide/...

3.3.4 merge 過程

如何進行Elasticsearch數據寫入的分析
如何進行Elasticsearch數據寫入的分析

上面幾個步驟,可見 segment 會越來越多,那么搜索會越來越慢?怎么處理呢?

通過 merge 過程解決:
  • 就是各個小段文件,合并成一個大段文件。段合并過程

  • 段合并結束,舊的小段文件會被刪除

  • .liv 文件維護的刪除文檔,會通過這個過程進行清除

四、小結

如何進行Elasticsearch數據寫入的分析

如這個圖,ES 寫入原理不難,記住關鍵點即可。

write -> refresh -> flush
  • write:文檔數據到內存緩存,并存到 translog

  • refresh:內存緩存中的文檔數據,到文件緩存中的 segment 。此時可以被搜到

  • flush 是緩存中的 segment 文檔數據寫入到磁盤

上述就是小編為大家分享的如何進行Elasticsearch數據寫入的分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德钦县| 灌南县| 保靖县| 姚安县| 香格里拉县| 巴马| 蛟河市| 东安县| 广平县| 左贡县| 凉城县| 纳雍县| 贵南县| 喀喇沁旗| 射阳县| 万盛区| 泰安市| 定边县| 寻甸| 苗栗市| 武隆县| 册亨县| 云林县| 鄂温| 巴林左旗| 澎湖县| 贵定县| 东莞市| 舟山市| 新巴尔虎右旗| 大厂| 河南省| 丰台区| 德兴市| 曲松县| 明水县| 德庆县| 右玉县| 咸丰县| 皋兰县| 台前县|