国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入理解Elasticsearch分片

這篇具有很好參考價值的文章主要介紹了深入理解Elasticsearch分片。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

了解分片的基本原理,對Elasticsearch性能調(diào)優(yōu)有幫助。

關(guān)系梳理

ES底層使用的是Lucene庫,ES的分片(shard )是Lucene的索引,ES的索引是分片的集合,Lucene的索引是由多個段(segment)組成。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

段(segment)

Per-segment search,也即按段搜索,是Lucene中的概念。每個段本身就是一個倒排索引,Lucene中的索引除了表示段的集合外,還增加了提交點的概念,一個提交點就是一個列出了所有已知段的文件。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

Per-segment search的工作流程如下:

  1. 新的文檔首先被寫入內(nèi)存區(qū)的索引緩存(buffer)。
  2. 不時,這些buffer被提交。
  3. 新段被打開,它包含的文檔可以被檢索。
  4. 內(nèi)存的緩存被清除,等待接收新的文檔。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

提交

一次完整的提交會將段刷到磁盤,并寫入一個包含所有段列表的提交點。ES在啟動或重新打開一個索引的過程中使用這個提交點來判斷哪些段隸屬于當(dāng)前分片。

不可變性

寫入磁盤的倒排索引是不可變的,也即段是不可改變的,所以既不能把文檔從舊的段中移除,也不能修改舊的段來更新文檔。取而代之的是,每個提交點會包含一個 .del 文件,它記錄了段中被刪除的文檔。

當(dāng)一個文檔被 “刪除” 時,它實際上只是在 .del 文件中被標(biāo)記為刪除。一個被標(biāo)記為刪除的文檔仍然可以被查詢匹配到,但它會在最終結(jié)果被返回前從結(jié)果集中移除。

文檔更新也是類似的操作方式:當(dāng)一個文檔被更新時,舊版本文檔被標(biāo)記為刪除,文檔的新版本被索引到一個新的段中。 可能兩個版本的文檔都會被一個查詢匹配到,但被刪除的那個舊版本文檔在結(jié)果集返回前會被移除。

近實時搜索

提交一個新的段到磁盤需要調(diào)操作系統(tǒng)的fsync方法,確保段被物理地寫入磁盤,即使斷電也不會丟失數(shù)據(jù)。但是fsync是昂貴的,它不能在每個文檔被索引時就觸發(fā)。所以需要一種更輕量級的方式使新的文檔可以被搜索。

位于ES和磁盤間的是文件系統(tǒng)緩存。在內(nèi)存索引緩存中的文檔被寫入新的段,新的段首先寫入文件系統(tǒng)緩存,這代價很低,之后會被同步到磁盤,這代價很大。一旦一個文件被緩存,它也可以被打開和讀取,就像其他文件一樣。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

Refresh

在ES中,refresh是指這樣一個過程:將In-memory buffer中的文檔寫入到文件系統(tǒng)緩存中新的段,新的段被打開(可被搜索)。默認(rèn)情況下每個分片會每秒自動刷新一次。文檔在In-memory buffer中是不能被搜索的,寫入到段里面才能被搜索。這就是為什么我們說Elasticsearch是近實時搜索: 文檔的變化并不是立即對搜索可見,但會在一秒之內(nèi)變?yōu)榭梢姟?/p>

Flush

在ES中,進行一次提交并刪除事務(wù)日志的操作叫做flush。一些老資料說ES每30分鐘flush一次,或者事務(wù)日志過大也會flush。官網(wǎng)最新的說法是ES根據(jù)需要自動觸發(fā)刷新,主要取決于事務(wù)日志的大小和權(quán)衡執(zhí)行flush的成本。也可以調(diào)用flush API主動flush。

Translog

Translog全稱transaction log(事務(wù)日志)。事務(wù)日志主要是為了防止在兩次提交之間的數(shù)據(jù)丟失。事務(wù)日志也被用來提供實時 CRUD ,當(dāng)你通過文檔ID查詢、更新、刪除一個文檔,在從相應(yīng)的段檢索之前, ES會首先檢查事務(wù)日志最新的改動,這意味著ES總是能夠通過文檔ID實時地獲取到文檔的最新版本。

事務(wù)日志并不是實時落盤的,而是定期刷到磁盤。所以事務(wù)日志其實也是存在丟失的可能性的。那么這里就有一個問題,既然調(diào)用fsync的提交是一種昂貴的操作,為了防止數(shù)據(jù)丟失引入了事務(wù)日志,但是事務(wù)日志也需要刷到磁盤才能保證數(shù)據(jù)不丟,那事務(wù)日志的意義何在?答案是事務(wù)日志的刷盤更輕量級,因為它調(diào)用的是fdatasync這個系統(tǒng)函數(shù),而不是fsync。感興趣的朋友可以了解下fsync和fdatasync的差別。

