ES forceMerge 强制段合并为什么会提升检索性能?

这篇具有很好参考价值的文章主要介绍了ES forceMerge 强制段合并为什么会提升检索性能?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  根据以前的测试,forceMerge段合并,将段的个数合并成一个。带来了将近一倍的性能提升,测试过程文档(请参考我的另外一篇文章):ES优化实战- forceMerge搜索提升测试报告_es forcemerge_水的精神的博客-CSDN博客

  注意,这次测试,只是这对一个长文本字段(就像一篇文章)的检索测试。假如同时对多个字段做检索,带来的性能会好更多!

  时间已经过去了许久,对检索的原理,对es集群的理解也有了更高的层次。再写一篇文章,来讲讲为什么会性能提升。讲讲段合并的适用场景,以及需要注意的事项。用的好了性能提升很多,用的不好,性能反而降低很多。


能够提升的原理

在 Elasticsearch 中,Lucene 索引被分为多个段(segments)以提高查询性能。每个段都是一个完整的 Lucene 索引,包含一部分数据。当一个文档被添加到索引中时,它会被添加到一个新的段中。这些新的段需要合并到更大的段中,以便更快地执行搜索操作。

forceMerge 是 Elasticsearch 提供的一个 API,可以将多个段合并成一个更大的段。这个过程可以通过减少段数来提高性能,因为

  • 更少的段意味着更少的搜索和查询操作需要执行。
  • 这可以减少内存使用
  • 因为段其实就是底层的一个个小文件。将小文件合并成大文件,毋庸置疑的是,去IO 1个G的一个文件,和IO将拆分每个10M的小文件,用的时间肯定是不一样的。IO一个大文件速度会更快一些。
  • 并减少查询所需的磁盘 I/O 操作次数。
  • 根据lucene的检索原理,默认,lucene在段中的检索,是单线程的。大体的流程是,串性在每个段中执行检索,然后再做结果的reduce合并。假如将所有的段合并成一个段,那么检索起来,至少在一个分片中。是不用做数据合并的。

当 Elasticsearch 需要执行搜索时,它必须在所有分片的所有段上执行查询。如果分片中包含大量小段,则需要执行的查询次数将非常多,从而导致搜索性能下降。如果使用 forceMerge 将这些小段合并为更大的段,则查询次数将减少,并且查询性能将得到显著提高。文章来源地址https://www.toymoban.com/news/detail-759796.html

forceMerge注意事项

  • 但是,需要注意的是,forceMerge 操作是一项资源密集型操作,会消耗大量的 CPU、磁盘和内存资源。这也是为什么官方默认只给一个merge线程。这个过程一定会影响到查询的性能,写入的性能。
  • 此外,forceMerge 过程中,需要花费一倍的磁盘空间。可以简单的它时间上就像是一个reindex过程,在reindex完成之前,你的集群中存放的数据它就一定是双倍的。只有等合并完成,它才会将原来的删掉。因为它将多个段合并为一个更大的段。这可能会对磁盘空间产生影响,因此需要确保有足够的磁盘空间可供使用。
  • 一定一定要注意。这项操作,建议只对不变更的数据做merge成一个段的操作。因为假如何合并完成后,再有更新,或者新写入,仍然会产生很多新的段。这会让检索性能降低很多。因为forceMerge 是一个强制的操作。但是新加进来的段,根据合并策略,它是没有办法和原来的段合并的!

到了这里,关于ES forceMerge 强制段合并为什么会提升检索性能?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch 为什么能做到快速检索?秘密在这里!,Java全栈知识体系

    如果你了解 ES 应该知道,ES 可以说是对 Lucene 的一个封装,里面关于倒排索引的实现就是通过 lucene 这个 jar 包提供的 API 实现的,所以下面讲的关于倒排索引的内容实际上都是 lucene 里面的内容。 三、倒排索引 首先我们还不能忘了我们之前提的搜索需求,先看下建立倒排索引

    2024年04月12日
    浏览(49)
  • 一文了解以太坊为什么合并及未来升级规划

    一、什么是以太坊升级 以太坊升级最初被称为「ETH 2.0」或「宁静(Serenity)」,是一次规划已久的以太坊网络重大升级,将使以太坊网络具有更好的可扩展性、安全性和可持续性。 二、为什么要进行升级 众所周知,以太坊正面临着网络拥堵、运行节点门槛高、能源损耗大等

    2023年04月08日
    浏览(46)
  • 为什么视频画质会变差,如何提升视频画质清晰度。

    在数字时代,视频已经成为我们生活中不可或缺的一部分。然而,随着视频的传输和处理过程中的多次压缩,画质损失逐渐凸显,影响了我们对影像的真实感受。为了让视频画质更加清晰、逼真,我们需要采取一些措施来保护和修复视频画质,还原影像的真实之美。 1、录制

    2024年02月16日
    浏览(43)
  • 小红书没人点赞是为什么?如何提升笔记点赞

    随着小红书规模的逐渐扩大,活跃用户的数量逐渐增多,也会让很多人产生一种疑问:为什么月活用户那么多,但是自己的小红书没人点赞。今天就来和大家一起谈谈这个问题,小红书没人点赞是为什么,有哪些情况会造成这种现象? 一、哪些情况造成小红书没人点赞这样一

    2023年04月15日
    浏览(50)
  • 为什么说es是近实时搜索

    首先要理解es的存储结构: 一个index的数据,分散在多个shard(分片),一个分片又有很多segment(段),es是数据不可变模型,更新数据只是新增一个版本。 es是怎么写数据的? 每次写的时候,首先会写到es的内存(每个分片的内存),这时写的数据是不可搜索的;然后每个分片默认每

    2024年02月11日
    浏览(57)
  • ElasticSearch(七):ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月08日
    浏览(81)
  • ElasticSearch第七讲:ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月19日
    浏览(52)
  • 入门ElasticSearch :为什么选择ES作为搜索引擎?

    随着数据量的不断增长,搜索和分析大规模数据集变得越来越重要。传统数据库在面对这种需求时往往表现不佳,这时候就需要一种专门用于搜索和分析的引擎。ElasticSearch (简称ES)就是这样一款强大的搜索引擎,它具有许多优势,使得它成为许多企业和开发者的首选。 简

    2024年02月09日
    浏览(48)
  • ElasticSearch第七讲 ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月25日
    浏览(57)
  • Kafka为什么在消息积压时不能直接通过消费者水平扩容来提升消费速度?

    我们知道当消息生产者生产的速度快于消费者的消费速度时,会产生大量的消息积压,大多数人的想法是增加消费者的数量来提升消费速度,这个想法在RocketMQ中是可行的,但是在Kafka中不一定可行。为了更方便地分析问题,我们先忽略消费者组的设计,在增加消费者之前,架

    2024年01月22日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包