elasticsearch的段合并机制

es创建一个document的时候会向translog和in memory buffer中写入,为了近实时性,会将buffer中的数据写入到segment,进入了segment的数据才能被搜索到。

  1. es默认每秒钟refresh创建一个segment
    在这里插入图片描述
  2. 后台将这些小的segment合并成大的segment。每次的文档删除操作,会仅仅标记 Segment 中该文档 为删除状态, 而不会真正的立马物理删除,在段合并的时候不会把已删除的文档拷贝到新的segment中。

在这里插入图片描述
(上图中两个已经通过flush提交到磁盘的segment和一个未提交的segment一起合并到一个大的segment)

  1. 新的segment被flush到磁盘,写入一个包含新段且排除旧的和较小的段的新提交点。然后删除老的段

在这里插入图片描述
Elasticsearch 在默认情况下会对合并流程进行资源限制,为了给搜索功能留足够的资源。默认的限速配置为20mb,如果磁盘转速高可以适当调大

PUT /_cluster/settings
{
    "persistent" : {
        "indices.store.throttle.max_bytes_per_sec" : "100mb"
	} 
}

optimize API是一个合并的api,它会将一个分片强制合并到 max_num_segments 参数指定 大小的段数目

POST /logstash-2014-10/_optimize?max_num_segments=1
#java中
forceMergeRequest.maxNumSegments(1)

segment归并策略policy:
可以在setting中配置

#默认2MB,小于这个大小的 segment,优先被归并
"index.merge.policy.floor_segment": "10mb"
#归并的线程数
"index.merge.scheduler.max_thread_count": "1"
#默认一次最多归并 10 个segment
"index.merge.policy.max_merge_at_once": "10"
#默认optimize 时一次最多归并30个segment。
"index.merge.policy.max_merge_at_once_explicit": "10"
#默认5GB,大于这个大小的segment,不参与归并。optimize除外
"index.merge.policy.max_merged_segment": "5gb"

官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/merge-process.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值