完整流程

我們將上述知識點串起來得到完整流程。

  1. 當(dāng)一個文檔被索引,它被加入到內(nèi)存緩存,同時寫入事務(wù)日志。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

  1. 分片每秒都進行refresh。refresh后,內(nèi)存緩沖區(qū)的文檔被寫入到文件系統(tǒng)緩存;段被打開,使得新的文檔可以被搜索;緩存被清除。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

  1. 更多的文檔加入到緩沖區(qū),寫入事務(wù)日志,這個過程會持續(xù)。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

  1. 不時的,比如事務(wù)日志很大了,會進行一次全提交。內(nèi)存緩沖區(qū)的所有文檔會寫入到新的段中;緩沖區(qū)被清空;一個提交點寫入磁盤;文件系統(tǒng)緩存通過fsync操作flush到磁盤;事務(wù)日志被清除。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

合并段

通過每秒自動刷新創(chuàng)建新的段,用不了多久段的數(shù)量就爆炸了。每個段都會消費文件句柄、內(nèi)存、CPU資源。更重要的是,每次搜索請求都需要依次檢查每個段。段越多,查詢越慢。

ES通過后臺合并段解決這個問題。小段被合并成大段,再合并成更大的段。合并段時會真正刪除被標(biāo)記為已刪除的文檔。舊的段不會再復(fù)制到更大的新段中。這個過程你不必做什么,當(dāng)你在索引和搜索時ES會自動處理。這個過程不會中斷索引和搜索。

兩個提交的段和一個未提交的段合并為了一個更大的段。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

這期間發(fā)生一系列操作:新的段flush到了硬盤;新的提交點寫入新的段,排除舊的段;新的段打開供搜索;舊的段被刪除。

elasticsearch 分片,數(shù)據(jù)庫,大數(shù)據(jù),elasticsearch,lucene,大數(shù)據(jù),全文檢索

合并大的段會消耗很多IO和CPU,如果不合并又會影響到搜索性能。默認(rèn)情況下,ES會限制合并過程,這樣搜索就可以有足夠的資源進行。optimize API可以強制合并段。文章來源地址http://www.zghlxwxcb.cn/news/detail-813741.html

