elasticsearch merge 源码

本文深入探讨了Elasticsearch中的TieredMergePolicy,重点解析了findMerges方法。通过计算segment的大小,排除超限的segment,调整minSegmentBytes,并基于minSegmentBytes、segsPerTier和maxMergeAtOnce确定合适的merge数量。文章还提到了参数如`index.merge.policy.floor_segment`等对merge频率的影响。
摘要由CSDN通过智能技术生成

从2.x版本就开始lucene默认采用的合并策略就已经是TieredMergePolicy了。所以今天有时间了解并看了一下TieredMergePolicy.findMerges方法的实现。

// 正在mergin的segmentinfo
Collection<SegmentCommitInfo> merging = writer.getMergingSegments();
Collection<SegmentCommitInfo> toBeMerged = new HashSet<>();

// 把SegmentCommitInfo放到集合中并且对其继续降序排序
List<SegmentCommitInfo> infosSorted = new ArrayList<>(infos.asList());
Collections.sort(infosSorted, new SegmentByteSizeDescending(writer));

接着把统计集合中的segments总大小(这个大小不包含删除),并且计算出最小的大小minSegmentBytes

    long totIndexBytes = 0;
    long minSegmentBytes = Long.MAX_VALUE;
    for(SegmentCommitInfo info : infosSorted) {
      final long segBytes = size(info, writer);
      // 代码省略....
      minSegmentBytes = Math.min(segBytes, minSegmentBytes);
      // Accum total byte size
      totIndexBytes += segBytes;
    }

计算出集合中的总大小和最小的两个值之后,把超过maxMergedSegmentBytes/2.0大小的segment给排除掉,并且减去相应的大小(infosSorted已经排好序,由大到小,循环完之后会记录(tooBigCo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值