ES性能优化最佳实践- 检索性能提升30倍!

        Elasticsearch是被广泛使用的搜索引擎技术,它的应用领域远不止搜索引擎,还包括日志分析、实时数据监控、内容推荐、电子商务平台、企业级搜索解决方案以及许多其他领域。其强大的全文搜索、实时索引、分布式性能和丰富的插件生态系统使其成为了许多不同行业和领域的首选技术。
        虽然Elasticsearch是一款强大的搜索引擎技术,但在超大规模数据检索中,尤其是在处理大量检索关键词(150个以上)、对多个字段执行检索并使用脚本排序时,可能会面临严重的性能问题。
        在我们实际的业务中,检索的时间可能到达300秒,无法满足实时交互需求。本文带你打开一个新思路。在 千亿级数据检索背景下,在 未添加任何资源的情况下,我把性能提升了 30倍,请求时间控制在 10s内。多数请求能在3秒5秒内完成。一起来看看我是如何做到的叭。

前言:检索性能问题 

       

  1. 复杂性查询的挑战:当涉及大量检索关键词和多字段检索时,查询变得复杂,需要更多计算资源来处理这些复杂的查询。这会导致性能下降。

  2. 脚本排序开销:使用脚本排序可以在排序时进行自定义计算,但脚本的执行会增加额外的计算负担,尤其在大规模数据集上。

  3. 分片和节点负载:Elasticsearch分布式架构依赖于分片和节点,如果查询请求分布不均匀或某些节点负载过重,性能问题可能会显著增加。

  4. 内存和磁盘资源:大规模查询需要更多的内存和磁盘资源来存储索引和数据,因此,硬件资源的配置可能成为性能瓶颈。

 

一、综合排序检索性能提升

1.1 性能提升效果

优化前后响应时间如下图1所示

图1

1.1.1 性能对比说明

  1. 其中横轴为普通检索场景,由检索时间范围和检索关键词个数组成。纵轴是请求平均响应时间,单位为秒。
  2. 在坐标轴上,红色代表的是性能优化前的请求响应时间,绿色代表的是优化后的请求响应时间。黑色虚线代表的是目标线,目标为,单次请求在5s内。

1.1.2 响应时间影响因素:

  1. 检索资源越多(服务器),响应时间越短。
  2. 检索时间范围越大(一次检索数据越多),响应时间越长。目前支持最大的检索时间跨度为3个月。
  3. 检索关键词越多,响应时间越长。目前能够给业务开放支持的是 100个检索词。

1.1.3 优化后效果

  1. 整体性能提升效果明显,提升在 1~ 30倍
  2. 其中对于慢查询提升效果更好。对于检索时间范围越长,效果提升越好;对于检索关键词越多,效果提升越好。
  3. 最终的检索效果,检索关键词小于等于50个,响应时间可以控制在5s内,能够达到目标。其中只有检索时间跨度到3个月,检索关键词100无法达到5s内,目前是7s。

1.3 测试数据说明

性能提升前后测试数据如下图2:

  1. 测试对比数据由测试组同事提供
  2. 测试接口为服务总线生产环境,检索逻辑为实际的业务检索条件。响应时间略大于ES的响应时间。其中有0.3~0.5花在网络传输上。
  3. 其中提升前,是指综合排序,使用脚本实现,是闻海2.0实现思路。提升后是指使用cutting off机制,对搜索进行优化。

图2

1.4 关于综合排序说明

综合排序,是业务上使用最频繁的一种数据排序方式,也是默认的排序方式。其可以结合多个字段以及ES的BM25相关性分数,做一个综合的排序。在实现上,使用script提取每一条数据的N个字段,然后计算一个分数,并和ES的相关性分数做融合。

其最大的优点是召回的数据质量好,可以满足相关性的排序效果

