您好,登錄后才能下訂單哦!
這篇文章主要介紹“ElasticSearch解決大數(shù)據(jù)量檢索的方法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“ElasticSearch解決大數(shù)據(jù)量檢索的方法”文章能幫助大家解決問題。
如果你的項目里有超過千萬上億級別的數(shù)據(jù),且數(shù)據(jù)日增量較大需要高性能檢索時,如訂單數(shù)據(jù),你該怎么辦?
作為面試官,你需要找一個能解決這個問題的人!為應聘者,你該如何回答面試官這個問題?
你可以了解下使用搜索引擎框架,Elasticsearch (ES)是一個不錯的開源搜索引擎框架。我們可以把 ES 當做“數(shù)據(jù)庫”來使用,全球很多知名社區(qū)的全文檢索都采用ES,如維基百科、Stack Overflow、Github等。
ElasticSearch是開源的,它基于lucene,是伸縮性強、分布式、高可用的全?搜索引擎,可以簡單地通過RESTful 使用JSON格式索引數(shù)據(jù)。
嘗試想一下,如果你做的是一個知識庫系統(tǒng),系統(tǒng)里有大量文章,如果你想通過某一個或關鍵字檢索文章的內(nèi)容,如果用MySQL來做這件事,光靠 like 查詢根本無法滿足,全文檢索就是對一篇文章進行索引,ES可以把內(nèi)容根據(jù)詞的意義進行分詞,然后分別創(chuàng)建索引,例如”我要勵志做一個有追求的程序員” ,經(jīng)過ES分詞后是:“我“,“我要”,”勵志“,“一個“,”有追求“,“程序員”,無論你根據(jù)哪個關鍵詞去檢索,都會檢索到這句話。
讓你不需要了解背后復雜的邏輯,即可完成搜索,Elasticsearch致力于隱藏分布式系統(tǒng)的復雜性。以下這些操作都是在底層自動完成的:
將你的文檔分區(qū)到不同的容器或者分片(shards)中,它們可以存在于一個或多個節(jié)點中。
將分片均勻的分配到各個節(jié)點,對索引和搜索做負載均衡。
根據(jù)ES支持全文索引這個特性,我們還可以通過它做很多所有關于模糊搜索的功能,大數(shù)據(jù)量多維度聚合也是ES的強項,如天貓商城,通過關鍵字搜索商品,輸入iph后就會自動加載iphone相關的所有商品,這是典型的搜索引擎使用場景。
問題分析: 凡事大數(shù)據(jù)量且需要檢索的,這個時候你都可以想到ES,傳統(tǒng)關系型數(shù)據(jù)庫查詢速度變慢,數(shù)據(jù)庫分表聯(lián)合查詢速度慢。
答:有這樣一個需求場景,運營系統(tǒng)需要一個訂單分析工具,當時我們的訂單庫總數(shù)已經(jīng)遠遠超過億級別數(shù)據(jù)量,每天增量在百萬級。
系統(tǒng)初期訂單查詢主要采用MySQL查詢,并沒有使用其他數(shù)據(jù)庫,隨著業(yè)務的發(fā)展,系統(tǒng)主要面臨兩個挑戰(zhàn):
隨著數(shù)據(jù)增多,MySQL 分庫分表后單張表數(shù)據(jù)依然增加到了幾千萬數(shù)據(jù)量級,查詢越來越慢。
查詢中帶有大量聚合運算,如過濾計算異常訂單總數(shù),完成訂單總數(shù),計算訂單金額等,MySQL并不擅長使用sql做大規(guī)模運算。
針對上述兩個問題,我使用了 Elasticsearch 完美地應對慢查詢這個問題,我使用ES作為主查詢數(shù)據(jù)源,MySQL作為降級備案,如果 ES 集群因為各種原因不可用了,系統(tǒng)會把訂單查詢數(shù)據(jù)源自動切換到 MySQL 數(shù)據(jù)源,對于運營系統(tǒng),雖然查詢會變慢,但是不會耽誤正常使用,而且這種降級的概率也極少發(fā)生。
系統(tǒng)架構(gòu)圖這樣的:(盡量給面試官展示明白這個圖)
重點關注紅色框,我使用了 ES 作為首選訂單查詢源,MySQL作為備份數(shù)據(jù)源,中間加入自動降級開關。
答:使用 ES 后,查詢速度當然是大大的提高。
使用MySQL的時候99%的查詢時間在10s+,架構(gòu)引入ES后上線后,查詢時間迅速降低到毫秒級別。
我還保留了性能監(jiān)控的圖放在我述職報告里,為升級加薪打下扎實的基礎。
面試官一直點頭,對我這一波操作非常認可。
問題分析:有些人剛剛接觸 Elasticsearch 的時候,只顧用,只知道ES快,能裝很多數(shù)據(jù),但是面試官稍微問了一個倒排索引就懵逼了,還好意思說你會用搜索引擎?
答:先說說ES中的 Index,Document,Type,以及對應MySQL數(shù)據(jù)庫
索引(Index):
索引的概念相當于MySQL里數(shù)據(jù)庫的概念,用ES創(chuàng)建一個索引就是創(chuàng)建一個庫,比如電商系統(tǒng)里給訂單創(chuàng)建一個訂單的索引,那客服系統(tǒng)就可以通過訂單索引快速查詢訂單所有信息快速處理客訴。
文檔(Document):
ES屬于文檔型數(shù)據(jù)庫,文檔的概念就相當于MySQL里一條數(shù)據(jù)的概念,很多個文檔(很多條數(shù)據(jù))構(gòu)成了一個索引。
類型(Type)
上面說文檔的概念就相當于MySQL里一條數(shù)據(jù)的概念,MySQL里一條數(shù)據(jù)有很多個字段,比如訂單號,用戶手機號,訂單金額等,Type 的概念相當于根據(jù)每個字段聚合所一張表,如根據(jù)訂單號分組,按照手機號分組,這種分組就叫做 Type,它是虛擬的邏輯分組,用來過濾文檔,無論根據(jù)哪個字段搜索都有對應的Type(表)。
如果還不明白,直接給你整理成表:ES VS Mysql
ElasticSearch | 關系型數(shù)據(jù)庫:MySQL | |
---|---|---|
對應關系: | 索引 | 庫 |
對應關系: | 類型type | 數(shù)據(jù)表 |
對應關系: | 文檔 | 行 |
對應關系: | 字段Field | 列 |
Tip: 如果你使用過 Elasticsearch 不知道倒排索引的概念那恐怕有點說不過去,倒排索引也叫反向索引(Inverted Index)
(開始給面試官舉例分析倒排索引,我可是貨真價實做過功課的)
有這樣三段話:
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)過拆分后,每個關鍵詞出現(xiàn)在哪句話哪個位置都一目了然,非常方便檢索,這便是倒排索引的概念。試想一下,我們使用的百度或是谷歌檢索,是不是這種數(shù)據(jù)結(jié)構(gòu)更容易讓我們找到你想要的所有內(nèi)容,這便是倒排索引帶給我們的便利之處,倒排索引允許快速全文搜索,但是在將文檔添加到數(shù)據(jù)庫時會增加處理成本
面試官: 行了行了,我知道你理解了,時間有限咱先不聊這個了。
這才是面試理想效果,讓面試官無話可說。
關于“ElasticSearch解決大數(shù)據(jù)量檢索的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。