说说Elasticsearch Segment合并

分析&回答


通过每隔一秒的自动刷新机制会创建一个新的segment,用不了多久就会有很多的segment。segment会消耗系统的文件句柄,内存,CPU时钟。最重要的是,每一次请求都会依次检查所有的segment。segment越多,检索就会越慢。

ES通过在后台merge这些segment的方式解决这个问题。小的segment merge到大的,大的merge到更大的。这个过程也是那些被”删除”的文档真正被清除出文件系统的过程,因为被标记为删除的文档不会被拷贝到大的segment中。

合并过程如下:

  1. 当在建立索引过程中,refresh进程会创建新的segments然后打开他们以供索引。
  2. merge进程会选择一些小的segments然后merge到一个大的segment中。这个过程不会打断检索和创建索引。
  3. 一旦merge完成,旧的segments将被删除
    • 新的segment被flush到磁盘
    • 一个新的提交点被写入,包括新的segment,排除旧的小的segments
    • 新的segment打开以供索引
    • 旧的segments被删除
      merge大的segments会消耗大量的I/O和CPU,严重影响索引性能。默认,ES会节制merge过程来给留下足够多的系统资源。

喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

你可能感兴趣的:(分布式数据库,elasticsearch,大数据,搜索引擎)