最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分布式難題ElasticSearch解決大數(shù)據(jù)量檢索面試

 更新時間:2022年03月09日 16:18:11   作者:Q.E.D  
這篇文章主要為大家介紹了分布式面試難題,ElasticSearch解決大數(shù)據(jù)量檢索的問題分析回答,讓面試官無話可說,幫助大家實(shí)現(xiàn)面試開薪自由

引言

如果你的項目里有超過千萬上億級別的數(shù)據(jù),且數(shù)據(jù)日增量較大需要高性能檢索時,如訂單數(shù)據(jù),你該怎么辦?

作為面試官,你需要找一個能解決這個問題的人!為應(yīng)聘者,你該如何回答面試官這個問題?

你可以了解下使用搜索引擎框架,Elasticsearch (ES)是一個不錯的開源搜索引擎框架。我們可以把 ES 當(dāng)做“數(shù)據(jù)庫”來使用,全球很多知名社區(qū)的全文檢索都采用ES,如維基百科、Stack Overflow、Github等。

ElasticSearch是開源的,它基于lucene,是伸縮性強(qiáng)、分布式、高可用的全?搜索引擎,可以簡單地通過RESTful 使用JSON格式索引數(shù)據(jù)。

嘗試想一下,如果你做的是一個知識庫系統(tǒng),系統(tǒng)里有大量文章,如果你想通過某一個或關(guān)鍵字檢索文章的內(nèi)容,如果用MySQL來做這件事,光靠 like 查詢根本無法滿足,全文檢索就是對一篇文章進(jìn)行索引,ES可以把內(nèi)容根據(jù)詞的意義進(jìn)行分詞,然后分別創(chuàng)建索引,例如”我要勵志做一個有追求的程序員” ,經(jīng)過ES分詞后是:“我“,“我要”,”勵志“,“一個“,”有追求“,“程序員”,無論你根據(jù)哪個關(guān)鍵詞去檢索,都會檢索到這句話。

讓你不需要了解背后復(fù)雜的邏輯,即可完成搜索,Elasticsearch致力于隱藏分布式系統(tǒng)的復(fù)雜性。以下這些操作都是在底層自動完成的:

  • 將你的文檔分區(qū)到不同的容器或者分片(shards)中,它們可以存在于一個或多個節(jié)點(diǎn)中。
  • 將分片均勻的分配到各個節(jié)點(diǎn),對索引和搜索做負(fù)載均衡。

根據(jù)ES支持全文索引這個特性,我們還可以通過它做很多所有關(guān)于模糊搜索的功能,大數(shù)據(jù)量多維度聚合也是ES的強(qiáng)項,如天貓商城,通過關(guān)鍵字搜索商品,輸入iph后就會自動加載iphone相關(guān)的所有商品,這是典型的搜索引擎使用場景。

圖片描述

1、面試官:

我看你簡歷有寫項目里有使用了ES,哪些場景用到了ES? 

問題分析: 凡事大數(shù)據(jù)量且需要檢索的,這個時候你都可以想到ES,傳統(tǒng)關(guān)系型數(shù)據(jù)庫查詢速度變慢,數(shù)據(jù)庫分表聯(lián)合查詢速度慢。

答:有這樣一個需求場景,運(yùn)營系統(tǒng)需要一個訂單分析工具,當(dāng)時我們的訂單庫總數(shù)已經(jīng)遠(yuǎn)遠(yuǎn)超過億級別數(shù)據(jù)量,每天增量在百萬級。

系統(tǒng)初期訂單查詢主要采用MySQL查詢,并沒有使用其他數(shù)據(jù)庫,隨著業(yè)務(wù)的發(fā)展,系統(tǒng)主要面臨兩個挑戰(zhàn):

  • 隨著數(shù)據(jù)增多,MySQL 分庫分表后單張表數(shù)據(jù)依然增加到了幾千萬數(shù)據(jù)量級,查詢越來越慢。
  • 查詢中帶有大量聚合運(yùn)算,如過濾計算異常訂單總數(shù),完成訂單總數(shù),計算訂單金額等,MySQL并不擅長使用sql做大規(guī)模運(yùn)算。

針對上述兩個問題,我使用了 Elasticsearch 完美地應(yīng)對慢查詢這個問題,我使用ES作為主查詢數(shù)據(jù)源,MySQL作為降級備案,如果 ES 集群因為各種原因不可用了,系統(tǒng)會把訂單查詢數(shù)據(jù)源自動切換到 MySQL 數(shù)據(jù)源,對于運(yùn)營系統(tǒng),雖然查詢會變慢,但是不會耽誤正常使用,而且這種降級的概率也極少發(fā)生。

