Elasticsearch聚合性能優化


Terms Aggregation 的計算方式主要有以下兩種:

map,在內存中構建映射表,利用映射表完成聚合計算,可以看得出,這種方式會比較消耗內存。

global_ordinals,每個桶都會有一個全局序列號,也就是指定域中的唯一值都會有一個全局序列號,根據這個序列號完成相關的聚合過程。計算過程消耗的內存較小,因為使用全局序列號的話可以將計算中的中間結果存儲到硬盤等存儲介質中。

es java api 做聚合時默認的是第二種,消耗內存少,但時間長,評估了一下內存,果斷采用第一種,設置executionHint即可,如:

AggregationBuilder ipAggregation = AggregationBuilders.terms("xx").field("xx").executionHint("map");
修改了之后,查詢性能提升了十幾倍,達到目的,且沒出現oom


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM