ES分組聚合的問題

轉(zhuǎn)載自:https://blog.csdn.net/u010454030/article/details/71762838

我們都知道Elasticsearch是一個分布式的搜索引擎囚巴,每個索引都可以有多個分片饥努,用來將一份大索引的數(shù)據(jù)切分成多個小的物理索引毅该,解決單個索引數(shù)據(jù)量過大導(dǎo)致的性能問題,另外每個shard還可以配置多個副本竞慢,來保證高可靠以及更好的抗并發(fā)的能力。

將一個索引切分成多個shard,大多數(shù)時候是沒有問題的,但是在es里面如果索引被切分成多個shard诈胜,在使用group進(jìn)行聚合時,可能會出現(xiàn)問題冯事,這個在官網(wǎng)文檔里焦匈,描述也非常清楚

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_shard_size_3

下面就針對官網(wǎng)的例子,描述下桅咆,group count如果有多個shard可能會出現(xiàn)的問題

假設(shè)我們現(xiàn)在括授,我們有一份商品的索引數(shù)據(jù)坞笙,它有3個shard岩饼,每個shard的數(shù)據(jù)如下所示:


image.png

現(xiàn)在我們的需求是,按商品分組求top5的商品薛夜,es收到這個請求后籍茧,會去搜索這三個shard,然后子每個shard上面取top5梯澜,數(shù)據(jù)如下圖所示:


image.png

最后寞冯,將三個shard的top5的數(shù)據(jù),最后做一下匯聚然后最終排序取top5結(jié)果如下圖:


image.png

最后我們發(fā)現(xiàn)這個top5的結(jié)果晚伙,并不是100%精確的吮龄,只是一個近似精確的結(jié)果值:

Product A在所有top5的shard數(shù)據(jù)里面都存在,所以它的結(jié)果是精確的咆疗, Product C僅僅返回了 shard A 和 C里面的top5的數(shù)據(jù)漓帚,所以這里顯示50是不精確的, Product C在shard B里面也存在午磁,但是它在 top5里面沒有出現(xiàn)尝抖,所以group后的結(jié)果實際上是有誤差的毡们,再來看下 Product Z僅僅返回了2個shards的數(shù)據(jù) 因為第三個里面不存在,所以它的結(jié)果是準(zhǔn)確的昧辽,最后我們注意下 Product H實際上它的總數(shù)是44衙熔,橫跨三個shard 但是它在每個shard的top5里面并沒有出現(xiàn),所以最終的top5里面也沒有這條數(shù)據(jù)搅荞,這樣看來最終的top5的值并不是100% 準(zhǔn)確的红氯,這一點在設(shè)計和使用es的時候需要特別注意。

雖然我們可以調(diào)大返回size的個數(shù)來提高精確度取具,但是size個數(shù)的提升脖隶,也意味著有更多的數(shù)據(jù)會被返回,從而會導(dǎo)致檢索性能的下降暇检,這一點是需要找到平衡點的产阱。

那么有沒有方法避免這種不精確的統(tǒng)計的呢?

答案是有的块仆,es官網(wǎng)文檔里面也提到构蹬,總共有2種:

第一種:

聚合操作在單個shard時是精確的,也就是說我們索引的數(shù)據(jù)全部插入到一個shard的時候 它的聚合統(tǒng)計結(jié)果是準(zhǔn)確的悔据。

第二種:

在索引數(shù)據(jù)的時候庄敛,使用route路由字段,將所有聚合的數(shù)據(jù)分布到同一個shard即可科汗,這樣再聚合時也是精確的藻烤。

上面的兩種辦法都是可以解決的,第一種適合數(shù)據(jù)量不大的場景下头滔,我們直接把數(shù)據(jù)放在一份索引里面怖亭,第二種辦法適合數(shù)據(jù)量比較大的場景下,我們通過業(yè)務(wù)字段將相同屬性的數(shù)據(jù)路由在同一個shard里面即可坤检,具體使用哪個需要和具體的業(yè)務(wù)場景相結(jié)合兴猩。

總結(jié):