系統(tǒng)架構(gòu)圖這樣的:(盡量給面試官展示明白這個圖)

圖片描述

重點(diǎn)關(guān)注紅色框,我使用了 ES 作為首選訂單查詢源,MySQL作為備份數(shù)據(jù)源,中間加入自動降級開關(guān)。

2、面試官:

那使用了ES后結(jié)果如何?

答:使用 ES 后,查詢速度當(dāng)然是大大的提高。

使用MySQL的時候99%的查詢時間在10s+,架構(gòu)引入ES后上線后,查詢時間迅速降低到毫秒級別。

我還保留了性能監(jiān)控的圖放在我述職報告里,為升級加薪打下扎實(shí)的基礎(chǔ)。

圖片描述

面試官一直點(diǎn)頭,對我這一波操作非常認(rèn)可。

3、面試官:

關(guān)于ES的一些概念名字你了解多少?如索引,文檔,倒排索引這些東西你是怎么理解的?

問題分析:有些人剛剛接觸 Elasticsearch 的時候,只顧用,只知道ES快,能裝很多數(shù)據(jù),但是面試官稍微問了一個倒排索引就懵逼了,還好意思說你會用搜索引擎?

答:先說說ES中的 Index,Document,Type,以及對應(yīng)MySQL數(shù)據(jù)庫

索引(Index):

索引的概念相當(dāng)于MySQL里數(shù)據(jù)庫的概念,用ES創(chuàng)建一個索引就是創(chuàng)建一個庫,比如電商系統(tǒng)里給訂單創(chuàng)建一個訂單的索引,那客服系統(tǒng)就可以通過訂單索引快速查詢訂單所有信息快速處理客訴。

文檔(Document):

ES屬于文檔型數(shù)據(jù)庫,文檔的概念就相當(dāng)于MySQL里一條數(shù)據(jù)的概念,很多個文檔(很多條數(shù)據(jù))構(gòu)成了一個索引。

類型(Type)

上面說文檔的概念就相當(dāng)于MySQL里一條數(shù)據(jù)的概念,MySQL里一條數(shù)據(jù)有很多個字段,比如訂單號,用戶手機(jī)號,訂單金額等,Type 的概念相當(dāng)于根據(jù)每個字段聚合所一張表,如根據(jù)訂單號分組,按照手機(jī)號分組,這種分組就叫做 Type,它是虛擬的邏輯分組,用來過濾文檔,無論根據(jù)哪個字段搜索都有對應(yīng)的Type(表)。

如果還不明白,直接給你整理成表:ES VS Mysql

 ElasticSearch關(guān)系型數(shù)據(jù)庫:MySQL
對應(yīng)關(guān)系:索引
對應(yīng)關(guān)系:類型type數(shù)據(jù)表
對應(yīng)關(guān)系:文檔
對應(yīng)關(guān)系:字段Field

最重要的倒排索引

 Tip: 如果你使用過 Elasticsearch 不知道倒排索引的概念那恐怕有點(diǎn)說不過去,倒排索引也叫反向索引(Inverted Index)

(開始給面試官舉例分析倒排索引,我可是貨真價實(shí)做過功課的)

有這樣三段話:

  • hello everyone
  • this article is based on inverted index
  • which is hashmap like data structure

使用ES保存后結(jié)構(gòu)如下:

 hello                (1, 1) 
 everyone             (1, 2)
 this                 (2, 1)
 article              (2, 2)
 is                   (2, 3); (3, 2)
 based                (2, 4)
 on                   (2, 5)
 inverted             (2, 6)
 index                (2, 7)
 which                (3, 1)
 hashmap              (3, 3)
 like                 (3, 4)
 data                 (3, 5)
 structure            (3, 6)

hello 出現(xiàn)在第1句話第1個單詞,所以是(1, 1) ,is (2, 3); (3, 2) 表示is出現(xiàn)在第2句第3個單詞和第3句第2個單詞,這樣經(jīng)過拆分后,每個關(guān)鍵詞出現(xiàn)在哪句話哪個位置都一目了然,非常方便檢索,這便是倒排索引的概念。試想一下,我們使用的百度或是谷歌檢索,是不是這種數(shù)據(jù)結(jié)構(gòu)更容易讓我們找到你想要的所有內(nèi)容,這便是倒排索引帶給我們的便利之處,倒排索引允許快速全文搜索,但是在將文檔添加到數(shù)據(jù)庫時會增加處理成本

面試官: 行了行了,我知道你理解了,時間有限咱先不聊這個了。

這才是面試?yán)硐胄Ч?,讓面試官無話可說。

