www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]作者介紹 李猛(ynuosoft),Elastic-stack產(chǎn)品深度用戶,ES認(rèn)證工程師,2012年接觸Elasticsearch,對(duì)Elastic-Stack開(kāi)發(fā)、架構(gòu)、運(yùn)維等方面有深入體驗(yàn),實(shí)踐過(guò)多種Elasticsearch項(xiàng)目,最暴力的大數(shù)據(jù)分析應(yīng)用,最復(fù)雜的業(yè)務(wù)系統(tǒng)應(yīng)用;業(yè)余為企業(yè)提供Elastic-sta


ES的跨索引查詢有多便利?對(duì)比下分庫(kù)分表、分片更直觀


作者介紹

李猛(ynuosoft),Elastic-stack產(chǎn)品深度用戶,ES認(rèn)證工程師,2012年接觸Elasticsearch,對(duì)Elastic-Stack開(kāi)發(fā)、架構(gòu)、運(yùn)維等方面有深入體驗(yàn),實(shí)踐過(guò)多種Elasticsearch項(xiàng)目,最暴力的大數(shù)據(jù)分析應(yīng)用,最復(fù)雜的業(yè)務(wù)系統(tǒng)應(yīng)用;業(yè)余為企業(yè)提供Elastic-stack咨詢培訓(xùn)以及調(diào)優(yōu)實(shí)施。


序言


Elasticsearch,中文名直譯彈性搜索,不僅僅在單索引內(nèi)部分片層面彈性搜索,更強(qiáng)的是在跨索引外圍支持分片彈性搜索,同比其它分布式數(shù)據(jù)產(chǎn)品,此特性更鮮明,代表了Elastic集群架構(gòu)設(shè)計(jì)的優(yōu)越性。


本文將從以下幾個(gè)方面展開(kāi)探討:


  • 為什么需要跨索引查詢?

  • 跨索查詢有哪些經(jīng)典應(yīng)用場(chǎng)景?

  • 跨索引查詢技術(shù)原理是怎樣的?

  • 跨索引查詢有哪些注意事項(xiàng)?


為什么需要跨索引查詢


技術(shù)限制


Elasticsearch索引本身有一些指標(biāo)限制,對(duì)于很多新手來(lái)說(shuō)最容易忽視或者亂用。


  • Elastic索引數(shù)據(jù)量有大小限制;

  • 單個(gè)分片數(shù)據(jù)容量官方建議不超過(guò)50GB,合理范圍是20GB~40GB之間;

  • 單個(gè)分片數(shù)據(jù)條數(shù)不超過(guò)約21億條(2的32次方),此值一般很難達(dá)到,基本可以忽略,背后原理可以參考源碼或者其它;

  • 索引分片過(guò)多,分布式資源消耗越大,查詢響應(yīng)越慢。


基于以上限制,索引在創(chuàng)建之前就需要依據(jù)業(yè)務(wù)場(chǎng)景估算,設(shè)置合理的分片數(shù),不能過(guò)多也不能過(guò)少。


技術(shù)便利


在基于關(guān)系型數(shù)據(jù)庫(kù)的應(yīng)用場(chǎng)景中,數(shù)據(jù)量過(guò)大,一般會(huì)采用分庫(kù)分表策略,查詢數(shù)據(jù)時(shí)基于第三方中間件,限制多多;在基于NoSQL的應(yīng)用場(chǎng)景中,如MongoDB,數(shù)據(jù)量過(guò)大,會(huì)采用數(shù)據(jù)產(chǎn)品本身提供的分片特性,查詢數(shù)據(jù)時(shí)基于自身的路由機(jī)制。


無(wú)論是分庫(kù)分表還是分片,它們只解決了一維數(shù)據(jù)的存儲(chǔ)與查詢,二維的不能,如電商訂單系統(tǒng)場(chǎng)景,數(shù)據(jù)庫(kù)采用多庫(kù)多表拆分,一旦容量超過(guò)預(yù)期設(shè)計(jì),需要二次拆分繼續(xù)分庫(kù)分表;MongoDB采用多分片拆分,一旦容量超過(guò)預(yù)計(jì)設(shè)計(jì),需要繼續(xù)擴(kuò)展分片節(jié)點(diǎn)。


以上對(duì)于Elasticsearch可以不用這樣,它提供了兩個(gè)維度的拆分方式,第一維度采用多個(gè)索引命名拆分,第二維度采用索引多分片,對(duì)于查詢來(lái)說(shuō),可以靈活匹配索引,一次指定一個(gè)索引,也可以一次指定多個(gè)索引。


