1、聚合為什么慢?
大多數(shù)時(shí)候?qū)蝹€(gè)字段的聚合查詢(xún)還是非常快的, 但是當(dāng)需要同時(shí)聚合多個(gè)字段時(shí),就可能會(huì)產(chǎn)生大量的分組,最終結(jié)果就是占用 Elasticsearch大量?jī)?nèi)存,從而導(dǎo)致 OOM 的情況發(fā)生。 實(shí)踐應(yīng)用發(fā)現(xiàn),以下情況都會(huì)比較慢:
- 1)待聚合文檔數(shù)比較多(千萬(wàn)、億、十億甚至更多);
- 2)聚合條件比較復(fù)雜(多重條件聚合);
- 3)全量聚合(翻頁(yè)的場(chǎng)景用)。
2、聚合優(yōu)化方案探討
優(yōu)化方案一:默認(rèn)深度優(yōu)先聚合改為廣度優(yōu)先聚合。
"collect_mode" : "breadth_first"
復(fù)制
- depth_first 直接進(jìn)行子聚合的計(jì)算
- breadth_first 先計(jì)算出當(dāng)前聚合的結(jié)果,針對(duì)這個(gè)結(jié)果在對(duì)子聚合進(jìn)行計(jì)算。
優(yōu)化方案二: 每一層terms aggregation內(nèi)部加一個(gè) “execution_hint”: “map”。
"execution_hint": "map"
復(fù)制
國(guó)內(nèi)解釋最詳細(xì)的版本來(lái)自Wood大叔:
Map方式的結(jié)論可簡(jiǎn)要概括如下: 1)查詢(xún)結(jié)果直接放入內(nèi)存中構(gòu)建map,在查詢(xún)結(jié)果集小的場(chǎng)景下,速度極快; 2)但如果待結(jié)果集合很大的情況,map方式不一定也快。
優(yōu)化方案N:
待進(jìn)一步深入實(shí)踐......
3、做個(gè)實(shí)驗(yàn)
聚合的平衡點(diǎn)是多少呢?
3.1 實(shí)驗(yàn)場(chǎng)景
場(chǎng)景一:在近億的document中,檢索滿(mǎn)足給定條件的數(shù)據(jù),并對(duì)聚合結(jié)果全量聚合。 場(chǎng)景二:在百萬(wàn)級(jí)別的document中,全量聚合。 場(chǎng)景三:在近億級(jí)別的document中,全量聚合。
3.2 聚合操作
POST index_*/_search { "sort": [ { "nrply": "desc" } ], "aggs": { "count_over_sin": { "terms": { "field": "sin_id", "execution_hint": "map", "size": 1000, "collect_mode": "breadth_first" } } }, "size":0 }
1)修改索引名稱(chēng),以獲取更多的文檔。 2)map模式添加 “execution_hint”: “map”,默認(rèn)是global_ordinals模式。 3)”size”: 1000,設(shè)定聚合取值。
3.3 聚合結(jié)果
3.4 結(jié)果分析
對(duì)比場(chǎng)景一與場(chǎng)景二、三,說(shuō)明:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-789470.html
- 當(dāng)結(jié)果集合比較少的時(shí)候,map聚合方式明顯速度更快,速度提升了接近5倍!
- 當(dāng)結(jié)果集合比較大的時(shí)候(百萬(wàn)——億級(jí)別)的時(shí)候,傳統(tǒng)的聚合方式會(huì)比map方式快。
4、小結(jié)
- global_ordinals是關(guān)鍵字字段( keyword field )的默認(rèn)選項(xiàng),它使用 全局順序(global ordinals) 來(lái)動(dòng)態(tài)分配存儲(chǔ)區(qū),因此內(nèi)存使用情況與作為聚合作用域一部分的文檔值的數(shù)量成線(xiàn)性關(guān)系。
- 只有極少數(shù)文檔與查詢(xún)匹配匹配時(shí)才應(yīng)考慮使用map方式。 默認(rèn)情況下,只有在腳本上運(yùn)行聚合時(shí)才會(huì)使用map,因?yàn)樗鼈儧](méi)有序號(hào)( ordinals )。否則,基于 順序(ordinals) 的執(zhí)行模式會(huì)相對(duì)更快。
參考: http://t.cn/R8WI6QD http://t.cn/R8WIKta https://elasticsearch.cn/question/1008 http://t.cn/R8WIpYn文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-789470.html
到了這里,關(guān)于Elasticsearch聚合優(yōu)化 | 聚合速度提升5倍!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!