總結(jié)

  • 如果你要做分布式的實(shí)時文件存儲,每個字段都被索引并可被搜索;
  • 如果你要做實(shí)時分析搜索;
  • 如果你要處理PB級結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù);

這個時候請先想到使用搜索引擎。

關(guān)于 ES 的特性是使用場景概括:

大數(shù)據(jù)量聚合檢索和排序,如計算用戶訂單總金額,訂單數(shù)據(jù)等。自動補(bǔ)全,如搜索框通過關(guān)鍵字自動補(bǔ)全。高亮查詢。關(guān)鍵字檢索,模糊檢索,拼音查詢。記錄系統(tǒng)后臺日志,日志檢索。

以上就是分布式難題ElasticSearch解決大數(shù)據(jù)量檢索面試的詳細(xì)內(nèi)容,更多關(guān)于分布式ElasticSearch大數(shù)據(jù)量檢索面試的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JAVA實(shí)現(xiàn)對阿里云DNS的解析管理

    JAVA實(shí)現(xiàn)對阿里云DNS的解析管理

    本文主要介紹了JAVA實(shí)現(xiàn)對阿里云DNS的解析管理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • eclipse 如何創(chuàng)建 user library 方法詳解

    eclipse 如何創(chuàng)建 user library 方法詳解

    這篇文章主要介紹了eclipse 如何創(chuàng)建 user library 方法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Spring Cloud接口突然變慢的解決方案

    Spring Cloud接口突然變慢的解決方案

    在Spring Cloud項目中,接口突然變慢可能是由多種原因造成的,本文給大家介紹了一些可能的原因以及相應(yīng)的解決方案,通過代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • java連接MySQL數(shù)據(jù)庫的代碼

    java連接MySQL數(shù)據(jù)庫的代碼

    這篇文章主要為大家詳細(xì)介紹了java連接MySQL數(shù)據(jù)庫的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • IDEA SSM整合Redis項目實(shí)例 附源碼

    IDEA SSM整合Redis項目實(shí)例 附源碼

    今天給大家普及IDEA SSM整合Redis項目實(shí)例,包括pom.xml 配置和spring-redis.xml 配置代碼,代碼也很簡單,通過項目實(shí)際案例能更好的幫助大家理解,需要的朋友可以參考下
    2021-06-06
  • Maven管理SpringBoot Profile詳解

    Maven管理SpringBoot Profile詳解

    這篇文章主要介紹了Maven管理SpringBoot Profile詳解,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Java程序進(jìn)程起來了但是不打印日志的原因分析

    Java程序進(jìn)程起來了但是不打印日志的原因分析

    這篇文章主要介紹了Java程序進(jìn)程起來了但是不打印日志的原因分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringBoot中的分布式追蹤及使用詳解

    SpringBoot中的分布式追蹤及使用詳解

    隨著互聯(lián)網(wǎng)應(yīng)用程序的復(fù)雜性不斷增加,分布式系統(tǒng)已經(jīng)成為了許多企業(yè)級應(yīng)用程序的標(biāo)配,由于服務(wù)之間的調(diào)用關(guān)系錯綜復(fù)雜,很難追蹤到一個請求在整個系統(tǒng)中的執(zhí)行路徑和時間,為了解決這個問題,本文將介紹SpringBoot中的分布式追蹤技術(shù)及其使用方法
    2023-07-07
  • 關(guān)于MyBatis中映射對象關(guān)系的舉例

    關(guān)于MyBatis中映射對象關(guān)系的舉例

    這篇文章主要介紹了關(guān)于MyBatis中映射對象關(guān)系的舉例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • IDEA啟動報錯Internal?error.?Please?refer?to?https://jb.gg/ide/critical-startup-errors解決辦法

    IDEA啟動報錯Internal?error.?Please?refer?to?https://jb.gg/i

    這篇文章主要介紹了IDEA啟動報錯Internal?error.?Please?refer?to?https://jb.gg/ide/critical-startup-errors解決辦法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04

最新評論

永平县| 黑河市| 平乡县| 宜川县| 陆丰市| 巴中市| 巴林右旗| 布尔津县| 井冈山市| 沧州市| 苗栗市| 新蔡县| 准格尔旗| 扎囊县| 刚察县| 泸溪县| 纳雍县| 天峻县| 巴楚县| 馆陶县| 章丘市| 沅江市| 扶风县| 华宁县| 临安市| 静宁县| 南郑县| 阜阳市| 吉安县| 滦南县| 澄江县| 临猗县| 自治县| 开江县| 北安市| 大方县| 明溪县| 内江市| 新疆| 德庆县| 遵化市|