Elasticsearch中查询性能优化

这篇具有很好参考价值的文章主要介绍了Elasticsearch中查询性能优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch中查询性能优化,后端

Elasticsearch是一种流行的搜索引擎和分布式文档存储解决方案,它的高效性能和可伸缩性使其成为许多应用程序的首选存储引擎。在工作中,优化Elasticsearch的检索性能是一个非常重要的任务,可以大大提高应用程序的响应速度和用户体验。下面我们将讨论如何优化Elasticsearch的检索性能,以及如何处理大文本文档。

一、确保良好的硬件和网络性能

Elasticsearch的性能受到硬件和网络等多个因素的影响。因此,在优化检索性能之前,要确保服务器硬件和网络性能足够好。尽可能使用高速的网络连接和SSD硬盘,这样可以显著减少搜索响应时间。

二、优化Elasticsearch的查询语句

Elasticsearch的查询语句是影响性能的关键因素之一。查询语句越复杂,性能就越低。因此,可以通过以下几种方式来优化查询语句:

  • 尽量使用简单的查询语句,避免使用复杂的正则表达式、通配符查询等。

  • 使用过滤器查询(filter query)替代普通查询(bool query),可以显著提高性能。

  • 将查询结果限制为必要的字段,避免返回不必要的数据。

  • 避免使用远程互联网数据,提高查询速度。

三、优化Elasticsearch的索引

Elasticsearch的索引是另一个影响性能的关键因素。以下是一些优化索引的方法:

  • 将索引设置为只读,可以提高索引的读取速度。

  • 合理设置分片和副本,可以提高索引的并行性和可靠性。

  • 只为必要的字段创建索引,避免创建不必要的索引。

  • 定期合并段(merge segments)来减少磁盘碎片和优化索引性能。

四、合理设置Elasticsearch的内存阈值

Elasticsearch使用Java虚拟机(JVM)来运行,因此可以通过设置JVM内存大小来优化性能。一般来说,将JVM内存设置为可用物理内存的一半比较合适,但是如果内存阈值设置过大,可能会导致JVM崩溃或性能下降。如果遇到内存阈值超过设置的情况,Elasticsearch会默认将大文本文档拆分为多个小文档进行索引和查询,以避免内存溢出和性能下降问题。

综上所述,优化Elasticsearch的检索性能需要综合考虑硬件、网络、查询语句、索引和内存等多个因素。通过优化这些因素,可以显著提高Elasticsearch的检索性能和响应速度,从而提高应用程序的用户体验。

五、大文件处理

现在有这么个场景,我有一个文件,大小2g,我读取这2g的文本内容保存到elasticsearch的一个content字段中,这个content字段是text类型

当将ElasticsearchJVM内存最大设置为4GB时,就可以将整个2GB的文本内容读取到内存中,然后将其存储到Elasticsearchcontent字段中。由于JVM内存设置为4GBElasticsearch可以使用的最大内存为4GB,在索引和查询过程中都可以充分利用这4GB的内存来提高性能。

当将ElasticsearchJVM内存最大设置为2GB时,就不能将整个2GB的文本内容读取到内存中。在将文本内容存储到Elasticsearchcontent字段中时,Elasticsearch会将文本内容分成多个小块进行索引和存储,每个小块的大小取决于Elasticsearch的分片大小、文档段大小等因素。因此,在查询时,Elasticsearch需要从多个小块中读取数据并进行组合,这可能会影响查询性能。如果文本内容的块数太多,查询性能可能会显著下降。

  • 分片大小和文档段大小

文本内容在Elasticsearch中被拆分成多个小块的大小取决于两个因素:分片大小和文档段大小。

分片大小是指在创建索引时将一个索引分成多个分片,每个分片可以存储一部分文档。默认情况下,Elasticsearch会将索引分成5个分片。每个分片都是一个独立的Lucene索引,可以在不同的节点上分布式存储。如果索引较大,可以增加分片数以提高查询性能和可伸缩性。

文档段大小是指在Lucene中,每个分片都被划分为多个文档段(segment),每个文档段都是一个独立的倒排索引文件。默认情况下,Elasticsearch每隔30分钟就会合并一次文档段,以减少磁盘碎片和优化索引性能。文档段的大小可以通过调整合并策略来控制。

  • 拆分块的处理

Elasticsearch中,文本内容被拆分成多个小块并不是保存在磁盘中的,而是保存在内存中的。每个小块是一个独立的Lucene文档,可以通过分片和文档段来存储和管理。当对文本内容进行查询时,Elasticsearch会从多个小块中读取数据并进行组合,以返回查询结果。

对于一个大小为2GB的文本,当将ElasticsearchJVM内存最大设置为2GB时,Elasticsearch无法将整个文本读入到内存中,因此会将文本拆分为多个小块,并将它们存储在磁盘上的多个Lucene文档中。当进行查询时,Elasticsearch会从磁盘中读取这些小块,并在内存中对它们进行排序、过滤和组合,然后返回查询结果。由于在查询过程中,Elasticsearch需要将多个小块读入内存并进行组合,因此查询性能可能会受到一定的影响。

Elasticsearch需要读取多个小块进行查询时,它并不会一次性将所有的小块全部加入内存中,而是采用分批读取的方式,以避免内存不足的情况发生。具体来说,当进行查询时,Elasticsearch会首先从磁盘中读取一部分小块到内存中,以进行排序、过滤和组合等操作,然后将处理过的结果再与后面的小块进行组合。这样,Elasticsearch可以在不占用过多内存的情况下完成查询操作。

假如1000个文本块,在合并到800个文本块时,Elasticsearch在查询过程中发现内存不足时,会根据查询优先级和内存使用情况等因素自动进行GC(垃圾回收),以释放一部分内存。如果GC之后仍然无法满足查询的内存需求,Elasticsearch会将查询暂停,等待内存空间释放后再继续执行查询操作。

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-572242.html

到了这里,关于Elasticsearch中查询性能优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL查询性能优化——SQL优化(四)

      目录 1、批量插入数据 1.1 linux环境下 1.1.1 开启文件读取 1.1.2 load数据 1.2 windows环境下 2、order by优化 2.1 最左前缀 3、group by 3.1 最左前缀 4、count优化 5、or条件优化   在上一期说到索引的使用,这期来聊一下SQL优化,也是平常写SQL的时候常用到的。 在前几期也有聊到过批量插

    2024年02月19日
    浏览(59)
  • 【性能优化】MySql数据库查询优化方案

    了解系统运行效率提升的整体解决思路和方向 学会MySQl中进行数据库查询优化的步骤 学会看慢查询、执行计划、进行性能分析、调优 ​关于这个问题,我们通常首先考虑的是硬件升级,毕竟服务器的内存、CPU、磁盘IO速度 、网络速度等都是制约我们系统快慢的首要因素。硬

    2024年02月03日
    浏览(59)
  • doris查询性能优化

    (1)首先要开启profile  set enable_profile=true; (2)执行所要查询的sql (3)查询当前sql的profile show query profile \\\"/\\\";(找到对应的sql) (4)获取QueryId,查询总的执行计划 示例:show query profile \\\"/271dc937f9564af0-9ec7ce5755d88c66\\\"; 以下是每个节点的执行时间概览 结果示例      ┌──────────

    2024年03月28日
    浏览(44)
  • MySql查询性能优化

    慢查询判定 慢查询优化 是否向服务器请求列不必要的数据 是否走索引 建立索引的原则: 最左前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(、、between、like)就停止匹配,比如a = 1 and b = 2 and c 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c

    2024年03月13日
    浏览(36)
  • MySQL的故事——查询性能优化

    HIGH_PRIORITY和LOW_PRIORITY 这个提示告诉MySQL,当多个语句同时访问某一个表时,哪些语句的优先级相对高些,哪些相对低些 DELAYED 这个提示对INSERT和REPLACE有效。MySQL会将使用该提示的语句立即返回给客户端,并将插入的行数据放入到缓冲区,然后在表空闲时批量将数据写入。 S

    2024年02月09日
    浏览(29)
  • 后端架构师必知必会系列:性能优化与负载均衡策略

    作者:禅与计算机程序设计艺术 在互联网高速发展的今天,网站的流量越来越多,为了保证网站的正常运行,优化服务器的性能显得尤为重要。同时为了提升网站的访问速度、节省网络带宽成本、提供更好的用户体验,很多网站都会采用分布式架构或云计算平台来提高网站的

    2024年02月06日
    浏览(57)
  • MySQL查询性能优化——索引分类(二)

    目录 一、索引分类   1.按存储引擎存储形式分类     1.1聚集索引    1.1.1聚集索引结构   1.2 二级索引  1.2.1二级索引结构 2.按数据库分类  2.1 主键索引   2.2 唯一索引  2.3 常规索引  2.4 联合索引  2.5 全文索引 上一期说到索引的原理其实就是B+树,这期我们来聊一下索引的

    2024年01月22日
    浏览(45)
  • mysql高级三:sql性能优化+索引优化+慢查询日志

    内容介绍 单表索引失效案例 0 、思考题: 如果把 100 万数据插入 MYSQL ,如何提高插入效率 (1)关闭自动提交,只手动提交一次 (2)删除除主键索引外其他索引 (3)拼写mysql可以执行的长sql,批量插入数据 (4)使用java多线程 (5)使用框架,设置属性,实现批量插入 1、

    2024年02月12日
    浏览(72)
  • 优化索引粒度参数提升ClickHouse查询性能

    当对高基数列进行过滤查询时,总是希望尽可能跳过更多的行。否则需要处理更多数据、需要更多资源。ClickHouse缺省在MergeTree表读取8192行数据块,但我们可以在创建表时调整该 index_granularity 参数。本文通过示例说明如何调整该参数优化查询性能。 下面示例,创建表并插入

    2024年02月11日
    浏览(45)
  • 大厂报价查询系统性能优化之道!

    机票查询系统,日均亿级流量,要求高吞吐,低延迟架构设计。提升缓存的效率以及实时计算模块长尾延迟,成为制约机票查询系统性能关键。本文介绍机票查询系统在缓存和实时计算两个领域的架构提升。 1.1 机票搜索的业务特点 机票搜索业务:输入目的地,然后点击搜索

    2024年03月25日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包