到了這里,關(guān)于深入理解Elasticsearch分片的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【天衍系列 04】深入理解Flink的ElasticsearchSink組件:實時數(shù)據(jù)流如何無縫地流向Elasticsearch

    【天衍系列 04】深入理解Flink的ElasticsearchSink組件:實時數(shù)據(jù)流如何無縫地流向Elasticsearch

    Flink的Elasticsearch Sink是用于將Flink數(shù)據(jù)流(DataStream)中的數(shù)據(jù)發(fā)送到Elasticsearch的組件。它是Flink的一個連接器(Connector),用于實現(xiàn)將實時處理的結(jié)果或數(shù)據(jù)持續(xù)地寫入Elasticsearch集群中的索引中。 下面是一些關(guān)于Flink的Elasticsearch Sink的基礎(chǔ)概念: 數(shù)據(jù)源(Source) :Flink數(shù)據(jù)流

    2024年02月20日
    瀏覽(23)
  • 使用 Elasticsearch 作為向量數(shù)據(jù)庫:深入研究 dense_vector 和 script_score

    使用 Elasticsearch 作為向量數(shù)據(jù)庫:深入研究 dense_vector 和 script_score

    Elasticsearch 是一個非常強大且靈活的搜索和分析引擎。 雖然其主要用例圍繞全文搜索,但它的用途廣泛,足以用于各種其他功能。 其中一項引起許多開發(fā)人員和數(shù)據(jù)科學(xué)家關(guān)注的功能是使用 Elasticsearch 作為向量數(shù)據(jù)庫。 隨著 dense_vector 數(shù)據(jù)類型的出現(xiàn)以及利用 script_score 函數(shù)

    2024年02月07日
    瀏覽(26)
  • 深入理解Elasticsearch

    Elasticsearch是一個分布式、實時的搜索和分析引擎,基于Lucene庫開發(fā)。它可以處理大量數(shù)據(jù),提供快速、準(zhǔn)確的搜索結(jié)果。在本文中,我們將深入探討Elasticsearch的核心概念、算法原理、最佳實踐和實際應(yīng)用場景。 Elasticsearch起源于2010年,由Elastic Company開發(fā)。它初衷是解決實時

    2024年02月19日
    瀏覽(19)
  • ElasticSearch 數(shù)據(jù)分片

    ElasticSearch 數(shù)據(jù)分片

    一、ElasticSearch 分片 ElasticSearch集群中有許多個節(jié)點(Node),每一個節(jié)點實例就是一個實例;數(shù)據(jù)分布在分片之間。集群的容量和性能主要取決于分片如何在節(jié)點上如何分配。將數(shù)據(jù)分片是為了提高可處理的容量和易于進行水平擴展,為分片做副本是為了提高集群的穩(wěn)定性和提高

    2024年02月03日
    瀏覽(23)
  • 【ES】Elasticsearch-深入理解索引原理

    【ES】Elasticsearch-深入理解索引原理

    索引(Index) ES將數(shù)據(jù)存儲于一個或多個索引中,索引是具有類似特性的文檔的集合。類比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫領(lǐng)域來說,索引相當(dāng)于SQL中的一個數(shù)據(jù)庫,或者一個數(shù)據(jù)存儲方案(schema)。索引由其名稱(必須為全小寫字符)進行標(biāo)識,并通過引用此名稱完成文檔的創(chuàng)建、搜索、更新

    2024年02月04日
    瀏覽(24)
  • 深入理解Elasticsearch的索引映射(mapping)

    當(dāng)我們談?wù)揈lasticsearch時,索引映射是一個核心概念,它定義了如何存儲和檢索數(shù)據(jù)。在Elasticsearch 7.6及更高版本中,映射提供了一系列強大的功能,使您能夠精確地控制數(shù)據(jù)的結(jié)構(gòu)和行為。本文將詳細(xì)介紹映射的關(guān)鍵屬性、用途以及如何正確設(shè)置和優(yōu)化它。 在Elasticsearch中,

    2024年02月22日
    瀏覽(39)
  • 【Elasticsearch】存在數(shù)據(jù)的分片分配流程梳理

    由于master節(jié)點只保存了cluster級別和indices級別的元數(shù)據(jù),但沒有shard在哪個node上的元數(shù)據(jù),需要走一遍allocation流程確定每個shard分配到哪個節(jié)點,allocation使用allocator和deciders進行節(jié)點選擇,allocator負(fù)責(zé)整個流程會找出哪些節(jié)點可以分配,deciders通過多個decider判斷該節(jié)點能否分

    2024年02月02日
    瀏覽(51)
  • Elasticsearch深入理解 并發(fā)寫入導(dǎo)致版本沖突解決方案【實戰(zhàn)】

    Elasticsearch深入理解 并發(fā)寫入導(dǎo)致版本沖突解決方案【實戰(zhàn)】

    ? ? ?數(shù)據(jù)同步中,在使用阿里云Elasticsearch7.10.0版本的集群作為目標(biāo)數(shù)據(jù)源時,在連續(xù)寫入同一文檔(document)出現(xiàn)版本沖突問題。 注意:以下所述均以阿里云7.10.0版本的Elasticsearch集群為前提(不同版本可能會稍有不同) ? ? ? 以生產(chǎn)環(huán)境的錯誤日志信息為例: ElasticsearchSta

    2023年04月18日
    瀏覽(20)
  • 【Elasticsearch】索引恢復(fù)(recovery)流程梳理之副本分片數(shù)據(jù)恢復(fù)

    【Elasticsearch】索引恢復(fù)(recovery)流程梳理之副本分片數(shù)據(jù)恢復(fù)

    也是因為應(yīng)用新的集群狀態(tài)觸發(fā)recovery,進入index階段 進入translog 階段。先嘗試重放本地的translog到global checkpoint 向primary shard發(fā)起start recovery的請求,請求包含replica的localCheckpoint+1。(如果第二步重放translog了,localCheckpoint自然也會增加) 如果開啟了soft delete并且索引是7.4版本

    2024年01月20日
    瀏覽(46)
  • Elasticsearch集群搭建、數(shù)據(jù)分片以及位置坐標(biāo)實現(xiàn)附近的人搜索

    es使用兩種不同的方式來發(fā)現(xiàn)對方: 廣播 單播 也可以同時使用兩者,但默認(rèn)的廣播,單播需要已知節(jié)點列表來完成 當(dāng)es實例啟動的時候,它發(fā)送了廣播的ping請求到地址 224.2.2.4:54328 。而其他的es實例使用同樣的集群名稱響應(yīng)了這個請求。 一般這個默認(rèn)的集群名稱就是上面的

    2024年02月06日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包