elasticsearch索引index之merge底层机制的合并讲解

 更新时间:2022年04月22日 10:41:07   作者:zziawan  
这篇文章主要为大家介绍了elasticsearch索引index之merge底层机制的合并,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

merge是lucene的底层机制,merge过程会将index中的segment进行合并,生成更大的segment,提高搜索效率。

segment是lucene索引的一种存储结构,每个segment都是一部分数据的完整索引,它是lucene每次flush或merge时候形成。

每次flush就是将内存中的索引写出一个独立segment的过程。所以随着数据的不断增加,会形成越来越多的segment。

因为segment是不可变的,删除操作不会改变segment内部数据,只是会在另外的地方记录某些数据删除,这样可能会导致segment中存在大量无用数据。

搜索时,每个segment都需要一个reader来读取里面的数据,大量的segment会严重影响搜索效率。

而merge过程,会将小的segment写到一起形成一个大的segment,减少其数量。同时重写过程会抛弃那些已经删除的数据。因此segment的merge是有利于查询效率的。

elasticsearch的merge其实就是lucene的merge机制。merge过程是lucene有一个后台线程,它会根据merge策略来决定是否进行merge,一旦merge的条件满足,就会启动后台merge。

merge策略分为两种,这也是大多数大数据框架所采用的,segment的大小和segment中doc的数量。

以这两个标准为基础实现了三种merge策略:TieredMergePolicy、LogDocMergePolicy 及LogByteSizeMergePolicy。

elasticsearch这一部分就是对这三种合并策略的封装,并提供了对于的配置。

它的实现方式如下所示:

底层mergeprovider实现了对三种合并策略的初始化和配置,并通过getMergePolicy()方法对外提供。

这三种合并策略中LogDocMergePolicy是根据doc数量进行合并,其它两种都是根据segment的大小,只是TieredMergePolicy合并过程是分层进行,它会把小于某一值的所有segment合并成一个大的segment,然后再一次进行。

以上是合并策略,除了合并策略还有一个要说的就是合并线程。前面说过,merge是通过独立线程完成的,lucene对于线程策略也有两种,一种是顺序,另外一种就是并发。

顺序合并策略会阻止索引的进行,因此多数情况先不会使用,而并发合并则是和index过程同时进行,这样不会影响索引和搜索。

elasticsearch同样通过provider的形式提供这两种合并线程配置。

merge能够通过减少segment数量来提高搜索速度。但是merge的过程会对索引吞吐量及搜索速度有一定的影响,因此需要配置适当的合并策略参数。对于资源不足的环境,最好禁止自动merge,选择空闲时段手动进行merge。

以上就是elasticsearch索引index之merge底层机制的合并讲解的详细内容,更多关于elasticsearch索引index merge合并的资料请关注脚本之家其它相关文章!

相关文章

  • Git可视化教程之Git Gui的使用

    Git可视化教程之Git Gui的使用

    这篇文章主要介绍了Git可视化教程之Git Gui的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • VS2019创建MFC程序的实现方法

    VS2019创建MFC程序的实现方法

    这篇文章主要介绍了VS2019创建MFC程序的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 命令行下的2款网页截图工具推荐

    命令行下的2款网页截图工具推荐

    这篇文章主要介绍了命令行下的2款网页截图工具推荐,分别是针对IE浏览器的IECapt和针对Firefox浏览器的PageSaver,需要的朋友可以参考下
    2014-07-07
  • 通过Cursor工具使用GPT-4的方法详解

    通过Cursor工具使用GPT-4的方法详解

    Cursor 是集成了 GPT-4 的 IDE 工具,目前免费并且无需 API Key,支持 Win、Mac、Linux 平台,可以按要求生成代码,或者让 AI 帮助优化代码,分析代码,这篇文章主要介绍了通过Cursor工具使用GPT-4的方法,需要的朋友可以参考下
    2023-05-05
  • php asp.net 比较 [推荐]

    php asp.net 比较 [推荐]

    如今当提到 Web 开发时,您有许多选择。这些方法中许多都涉及到预处理 - 即,利用特定的标记将代码嵌入到 HTML 页面中
    2009-06-06
  • 详解Git合并分支的流程步骤

    详解Git合并分支的流程步骤

    这篇文章主要介绍了详解Git合并分支的流程步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • idea集成Git实现团队合作分工的原理详解

    idea集成Git实现团队合作分工的原理详解

    这篇文章主要介绍了idea集成Git实现团队合作分工的原理,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-12-12
  • Mac安装软件时提示已损坏的完美解决方法

    Mac安装软件时提示已损坏的完美解决方法

    从网上下载的SecureCRT、Principle等设计软件,以及输入法等常用软件,安装时可能会提示“已损坏,移至废纸篓”这类信息,根本无法打开,这篇文章主要介绍了Mac安装软件时提示已损坏的解决方法,需要的朋友可以参考下
    2022-07-07
  • 为Jenkins创建定时构建任务

    为Jenkins创建定时构建任务

    这篇文章介绍了为Jenkins创建定时构建任务的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Visual Assist X 番茄助手安装教程与汉化技巧

    Visual Assist X 番茄助手安装教程与汉化技巧

    Visual Assist X 是一款 Microsoft Visual Studio 扩展工具,能够帮助填补 Microsoft Visual Studio 在撰写 C/C++ 和 C# 程序之不足并提升其效率,本文给大家分享Visual Assist X 番茄助手安装与汉化教程,感兴趣的朋友一起看看吧
    2023-06-06

最新评论