跨索引查詢應(yīng)用場(chǎng)景


IT應(yīng)用中,除去技術(shù)本身局限問(wèn)題,多數(shù)的問(wèn)題都是由于耦合造成的,“高內(nèi)聚,低耦合”一直是我們IT從業(yè)者的座右銘。應(yīng)用系統(tǒng)耦合,就成了單體應(yīng)用,然后就延伸出微服務(wù)架構(gòu)理念。同樣數(shù)據(jù)耦合,我們也要基于一定維度的微服務(wù)化,或垂直或水平或混合垂直水平。


業(yè)務(wù)系統(tǒng)


舉例某些業(yè)務(wù)場(chǎng)景,實(shí)時(shí)數(shù)據(jù)與歷史數(shù)據(jù)存儲(chǔ)和查詢問(wèn)題,假設(shè)日均數(shù)據(jù)量超過(guò)千萬(wàn)條,那么月度數(shù)量超過(guò)3億條,年度也會(huì)超過(guò)36億條。


若采用Elasticsearch存儲(chǔ),則可以按月/按季度/按年度 創(chuàng)建索引,這樣實(shí)時(shí)數(shù)據(jù)的更新只會(huì)影響當(dāng)前的索引,不影響歷史的索引;查詢時(shí)也一樣,依據(jù)查詢條件指定索引名稱,按需要掃描查詢,無(wú)需每次掃描所有的數(shù)據(jù)。這比基于傳統(tǒng)的數(shù)據(jù)產(chǎn)品靈活很多。


大數(shù)據(jù)


Elasticsearch在大數(shù)據(jù)應(yīng)用場(chǎng)景下很受歡迎,已經(jīng)成為大數(shù)據(jù)平臺(tái)對(duì)外提供結(jié)果查詢的標(biāo)配。大數(shù)據(jù)平臺(tái)需要定期計(jì)算數(shù)據(jù),將結(jié)果數(shù)據(jù)批量寫(xiě)入到Elasticsearch中,供業(yè)務(wù)系統(tǒng)查詢,由于部分業(yè)務(wù)規(guī)則設(shè)定,Elasticsearch原來(lái)的索引數(shù)據(jù)要全部刪除,并重新寫(xiě)入,這種操作很頻繁。對(duì)于大數(shù)據(jù)平臺(tái)每次全量計(jì)算,代價(jià)很大,對(duì)于Elasticsearch平臺(tái),超大索引數(shù)據(jù)頻繁刪除重建,代價(jià)也很大。


基于以上,采用多索引方式,如按照月份拆解,依據(jù)需要?jiǎng)h除的月份索引數(shù)據(jù)。同樣的問(wèn)題,業(yè)務(wù)系統(tǒng)查詢時(shí),非常靈活指定需要的月份索引數(shù)據(jù),這樣保證了存儲(chǔ)與查詢的平衡。


日志


Elasticsearch應(yīng)對(duì)這個(gè)日志場(chǎng)景非常擅長(zhǎng),誕生了著名的ELK組合,比如一個(gè)大中型的業(yè)務(wù)系統(tǒng),每天日志量幾十TB/幾百TB很正常,可按天或者按小時(shí)或者更小粒度創(chuàng)建索引,通常查詢?nèi)罩局粫?huì)查詢最近時(shí)間的,過(guò)去很久的日志,偶然需要查詢幾次,甚至?xí)h除。所以對(duì)于此場(chǎng)景,Elasticsearch的跨索引查詢非常便利,程序編寫(xiě)也很簡(jiǎn)單。


跨索引查詢應(yīng)用方式


Elasticsearch跨索引查詢的方式可依據(jù)業(yè)務(wù)場(chǎng)景靈活選擇,下面介紹幾種:


直接型


明確指定多個(gè)索引名稱,這種方式一般應(yīng)用在非常精確的查詢場(chǎng)景下,便于查詢索引范圍,性能平衡考慮,若索引不存在會(huì)出現(xiàn)錯(cuò)誤,如下:index_01,index_02


GET /index_01,index_02/_search

{

"query" : {

"match": {

"test": "data"

}

}

}



模糊型


不限定死索引名稱,這種方式一般采用通配符,無(wú)需判斷該索引是否存在,支持前匹配、后匹配,前后匹配,如下:index_* 匹配前綴一樣的所有索引


GET /index_*/_search

{

"query" : {

"match": {

"test": "data"

}

}

}



計(jì)算型


索引名稱通過(guò)計(jì)算表達(dá)式指定,類似正則表達(dá)式,也可以同時(shí)指定多個(gè)索引,如下:logstash-{now/d}表示當(dāng)前日期


# 索引名稱如:index-2024.03.22

# GET //_search

GET /%3Cindex-%7Bnow%2Fd%7D%3E/_search{

"query" : {

"match": {

"test": "data"

}

}

}



跨索引查詢技術(shù)原理


Elasticsearch能夠做到跨索引查詢,離不開(kāi)其架構(gòu)設(shè)計(jì)以及相關(guān)實(shí)現(xiàn)原理。


索引分片 


  • 索引是一個(gè)虛擬的數(shù)據(jù)集合,索引由多個(gè)分片組成;

  • 分片存儲(chǔ)實(shí)際的數(shù)據(jù);

  • 索引分片數(shù)量不限制。


查詢過(guò)程 



查詢過(guò)程簡(jiǎn)單說(shuō)來(lái)就是分發(fā)與合并:


  • 查詢分發(fā),客戶端發(fā)送請(qǐng)求到協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)分發(fā)查詢請(qǐng)求到索引分片節(jié)點(diǎn);

  • 數(shù)據(jù)合并,索引分片節(jié)點(diǎn)將數(shù)據(jù)發(fā)送到協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)合并返回客戶端。


所以說(shuō),Elasticsearch提供跨索引查詢的能力,實(shí)際上與原來(lái)單索引查詢時(shí)一樣,本質(zhì)上是跨多個(gè)分片查詢,然后合并。


跨索引查詢注意事項(xiàng)


索引與分片等價(jià)關(guān)系


索引與分片等價(jià)的關(guān)系,1個(gè)索引20分片與4個(gè)索引每個(gè)索引5個(gè)分片理論上是等價(jià)的,鑒于索引分片的容量限制與性能平衡,在面對(duì)需要跨索引業(yè)務(wù)場(chǎng)景時(shí),索引的數(shù)量與分片的數(shù)量盡量的少,既要保障索引熱點(diǎn)數(shù)據(jù)的實(shí)時(shí)處理能力,也要平衡歷史數(shù)據(jù)的查詢性能。


協(xié)調(diào)節(jié)點(diǎn)分離


鑒于Elastic查詢過(guò)程,在跨多個(gè)索引查詢時(shí),協(xié)調(diào)節(jié)點(diǎn)承擔(dān)了所有分片查詢返回的數(shù)據(jù)合并,需要消耗很大資源,在應(yīng)對(duì)高并發(fā)場(chǎng)景,建議部署獨(dú)立的協(xié)調(diào)節(jié)點(diǎn),將集群的數(shù)據(jù)節(jié)點(diǎn)與協(xié)調(diào)節(jié)點(diǎn)分離,以達(dá)到最佳的性能平衡。


路由機(jī)制


Elasticsearch寫(xiě)入數(shù)據(jù)分布默認(rèn)是基于索引主鍵_id的Hash值,此機(jī)制在數(shù)據(jù)分布上很均衡,但也沒(méi)有什么規(guī)律,對(duì)于跨索引查詢場(chǎng)景,若自定義指定路由鍵,可以在搜索時(shí)避開(kāi)不需要的索引分片,有效減少分片查詢的分片數(shù)量,達(dá)到更高的性能。


總結(jié)


Elasticsearch由于其架構(gòu)設(shè)計(jì)的彈性能力,小小的一個(gè)跨索引查詢特性,就能給我們應(yīng)用系統(tǒng)帶來(lái)很多架構(gòu)設(shè)計(jì)的便利,解決很多實(shí)際場(chǎng)景問(wèn)題,這是其它數(shù)據(jù)產(chǎn)品目前還做不到的。Elasticsearch還有更厲害的跨多個(gè)集群跨多個(gè)版本,詳情可繼續(xù)關(guān)注筆者下一篇文章的探討。


還是那句話,Elastic用得好,下班下得早。


特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

ES的跨索引查詢有多便利?對(duì)比下分庫(kù)分表、分片更直觀

長(zhǎng)按訂閱更多精彩▼

ES的跨索引查詢有多便利?對(duì)比下分庫(kù)分表、分片更直觀

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