當前位置:編程學習大全網 - 網絡軟體 - flush、refresh的區別

flush、refresh的區別

先說結論:

Refresh用於把內存中的數據寫入translog 和 in-memory buffer (內存緩存區),會在內存中產生壹個segment提供新增文檔的搜索功能,不會刪除tanslog。

flush:translog達到壹定數據上限後會執行flush操作,將內存中的segment合並為壹個segment將數據持久化到磁盤,同時清除tanslog中的數據, 用於將內存中的段保留在硬盤上

Refresh Flush 都用於使文檔在索引操作後立即可供搜索。 在 Elasticsearch 中添加新文檔時,我們可以對索引調用 _refresh 或 _flush 操作,以使新文檔可用於搜索。

當我們把壹條數據寫入到 Elasticsearch 中後,它並不能馬上被用於搜索。 新增的索引必須寫入到 Segment 後才能被搜索到 因此我們把數據寫入到內存緩沖區之後並不能被搜索到 。新增了壹條記錄時,Elasticsearch 會把數據寫到 translog 和 in-memory buffer (內存緩存區) 中。

在此期間,該文檔不能被搜索,但是我們還是可以通過 ID 使用 GET 來獲得該文檔。 如果希望該文檔能立刻被搜索,需要手動調用 refresh 操作 。在 Elasticsearch 中, 默認情況下 _refresh 操作設置為每秒執行壹次

在此操作期間,內存中緩沖區的內容將復制到內存中新創建的 Segment 中,新數據可用於搜索。

這個 refresh 的時間間隔可以由 index 設置中 index.refresh_interval 來定義。只有在 buffer 的內容寫入到 Segement 後,這個被寫入的文檔才變為可以搜索的文檔。 通常 buffer 裏的內容被寫入到 Segment 裏去,有三個條件

由索引中的設置所指定的 refresh_interval 啟動的周期性的 refresh 。在默認的情況下為 1s。這使對索引的最近更改可見以進行搜索。 默認為 1s。 可以設置為 -1 以禁用刷新。 在 Elasticsearch 7.0 發布之後,如果未明確設置此設置,則至少在 index.search.idle.after 秒之後仍未看到搜索流量的分片在收到搜索請求之前將不會接收後臺刷新。 命中空閑分片的搜索將等待下壹次後臺刷新(在1秒內)。 此行為旨在在不執行搜索時在默認情況下自動優化批量索引。 為了退出此行為,應將顯式值 1s 設置為刷新間隔。

在導入文檔時強制 refresh:PUT twitter/_doc/1?refresh=true

當 In Memory Buffer 滿了,在默認的情況下為 node Heap 的 10%

但是,translog 如何解決持久性問題? 每個 Shard 中都存在壹個 translog,這意味著它與物理磁盤內存有關。 它是同步且安全的,因此即使對於尚未提交的文檔,您也可以獲得持久性和持久性。 如果發生問題,可以還原事務日誌。

Flush 實質上意味著將內存緩沖區中的所有文檔都寫入新的 Lucene Segment ,連同所有現有的內存段壹起被提交到磁盤,該磁盤清除事務日誌。

  • 上一篇:品牌傳播有哪些模型比較好用?
  • 下一篇:成龍歷險記 這個動畫片壹共有多少集?中央少兒頻道裏的動漫世界裏的成龍歷險記放到什麽時候結束?
  • copyright 2024編程學習大全網