elasticsearch分组统计性能优化

Terms aggregation默认的计算方式并非直观感觉上的先查询,然后在查询结果上直接做聚合。

 

最近用es做数据统计时,增加了一个统计维度,发现查询性能下降了十几倍,查询es文档发现

Terms Aggregation 的计算方式主要有以下两种:

map,在内存中构建映射表,利用映射表完成聚合计算,可以看得出,这种方式会比较消耗内存。

global_ordinals,每个桶都会有一个全局序列号,也就是指定域中的唯一值都会有一个全局序列号,根据这个序列号完成相关的聚合过程。计算过程消耗的内存较小,因为使用全局序列号的话可以将计算中的中间结果存储到硬盘等存储介质中。

es java api 做聚合时默认的是第二种,消耗内存少,但时间长,评估了一下内存,果断采用第一种,设置executionHint即可,如:

AggregationBuilder ipAggregation = AggregationBuilders.terms("xx").field("xx").executionHint("map");
修改了之后,查询性能提升了十几倍,达到目的,且没出现oom
 

 

           AggregationBuilder field = AggregationBuilders.terms("view_column").field("view_column")
                   .executionHint("map")
                    ;

或者
             TermsAggregationBuilder field = AggregationBuilders.terms("view_column").field("view_column")
                     .executionHint("map")
                     ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值