成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

十張圖說清Elasticsearch原理!

開發 后端 開發工具
說到 Elasticsearch,其中最明顯的一個特點就是 near real-time 準實時,當文檔存儲在 Elasticsearch 中時,將在 1 秒內以幾乎實時的方式對其進行索引和完全搜索。那為什么說 ES 是準實時的呢?

 說到 Elasticsearch,其中最明顯的一個特點就是 near real-time 準實時,當文檔存儲在 Elasticsearch 中時,將在 1 秒內以幾乎實時的方式對其進行索引和完全搜索。那為什么說 ES 是準實時的呢?

[[340533]]
圖片來自 Pexels

 

Lucene 和 ES

Lucene

Lucene 是 Elasticsearch所基于的 Java 庫,它引入了按段搜索的概念:

  • Segment:也叫段,類似于倒排索引,相當于一個數據集。
  • Commit point:提交點,記錄著所有已知的段。
  • Lucene index:“a collection of segments plus a commit point”。由一堆 Segment 的集合加上一個提交點組成。

對于一個 Lucene index 的組成,如下圖所示:

 

ES

一個 Elasticsearch Index 由一個或者多個 shard(分片)組成。

而 Lucene 中的 Lucene index 相當于 ES 的一個 shard。

 

寫入過程

寫入過程 1.0(不完善)

寫入過程 1.0 如下:

  • 不斷將 Document 寫入到 In-memory buffer(內存緩沖區)。
  • 當滿足一定條件后內存緩沖區中的 Documents 刷新到磁盤。
  • 生成新的 segment 以及一個 Commit point 提交點。
  • 這個 segment 就可以像其他 segment 一樣被讀取了。

畫圖如下:

 

將文件刷新到磁盤是非常耗費資源的,而且在內存緩沖區和磁盤中間存在一個高速緩存(cache),一旦文件進入到 cache 就可以像磁盤上的 segment 一樣被讀取了。

寫入過程 2.0

寫入過程 2.0 如下:

  • 不斷將 Document 寫入到 In-memory buffer(內存緩沖區)。
  • 當滿足一定條件后內存緩沖區中的 Documents 刷新到高速緩存(cache)。
  • 生成新的 segment,這個 segment 還在 cache 中。
  • 這時候還沒有 commit,但是已經可以被讀取了。

畫圖如下:

 

數據從 buffer 到 cache 的過程是定期每秒刷新一次。所以新寫入的 Document 最慢 1 秒就可以在 cache 中被搜索到。

而 Document 從 buffer 到 cache 的過程叫做 ?refresh。一般是 1 秒刷新一次,不需要進行額外修改。

當然,如果有修改的需要,可以參考文末的相關資料。這也就是為什么說 Elasticsearch 是準實時的。

使文檔立即可見:

  1. PUT /test/_doc/1?refresh 
  2. {"test""test"
  3.  
  4. // 或者 
  5. PUT /test/_doc/2?refresh=true 
  6. {"test""test"

Translog 事務日志

此處可以聯想 MySQL 的 binlog,ES 中也存在一個 translog 用來失敗恢復:

  • Document 不斷寫入到 In-memory buffer,此時也會追加 translog。
  • 當 buffer 中的數據每秒 refresh 到 cache 中時,translog 并沒有進入到刷新到磁盤,是持續追加的。
  • translog 每隔 5s 會 fsync 到磁盤。
  • translog 會繼續累加變得越來越大,當 translog 大到一定程度或者每隔一段時間,會執行 flush。

 

flush 操作會分為以下幾步執行:

  • buffer 被清空。
  • 記錄 commit point。
  • cache 內的 segment 被 fsync 刷新到磁盤。
  • translog 被刪除。

 

值得注意的是:

  • translog 每 5s 刷新一次磁盤,所以故障重啟,可能會丟失 5s 的數據。
  • translog 執行 flush 操作,默認 30 分鐘一次,或者 translog 太大也會執行。

手動執行 flush:

  1. POST /my-index-000001/_flush 

刪除和更新

segment 不可改變,所以 docment 并不能從之前的 segment 中移除或更新。

所以每次 commit, 生成 commit point 時,會有一個 .del 文件,里面會列出被刪除的 document(邏輯刪除)。

而查詢時,獲取到的結果在返回前會經過 .del 過濾。更新時,也會標記舊的 docment 被刪除,寫入到 .del 文件,同時會寫入一個新的文件。

此時查詢會查詢到兩個版本的數據,但在返回前會被移除掉一個。

 

segment 合并

每 1s 執行一次 refresh 都會將內存中的數據創建一個 segment。

segment 數目太多會帶來較大的麻煩。每一個 segment 都會消耗文件句柄、內存和 cpu 運行周期。

更重要的是,每個搜索請求都必須輪流檢查每個 segment ;所以 segment 越多,搜索也就越慢。

在 ES 后臺會有一個線程進行 segment 合并:

  • refresh 操作會創建新的 segment 并打開以供搜索使用。
  • 合并進程選擇一小部分大小相似的 segment,并且在后臺將它們合并到更大的 segment 中。這并不會中斷索引和搜索。
  • 當合并結束,老的 segment 被刪。

說明合并完成時的活動:

  • 新的 segment 被刷新(flush)到了磁盤。 寫入一個包含新 segment 且排除舊的和較小的 segment的新 commit point。
  • 新的 segment 被打開用來搜索。
  • 老的 segment 被刪除。

 

物理刪除:在 segment merge 這塊,那些被邏輯刪除的 document 才會被真正的物理刪除。

總結

主要介紹了內部寫入和刪除的過程,需要了解 refresh、fsync、flush、.del、segment merge 等名詞的具體含義。

完整畫圖如下:

 

以上就是個人分享的 ES 相關的內容,主要目的是組內技術分享,進行掃盲。不對之處,希望大家留言指正。

相關資料:

  • 準實時搜索:

https://www.elastic.co/guide/en/elasticsearch/reference/7.9/near-real-time.html

  • Refresh API:

https://www.elastic.co/guide/en/elasticsearch/reference/7.9/indices-refresh.html

  • Flush API:

https://www.elastic.co/guide/en/elasticsearch/reference/7.9/indices-flush.html

作者:劉志航

編輯:陶家龍

出處:轉載自公眾號劉志航(ID:liuzhihangs)

責任編輯:武曉燕 來源: 劉志航
相關推薦

2021-05-07 17:11:19

負載均衡運維服務

2022-03-07 17:43:30

注冊微服務架構

2022-09-26 11:32:14

用戶分層服務業務

2021-03-18 12:16:44

用戶分層業務

2021-01-28 11:39:01

數據分析銷售

2022-07-05 11:18:50

數據分析銷售業績

2018-05-28 21:17:57

大數據分析軟件

2014-03-25 10:38:30

機器學習非線性

2021-10-22 09:28:15

開發技能代碼

2017-04-19 10:55:20

機器學習基本概念

2024-01-05 16:27:06

2015-04-01 13:57:49

2011-11-30 09:57:57

2017-10-13 12:51:36

語言PHP、Python、差異比較

2022-04-11 11:55:34

架構技術調優

2025-05-19 08:50:34

MCP可視化服務器

2023-10-10 08:16:07

Spring依賴注入SpEL表達式

2018-10-24 09:25:03

數據中心現狀差異

2024-03-20 10:32:29

跨域JSONP后端

2021-11-02 06:58:53

架構線程池參數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美国一级毛片a | 欧美精品91 | 免费性视频 | 一级黄在线观看 | 国产亚洲一区二区三区 | 亚洲视频中文字幕 | 国产精品视频久久久久 | 欧美精品一区三区 | 精品久久99| 伊人精品视频 | 特级丰满少妇一级aaaa爱毛片 | 国产乱码精品一区二区三区中文 | 亚洲人va欧美va人人爽 | 国产成人综合亚洲欧美94在线 | 婷婷中文在线 | 亚洲成人一二三 | 国产精品视频在线观看 | 欧美在线视频网 | 看片国产 | 又爽又黄axxx片免费观看 | 91综合网| 欧美在线观看一区 | 国产福利资源在线 | 国产91精品在线 | 免费视频99| 999久久久| 国产亚洲一区二区三区在线观看 | 少妇午夜一级艳片欧美精品 | 久久成人精品一区二区三区 | 国产免费观看久久黄av片涩av | 91中文字幕在线观看 | 男人阁久久 | 妞干网av | 久久久区| 久久999| 99re99| 99re在线免费视频 | 天天干夜夜操 | 欧美精品一二三区 | 中文字幕国产 | 欧美日韩亚 |