其最大的缺点是单次检索,有非常大的计算量,需要花费大量的资源。单个检索随着命中的数据变多,检索的时间复杂度增加,响应时间增加。使用script,需要对命中的所有数据做实时计算,计算过程需要将所需要的字段IO出来,会产生大量小文件的IO。由于每一条数据都需要做计算,索引,会占用大量的CPU资源,最终导致整体检索效果慢N倍,N>5。且随着关键词命中的结果集合增大,额外的IO和CPU计算导致检索性能越来越差。50个检索词在三个月中,耗时39s。150个词在三个月数据中检索时间300s。

1.5 优化说明

1.5.1上述综合排序中的问题,归结为两点。

  1. 有脚本的存在,且需要实时计算。ES中脚本排序是一种低性能的检索方式。
  2. 单次检索需要扫描全量的数据,且要对命中的数据做计算。单次检索复杂度高。其中最大检索时间跨度下,全部数据约450亿数据。最大检索关键词数下,100个检索关键词OR的逻辑,能够命中上亿的数据。

1.5.2 针对问题,提出解决方案:

  1. 分数预处理机制:对于多个要参与排序的字段分数,可以提前计算好,用一个额外的字段承接此分数。此操作可避免实时计算,从IO多个字段,变为IO 一个字段。如下图所示,在数据处理层,在数据入ES前,通过对数据的预处理,计算文档的质量分数。利用ES的插入排序能力,将高质量的文档在插入的时候放在最前边检索。

  1. 避免扫描全量数据。利用数据写入排序,可以做到将高质量数据在存储上总是排在前边,优先被检索到。在数据根据质量有序以后,则请求可以做截断。优先遍历高质量数据,找到topK的满足条件的数据,此时分数也是最高的,达到召回条件后,则提前终止请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/109011.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RTE(Runtime Environment)

RTE(Runtime Environment)是一个运行时环境,在这个环境里,你可以实现的功能是: 作为一个缓冲buffer给应用层和BSW层的接口(例如COM)用来存储数据,也就是说定义一个全局变量供上层和下…

SAP业务从ECC升级到SAP S/4HANA有哪些变化?有哪些功能得到增强?

SAP在2015年推出了新一代商务套件SAP S/4 HANA。 SAP S/4 HANA (全称SAP Business suite 4 SAP HANA),这款新产品完全构建于目前先进的内存平台SAP HANA 之上,同时采用现代设计理念,通过SAP Fiori 提供精彩的用户体验 (UX)。提供比ECC更强大的功能。S/4h…

[SpringCloud] Nacos 简介

目录 一、Nacos,启动! 1、安装 Nacos 2、运行 Nacos 3、Nacos 服务注册 二、Nacos 服务多级存储模型 1、服务跨集群分配 2、NacosRule 负载均衡(优先本地) 3、服务实例的权重设置 4、环境隔离 三、Nacos 注册中心细节分…

[毕设记录]@开题调研:一些产品

我感觉产品能代表落地的一些实际应用,会和研究的角度有些差别,但是需求和兴趣往往是从现实中来的,在上一篇blog里面看外国blog的时候顺着搜搜到了很多国外的智慧校园chatbot解决方案 文章目录 Comm100streebomodern campusUniBuddy Comm100 …

私有云:【9】Connection配置

私有云:【9】Connection配置 1、关闭IE增强配置2、Connection配置2.1、登录connection管理台配置许可证2.2、添加VCenter主机2.3、配置Composer 1、关闭IE增强配置 关闭此项 全部关闭 2、Connection配置 2.1、登录connection管理台配置许可证 上一章connection…

Lua脚本语言

1. 概念 Lua(发音为"loo-ah",葡萄牙语中的"lua"意为月亮)是一种轻量级的、高效的、可嵌入的脚本编程语言。官网Lua最初由巴西计算机科学家Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo于1993年开…

深度神经网络的数学原理:基于超平面、半空间与线性区域的表示

