这期内容当中小编将会给大家带来有关怎样深入理解batched_reduce_size,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
在search 流程中,协调节点收到客户端的查询请求后,将请求涉及到的转发到其他数据节点,这个过程中会以 shard 为单位发送 query请求,待所有的请求都收到响应(QuerySearchResult)后进行下一步处理。
batched_reduce_size 参数用于控制在Search过程中,当协调节点收到指定的结果时执行一次 reduce。
官网对他的解释如下:
(Optional, integer) The number of shard results that should be reduced at once on the coordinating node. This value should be used as a protection mechanism to reduce the memory overhead per search request if the potential number of shards in the request can be large. Defaults to 512.
这个解释看上去难以理解本质,因此查阅一下代码,重新解释一下这个参数的含义:协调节点并行发送完 query 请求后,收到的响应QuerySearchResult达到batched_reduce_size数量时,执行一次 reduce,reduce 执行以下操作:
如果请求中含有聚合,则对这批结果执行聚合
如果请求中需要计算 TopN,则对这批结果执行计算
因此这个参数的主要作用是防止协调节点为了汇总全部结果而占用太多内存。
主要实现代码如下,bufferSize就是batched_reduce_size设置的值,默认为512
private synchronized void consumeInternal(QuerySearchResult querySearchResult) {
if (index == bufferSize) {
if (hasAggs) {
InternalAggregations reducedAggs = InternalAggregations.reduce(Arrays.asList(aggsBuffer), reduceContext);
Arrays.fill(aggsBuffer, null);
aggsBuffer[0] = reducedAggs;
}
if (hasTopDocs) {
TopDocs reducedTopDocs = mergeTopDocs(Arrays.asList(topDocsBuffer),
querySearchResult.from() + querySearchResult.size(), 0);
Arrays.fill(topDocsBuffer, null);
topDocsBuffer[0] = reducedTopDocs;
}
numReducePhases++;
index = 1;
}
final int i = index++;
if (hasAggs) {
aggsBuffer[i] = (InternalAggregations) querySearchResult.consumeAggs();
}
if (hasTopDocs) {
topDocsBuffer[i] = topDocs.topDocs;
}
}
上述就是小编为大家分享的怎样深入理解batched_reduce_size了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。