es雖然很強(qiáng)大,但是在一些場景下也是有局限的早歇,比如上面提到的聚合分組的這個情況倾芝,或者聚合分組+分頁的情況,此外min箭跳,max晨另,sum這些函數(shù)在多個shard中聚合結(jié)果是準(zhǔn)確的,count是近似準(zhǔn)確的谱姓,但是es能保證top 前幾的數(shù)據(jù)是精確的借尿,這也是為什么搜索引擎一般都返回top n數(shù)據(jù)作為最終的返回結(jié)果,當(dāng)然上面提到那個例子逝段,如果聚合的key本來就很少垛玻,那么它的聚合結(jié)果也是準(zhǔn)確的割捅,比如按性別,月份聚合帚桩,因為這些返回的key亿驾,都是有限的,所以結(jié)果沒問題账嚎,但是一旦對分組的個數(shù)沒法確定莫瞬,這種情況下出現(xiàn)問題的幾率就比較大,跨表或者跨分片聚合其實在任何db系統(tǒng)里面都會存在這種問題郭蕉,所以我們應(yīng)該盡量在設(shè)計業(yè)務(wù)時就考慮到這種特殊情況疼邀,然后最終做特殊處理。
————————————————
版權(quán)聲明:本文為CSDN博主「三劫散仙」的原創(chuàng)文章召锈,遵循CC 4.0 BY-SA版權(quán)協(xié)議旁振,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u010454030/article/details/71762838

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涨岁,一起剝皮案震驚了整個濱河市拐袜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梢薪,老刑警劉巖蹬铺,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秉撇,居然都是意外死亡甜攀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門琐馆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來规阀,“玉大人,你說我怎么就攤上這事啡捶±蚜玻” “怎么了奸焙?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵瞎暑,是天一觀的道長。 經(jīng)常有香客問我与帆,道長了赌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任玄糟,我火速辦了婚禮勿她,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阵翎。我一直安慰自己逢并,他們只是感情好之剧,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著砍聊,像睡著了一般背稼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玻蝌,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天蟹肘,我揣著相機(jī)與錄音,去河邊找鬼俯树。 笑死帘腹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的许饿。 我是一名探鬼主播阳欲,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼陋率!你這毒婦竟也來了胸完?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤翘贮,失蹤者是張志新(化名)和其女友劉穎赊窥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狸页,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡锨能,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芍耘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片址遇。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖斋竞,靈堂內(nèi)的尸體忽然破棺而出倔约,到底是詐尸還是另有隱情,我是刑警寧澤坝初,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布浸剩,位于F島的核電站,受9級特大地震影響鳄袍,放射性物質(zhì)發(fā)生泄漏绢要。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一拗小、第九天 我趴在偏房一處隱蔽的房頂上張望重罪。 院中可真熱鬧,春花似錦、人聲如沸剿配。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呼胚。三九已至盏筐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砸讳,已是汗流浹背琢融。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留簿寂,地道東北人漾抬。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像常遂,于是被迫代替她去往敵國和親纳令。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 聚合分析簡介 聚合分析:英文為Aggregation克胳,是es除搜索功能外提供的針對es數(shù)據(jù)做統(tǒng)計分析的功能平绩。 功能...
    小波同學(xué)閱讀 3,968評論 0 5
  • 分布式系統(tǒng)的近似統(tǒng)計算法 三者只能滿足其中兩點 數(shù)據(jù)量 精確度 實時性 Min聚合分析的執(zhí)行流程 先通過節(jié)點將請求...
    舍是境界閱讀 1,128評論 0 1
  • 大數(shù)據(jù)分析的一個必要部分是高效的概況:計算聚合值sum(),mean(),median(),min()和max()...
    michael的自由空間閱讀 564評論 0 0
  • 前言 掌握ElasticSearch(簡稱ES)的基本API之后,可以讓我們實現(xiàn)對業(yè)務(wù)數(shù)據(jù)精確檢索漠另,若是要進(jìn)一步對...
    moutory閱讀 3,352評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月捏雌,有人笑有人哭,有人歡樂有人憂愁笆搓,有人驚喜有人失落性湿,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,523評論 28 53