概述 以前的文章主要描述了神经网络,即多层感知机、全连接模型的运行原理,还是以实验为主,数学描述为辅的方式,这篇文章以纯数学的视角来描述神经网络的运行原理,主要以前馈过程为主(反向传播的动力学过程…

python爬虫selenium和ddddocr使用

python爬虫selenium和ddddocr使用 selenium使用 selenium实际上是web自动化测试工具,能够通过代码完全模拟人使用浏览器自动访问目标站点并操作来进行web测试。 通过pythonselenium结合来实现爬虫十分巧妙。 由于是模拟人的点击来操作,所以实际上被反…

N-130基于springboot,vue校园社团管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plus 本系…

mac安装nodejs,跑vue程序

1. 下载node.js for mac,地址:Node.js。一路安装就可以了,无需修改。 2. mac终端,查看node和npm的版本。 3. 配置环境变量, vim .bash_profile增加PATH$PATH:/usr/local/bin/ 4. 但是毕竟npm安装一些东西还是太慢了所…

Godot 官方2D C#重构(4):TileMap进阶使用

文章目录 前言完成内容项目节点结构TileMap设置图片资源备选图片添加物理碰撞添加y轴遮罩判断Y Sort Enable是干什么的? 脚本代码 前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 完成内容 项目节点结构 TileMap设置 图片资源 备选图…

IDEA常用的一些插件

1、CodeGlance 代码迷你缩放图插件,可以快速拖动代码,和VScode一样 2、Codota 代码提示工具,扫描你的代码后,根据你的敲击完美提示。 Codota基于数百万个开源Java程序和您的上下文来完成代码行,从而帮助您以更少的…

云游长江大桥,3DCAT实时云渲染助力打造沉浸化数字文旅平台

南京长江大桥是中国第一座自主设计建造的双层公路铁路桥,也是世界上最早的双层公路铁路桥之一。它不仅是一座桥梁,更是一座历史文化的见证者和传承者。它见证了中国人民的智慧和奋斗,承载了中国社会的变迁和发展。 如何让这座不可移动的文物…

简单方法搭建个人网站

随着互联网的发展,越来越多的人希望拥有一个属于自己的网站,用来展示自己的个人才华、推广自己的产品或服务。但是,很多人都因为没有编程知识而望而却步。现在,有一个简单的方法可以帮助你轻松搭建网站,无需编程知识。…

Hadoop3.0大数据处理学习1(Haddop介绍、部署、Hive部署)

Hadoop3.0快速入门 学习步骤: 三大组件的基本理论和实际操作Hadoop3的使用,实际开发流程结合具体问题,提供排查思路 开发技术栈: Linux基础操作、Sehll脚本基础JavaSE、Idea操作MySQL Hadoop简介 Hadoop是一个适合海量数据存…

IDEA部署SSM项目mysql数据库MAVEN项目部署教程

如果 SSM 项目是基于 Maven 构建的,则需要配置 maven 环境,否则跳过这一步 步骤一:配置 Maven 第一步:用 IDEA 打开项目,准备配置 maven 环境 ,当然如果本地没有提前配置好 maven,就用 IDEA 默…

方舟生存进化ARK个人服务器搭建教程保姆级

方舟生存进化ARK个人服务器搭建教程保姆级 大家好我是艾西,在很久之前我有给大家分享过方舟生存进化的搭建架设教程,但时间久远且以前的教程我现在回头看去在某些地方说的并不是那么清楚。最近也是闲暇无事打算重新巩固下方舟生存进化的搭建架设教程&…

GoLong的学习之路(十三)语法之标准库 log(日志包)的使用

上回书说到,flag的问题。这回说到日志。无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯。 文章目录 log配置logger配置日志前缀配置日志输出位置自定义logger …

GAMP源码阅读(中)伪距单点定位 SPP

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、SPP 解算1、spp():单点定位主入口函数2、estpos()3、estpose_()4、valsol():GDOP和卡方检验结果有效性 二、卫星位置钟…

一个基于Excel模板快速生成Excel文档的小工具

介绍 DocumentGenerator是一个Excel快速生成工具,目标以后还能实现Word、pdf等的文件的生成。该程序独立运行,可通过HTTP接口调用其生成接口。 典型使用场景为如下: 使用者编写模板文件使用者准备模板文件的填充JSON数据内容使用者通过网络…
最新文章