1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ElasticSearch 面試 4 連炮,這誰頂?shù)米。?/h1>

        共 4734字,需瀏覽 10分鐘

         ·

        2021-01-29 13:30

        不點(diǎn)藍(lán)字,我們哪來故事?

        每天 11 點(diǎn)更新文章,餓了點(diǎn)外賣,點(diǎn)擊 ??《無門檻外賣優(yōu)惠券,每天免費(fèi)領(lǐng)!》


        • 面試題
        • 面試官心理分析
        • 面試題剖析
          • es 寫數(shù)據(jù)過程
          • es 讀數(shù)據(jù)過程
          • es 搜索數(shù)據(jù)過程
          • 寫數(shù)據(jù)底層原理
          • 刪除/更新數(shù)據(jù)底層原理
          • 底層 lucene
          • 倒排索引

        面試題

        es 寫入數(shù)據(jù)的工作原理是什么啊?es 查詢數(shù)據(jù)的工作原理是什么???底層的 lucene 介紹一下唄?倒排索引了解嗎?

        面試官心理分析

        問這個,其實(shí)面試官就是要看看你了解不了解 es 的一些基本原理,因?yàn)橛?es 無非就是寫入數(shù)據(jù),搜索數(shù)據(jù)。你要是不明白你發(fā)起一個寫入和搜索請求的時候,es 在干什么,那你真的是......

        對 es 基本就是個黑盒,你還能干啥?你唯一能干的就是用 es 的 api 讀寫數(shù)據(jù)了。要是出點(diǎn)什么問題,你啥都不知道,那還能指望你什么呢?

        面試題剖析

        es 寫數(shù)據(jù)過程

        • 客戶端選擇一個 node 發(fā)送請求過去,這個 node 就是?coordinating node(協(xié)調(diào)節(jié)點(diǎn))。

        • coordinating node?對 document 進(jìn)行路由?,將請求轉(zhuǎn)發(fā)給對應(yīng)的 node(有 primary shard)。

        • 實(shí)際的 node 上的?primary shard?處理請求,然后將數(shù)據(jù)同步到?replica node。

        • coordinating?node

          如果發(fā)現(xiàn)

          primary?node

          和所有

          replica?node

          都搞定之后,就返回響應(yīng)結(jié)果給客戶端。

          es-write

        es 讀數(shù)據(jù)過程

        可以通過?doc id?來查詢,會根據(jù)?doc id?進(jìn)行 hash,判斷出來當(dāng)時把?doc id?分配到了哪個 shard 上面去,從那個 shard 去查詢。

        • 客戶端發(fā)送請求到任意?一個 node,成為?coordinate node。
        • coordinate node?對?doc id?進(jìn)行哈希路由,將請求轉(zhuǎn)發(fā)到對應(yīng)的 node,此時會使用?round-robin?隨機(jī)輪詢算法?,在?primary shard?以及其所有 replica 中隨機(jī)選擇一個,讓讀請求負(fù)載均衡。
        • 接收請求的 node 返回 document 給?coordinate node
        • coordinate node?返回 document 給客戶端。

        es 搜索數(shù)據(jù)過程

        es 最強(qiáng)大的是做全文檢索,就是比如你有三條數(shù)據(jù):

        java真好玩兒啊
        java好難學(xué)啊
        j2ee特別牛

        你根據(jù)?java?關(guān)鍵詞來搜索,將包含?java的?document?給搜索出來。es 就會給你返回:java真好玩兒啊,java好難學(xué)啊。

        • 客戶端發(fā)送請求到一個?coordinate node。
        • 協(xié)調(diào)節(jié)點(diǎn)將搜索請求轉(zhuǎn)發(fā)到所有?的 shard 對應(yīng)的?primary shard?或?replica shard,都可以。
        • query phase:每個 shard 將自己的搜索結(jié)果(其實(shí)就是一些?doc id)返回給協(xié)調(diào)節(jié)點(diǎn),由協(xié)調(diào)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)的合并、排序、分頁等操作,產(chǎn)出最終結(jié)果。
        • fetch phase:接著由協(xié)調(diào)節(jié)點(diǎn)根據(jù)?doc id?去各個節(jié)點(diǎn)上拉取實(shí)際?的?document?數(shù)據(jù),最終返回給客戶端。

        寫數(shù)據(jù)底層原理

        es-write-detail

        先寫入內(nèi)存 buffer,在 buffer 里的時候數(shù)據(jù)是搜索不到的;同時將數(shù)據(jù)寫入 translog 日志文件。

        如果 buffer 快滿了,或者到一定時間,就會將內(nèi)存 buffer 數(shù)據(jù)?refresh?到一個新的?segment file?中,但是此時數(shù)據(jù)不是直接進(jìn)入?segment file?磁盤文件,而是先進(jìn)入?os cache?。這個過程就是?refresh。

        每隔 1 秒鐘,es 將 buffer 中的數(shù)據(jù)寫入一個新的?segment file,每秒鐘會產(chǎn)生一個新的磁盤文件?segment file,這個?segment file?中就存儲最近 1 秒內(nèi) buffer 中寫入的數(shù)據(jù)。

        但是如果 buffer 里面此時沒有數(shù)據(jù),那當(dāng)然不會執(zhí)行 refresh 操作,如果buffer里面有數(shù)據(jù),默認(rèn) 1 秒鐘執(zhí)行一次 refresh 操作,刷入一個新的 segment file 中。

        操作系統(tǒng)里面,磁盤文件其實(shí)都有一個東西,叫做?os cache,即操作系統(tǒng)緩存,就是說數(shù)據(jù)寫入磁盤文件之前,會先進(jìn)入?os cache,先進(jìn)入操作系統(tǒng)級別的一個內(nèi)存緩存中去。只要?buffer?中的數(shù)據(jù)被 refresh 操作刷入?os cache中,這個數(shù)據(jù)就可以被搜索到了。

        為什么叫 es 是準(zhǔn)實(shí)時?的?NRT,全稱?near real-time。默認(rèn)是每隔 1 秒 refresh 一次的,所以 es 是準(zhǔn)實(shí)時的,因?yàn)閷懭氲臄?shù)據(jù) 1 秒之后才能被看到??梢酝ㄟ^ es 的?restful api?或者?java api手動?執(zhí)行一次 refresh 操作,就是手動將 buffer 中的數(shù)據(jù)刷入?os cache中,讓數(shù)據(jù)立馬就可以被搜索到。只要數(shù)據(jù)被輸入?os cache?中,buffer 就會被清空了,因?yàn)椴恍枰A?buffer 了,數(shù)據(jù)在 translog 里面已經(jīng)持久化到磁盤去一份了。

        重復(fù)上面的步驟,新的數(shù)據(jù)不斷進(jìn)入 buffer 和 translog,不斷將?buffer?數(shù)據(jù)寫入一個又一個新的?segment file?中去,每次?refresh?完 buffer 清空,translog保留。隨著這個過程推進(jìn),translog 會變得越來越大。當(dāng) translog 達(dá)到一定長度的時候,就會觸發(fā)?commit?操作。

        commit 操作發(fā)生第一步,就是將 buffer 中現(xiàn)有數(shù)據(jù)?refresh?到?os cache?中去,清空 buffer。然后,將一個?commit point?寫入磁盤文件,里面標(biāo)識著這個?commit point?對應(yīng)的所有?segment file,同時強(qiáng)行將?os cache?中目前所有的數(shù)據(jù)都?fsync?到磁盤文件中去。最后清空?現(xiàn)有 translog 日志文件,重啟一個 translog,此時 commit 操作完成。

        這個 commit 操作叫做?flush。默認(rèn) 30 分鐘自動執(zhí)行一次?flush,但如果 translog 過大,也會觸發(fā)?flush。flush 操作就對應(yīng)著 commit 的全過程,我們可以通過 es api,手動執(zhí)行 flush 操作,手動將 os cache 中的數(shù)據(jù) fsync 強(qiáng)刷到磁盤上去。

        translog 日志文件的作用是什么?你執(zhí)行 commit 操作之前,數(shù)據(jù)要么是停留在 buffer 中,要么是停留在 os cache 中,無論是 buffer 還是 os cache 都是內(nèi)存,一旦這臺機(jī)器死了,內(nèi)存中的數(shù)據(jù)就全丟了。所以需要將數(shù)據(jù)對應(yīng)的操作寫入一個專門的日志文件?translog?中,一旦此時機(jī)器宕機(jī),再次重啟的時候,es 會自動讀取 translog 日志文件中的數(shù)據(jù),恢復(fù)到內(nèi)存 buffer 和 os cache 中去。

        translog 其實(shí)也是先寫入 os cache 的,默認(rèn)每隔 5 秒刷一次到磁盤中去,所以默認(rèn)情況下,可能有 5 秒的數(shù)據(jù)會僅僅停留在 buffer 或者 translog 文件的 os cache 中,如果此時機(jī)器掛了,會丟失?5 秒鐘的數(shù)據(jù)。但是這樣性能比較好,最多丟 5 秒的數(shù)據(jù)。也可以將 translog 設(shè)置成每次寫操作必須是直接?fsync?到磁盤,但是性能會差很多。

        實(shí)際上你在這里,如果面試官沒有問你 es 丟數(shù)據(jù)的問題,你可以在這里給面試官炫一把,你說,其實(shí) es 第一是準(zhǔn)實(shí)時的,數(shù)據(jù)寫入 1 秒后可以搜索到;可能會丟失數(shù)據(jù)的。有 5 秒的數(shù)據(jù),停留在 buffer、translog os cache、segment file os cache 中,而不在磁盤上,此時如果宕機(jī),會導(dǎo)致 5 秒的數(shù)據(jù)丟失?。

        數(shù)據(jù)寫入 segment file 之后,同時就建立好了倒排索引。

        刪除/更新數(shù)據(jù)底層原理

        如果是刪除操作,commit 的時候會生成一個?.del?文件,里面將某個 doc 標(biāo)識為?deleted?狀態(tài),那么搜索的時候根據(jù)?.del?文件就知道這個 doc 是否被刪除了。

        如果是更新操作,就是將原來的 doc 標(biāo)識為?deleted?狀態(tài),然后新寫入一條數(shù)據(jù)。

        buffer 每次 refresh 一次,就會產(chǎn)生一個?segment file,所以默認(rèn)情況下是 1 秒鐘一個?segment file,這樣下來?segment file?會越來越多,此時會定期執(zhí)行 merge。每次 merge 的時候,會將多個?segment file?合并成一個,同時這里會將標(biāo)識為?deleted?的 doc 給物理刪除掉?,然后將新的?segment file?寫入磁盤,這里會寫一個?commit point,標(biāo)識所有新的?segment file,然后打開?segment file?供搜索使用,同時刪除舊的?segment file

        底層 lucene

        簡單來說,lucene 就是一個 jar 包,里面包含了封裝好的各種建立倒排索引的算法代碼。我們用 Java 開發(fā)的時候,引入 lucene jar,然后基于 lucene 的 api 去開發(fā)就可以了。

        通過 lucene,我們可以將已有的數(shù)據(jù)建立索引,lucene 會在本地磁盤上面,給我們組織索引的數(shù)據(jù)結(jié)構(gòu)。

        倒排索引

        在搜索引擎中,每個文檔都有一個對應(yīng)的文檔 ID,文檔內(nèi)容被表示為一系列關(guān)鍵詞的集合。例如,文檔 1 經(jīng)過分詞,提取了 20 個關(guān)鍵詞,每個關(guān)鍵詞都會記錄它在文檔中出現(xiàn)的次數(shù)和出現(xiàn)位置。

        那么,倒排索引就是關(guān)鍵詞到文檔?ID 的映射,每個關(guān)鍵詞都對應(yīng)著一系列的文件,這些文件中都出現(xiàn)了關(guān)鍵詞。

        舉個栗子。

        有以下文檔:

        DocIdDoc
        1谷歌地圖之父跳槽 Facebook
        2谷歌地圖之父加盟 Facebook
        3谷歌地圖創(chuàng)始人拉斯離開谷歌加盟 Facebook
        4谷歌地圖之父跳槽 Facebook 與 Wave 項(xiàng)目取消有關(guān)
        5谷歌地圖之父拉斯加盟社交網(wǎng)站 Facebook

        對文檔進(jìn)行分詞之后,得到以下倒排索引?。

        WordIdWordDocIds
        1谷歌1,2,3,4,5
        2地圖1,2,3,4,5
        3之父1,2,4,5
        4跳槽1,4
        5Facebook1,2,3,4,5
        6加盟2,3,5
        7創(chuàng)始人3
        8拉斯3,5
        9離開3
        104
        ......

        另外,實(shí)用的倒排索引還可以記錄更多的信息,比如文檔頻率信息,表示在文檔集合中有多少個文檔包含某個單詞。

        那么,有了倒排索引,搜索引擎可以很方便地響應(yīng)用戶的查詢。比如用戶輸入查詢?Facebook,搜索系統(tǒng)查找倒排索引,從中讀出包含這個單詞的文檔,這些文檔就是提供給用戶的搜索結(jié)果。


        往期推薦

        MyBatis 的執(zhí)行流程,寫得太好了!

        Spring 雙層事務(wù),拋出的異常消失在隱秘的角落?

        4 大軟件架構(gòu),你是否都經(jīng)歷過?

        i++存在什么樣的線程安全問題?關(guān)鍵字volatile能解什么問題?

        下方二維碼關(guān)注我

        技術(shù)草根,堅(jiān)持分享?編程,算法,架構(gòu)

        看完文章,餓了點(diǎn)外賣,點(diǎn)擊 ??《無門檻外賣優(yōu)惠券,每天免費(fèi)領(lǐng)!》

        朋友,助攻一把!點(diǎn)個在看!
        瀏覽 50
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報

        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            特级西西444www高清视频| 久久视频99| 亚欧黄色| 天天干天天干天天操| 夜夜嗨AⅤ一区二区三区| 99久热在线精品| 黄片高清视频| 99久久99久久精品免费看小说。 | 一本道不卡色色| 国产非洲欧美在线| 免费观看一级A片| 亚洲福利女神成人福利| 中文字幕日日| 波多野结衣被操| 国产无遮挡又黄又爽又色视频软件 | 黄色电影视频网站| jizz国产精品| 天天干一干| 欧美一二三区| 婷婷激情综合| 免费无码A片在线观看全| 国产成人综合亚洲| 国产白嫩精品久久久久久| 天天操婷婷| 老熟妇搡BBBB搡BBBB| 天天干天天日天天色| 激情AV在线| 欧美日韩一区二区三区| 天堂色| 性性性性性XXXXX| 成人性爱视频网| 久久九热| 大香蕉操| 国产激情AV| 91丨九色丨蝌蚪丨肥女| 精品国产免费无码久久噜噜噜AV | 中文字幕第二页| 影音先锋成人AV| 国产精品怡红院有限公司| 五月丁香花婷婷| 大肉大捧视频免费观看| 香蕉伊人视频| 视频二区中文字幕| 老熟女痒到不行-ThePorn| 亚洲免费在线| 欧美色图狠狠操| 在线观看黄色网页| 欧美成人怡红院| 一区二区三区无码在线| 日本中文字幕在线| 99热精品久久| 日皮网站在线观看| 无码人妻精品一区二区三区蜜臀百度| 免费一级做a爱片毛片A片小说| 18国产免费视频| 苍井空中文字幕在线观看| 亚洲影音先锋在线| 久久私人影院| 在线永久看片免费的视频| 国产操B| 91久久精品一区二区三区| 2025国产在线| 日本不卡视频在线| 99在线免费视频| 91大神精品| 久久一区二区三区四区五区| 欧美日韩国产一区二区| 黄色视频在线免费观看高清视频| 亚洲天堂中文| 欧美一区二区在线视频| 影音先锋一区二区三区| 欧美日韩岛国| 九九综合伊人7777777| 久在线| 麻豆精品一区二区三区| 国产探花在线观看| 黄色一级免费| 中文字幕无码一区二区| 天天干人人干| 亚洲国产婷婷| 国产亚洲无码| 骚逼无码| 国产乱码一区二区三区四区在线 | 无码一区二区三区免费| 精品国产123| 啊v在线| 樱桃码一区二区三区| 色婷婷香蕉在线一区二区| 一区二区无码区| 免费在线观看av| 免费日批网站| 影音先锋成人资源网| 土牛AV| 无码二区三区| 天天撸视频| 国产精品7777| 蜜桃Av噜噜一区二区三| 91麻豆大奶巨乳一区白虎| 天天日天天干天天草| 一级黄色视频在线观看| 丝袜二区| 青青草中文字幕| 亚洲色色频| 少妇精品久久久久久久久久| 丰满的人妻一区二区三区果冻 | 免费无码在线观看| 影音先锋91| 亚洲av电影网| 一级操逼大片| 91无码人妻一区二区成人AⅤ| 不雅一级| 精品乱子伦| 最好看的2019中文在线大全电影| 韩国无码视频在线观看| 一区二区三区高清无码| 国产精品白浆| 欧美一区二区三曲的| 黄色的视频网站| 欧美成人免费电影| 成人AV在线看| 欧美一级久久| 久久丁香五月婷婷五月天激情视频| 青青草原成人视频| 韩国av在线| 五月丁香六月激情综合| 无码国产精品一区二区免费96| 亚洲女同在线| 黄网免费在线观看| 扒开让我91看片在线看| 欧美三P囗交做爰XXXⅩ| 久久久久亚洲AV无码成人片 | 黄色在线观看免费| 操人视频网站| 亚洲精品国产精品国自产观看| 久操网在线| 日韩综合在线| 少妇喷水视频| 国产一级片| 国产伦子伦一级A片在线| 思思久久高颜值| 蜜桃av秘无码一区三| 免费中文字幕视频| 无码一区二区三区在线观看| 久久午夜福利视频| 在线免费毛片| 亚洲欧洲自拍| 欧美亚洲成人在线| 大香蕉伊人视频在线观看| 西西888WWW大胆无码| 国产熟睡乱子伦午夜视频_第1集| 国产一区二区三区四区视频| 一级大片免费看| 欧美熟妇精品一二三区| 91丨露脸丨熟女抽搐| 欧美视频综合网| 操大爷影院| 一级一级a免一级a做免费线看内裤 | 超碰人人爽| 久久精品三级视频| 亚洲无码免费在线| 免费黄色a片| 91成人免费视频| 中文字幕操逼| 日韩人妻无码一区二区三区七区 | 操B在线观看| 伊人婷婷大香蕉| 久久婷婷五月| 99热在线观看免费| 69日逼| 亚洲精品视频无码| 亚洲天堂影音先锋| 亚洲国产高清在线观看视频| 精品视频免费| 国产尤物在线| 国产福利在线播放| 无码在线高清| 亚洲AV色香蕉一区二区三区| 成人免费黄色| av久操| 怡春院中文字幕| 亚洲无码成人视频| 久综合网| 亚洲欧美色图| www.天天射| 粉嫩99精品99久久久久久特污| 免费亚洲视频| 国产在线观看免费| 七区九区一区在线| 青青草超碰| 日韩欧美国产视频| 男女黄色免费网站| 俺来也操逼| 国产午夜福利在线| 91大神shunv| 日韩插插| 丰满欧美熟妇免费视频| 怡春院久久| 人人看人人摸人人插| 水蜜桃一区二区| 中文字幕第315页| 日韩人妻系列| 久久亚洲日韩天天做日日做综合亚洲| 天天插天天射| 久久无码在线观看| 日本一级黄色电影网| 日韩欧美中文字幕在线观看| 色婷网| 翔田千里无码一区| 加勒比无码人妻| 亚洲综合一区二区| 日韩精品免费在线观看| 亚洲激情欧美激情| 免费看性蜜桃| www.人人操| 乱子伦国产精品www| 秘蜜桃色一区二区三区在线观看| 网站色色免费看| 久久夜色精品国产欧美乱极品| 天天干天天日天天射| 2017天天干天天射| 欧美特级毛片| 综合天堂AV久久久久久久| 欧美香蕉视频| 老熟女伦一区二区三区| 西西444WWW无码视频软件功能介绍 | 毛片a级| 日韩AV无码免费| 91精品久久久久久久| 爆操人妻| 偷拍精品视频| 六月综合网| 亚洲色情在线播放| 91婷婷| 国产特级毛片| 国产视频一区二区三区四区五区| 成人日韩在线| 91国啪| 秋霞亚洲| 色色网站| 色男人色天堂| 在线少妇| 怡春院AV| 欧美熟妇一区二区三区| 国产免费啪啪视频| 无码一区二区av| 强伦人妻一区二区三区| 亚洲www.| 亚洲AV无码成人精品区| 亚洲在线大香蕉| 91一二区| 干老女人逼| 四虎av在线播放| 2025毛片| 狼友在线视频| 久久逼逼| 国产色无码网站www色视频| 午夜成人鲁丝片午夜精品| 久久国产毛片| 亚洲日韩黄色| 99热精品2| 日本午夜影院| 国产无遮挡又黄又爽在线观看| 成人久久大香蕉| 成人黄色性爱视频| 久热re| 欧美亚洲操逼视频| 午夜亚洲AⅤ无码高潮片苍井空| 91视频免费播放| 特级西西西88大胆无码| 欧美三级视频在线| 黄片毛片| 国产无码一| 翔田千里被操120分钟| 五月天婷婷影院| 91av在线看| 影音先锋亚洲资源| 成人av免费在线观看| 日本熟妇一区二区三区| 精品视频无码| 91高清在线| 欧美V∧| 中国免费XXXX18| 日本成人A片| 日韩中文字幕网| 一区二区三区日本| 日本老女人视频| 国产成人综合电影| 久久福利视频导航| 欧美日韩高清丝袜| av三级网站| 国产成人秘在线观看免费网站| 国产亚洲精品久久久波多野结衣| 日韩欧美中文字幕视频| 免费看片av| 国产乱伦视屏| 色优久久| 色男人的天堂网| 三区在线观看| ww成人| 天天操婷婷|