分布式搜索引擎(五) ES性能分析

简介: ES 性能分析简述

ES搜素性能分析

  1. 性能优化杀手锏-filesystem cache

    ES 的搜索引擎严重依赖底层的fileSystem cache,如果过能给到FileSystem cache更多的内存,尽可能让内存容纳所有的index segment file索引数据文件,那么搜索的时候基本都是走内存的,性能会非常高

    fileSystem Cache 对ES搜索效率的影响

    image-20230511111825329.png

ES 搜索走FileSystemCache 和 走磁盘的性能差距有多大:如果搜索走的是磁盘文件检索,那么响应的时间基本上是在s级别,如果是在FileSystem-cache中获取,则响应的时间基本是在ms,一般来说是几ms到几百ms之间不等

根据上面的数据量来推断,如果总的数据量是1T左右,那么所有的ES集群中的FileSystem-cache加起来最少要得有半数的内存,这样你的ES检索速度才能提上来,性能是可以直接到2,3,5s

  1. ES存储数据限制,简单来说,如果在检索的时候,只需要根据id, name, age三个字段来搜索,但是在每次往es写入数据的时候,直接往es中存入了所有的数据,这就导致每一个数据中的70%的数据是不用搜索的,但是这些数据硬生生占用了FileSystemCache的空间

  2. 一般来说可以通过ES+Hbase来进行大数据量检索,因为hbase支持大数据量的存储,但是检索性能着实太低,所以,可以使用ES来检索关键数据,然后由Hbase来补充其余数据就可以

    从ES中根据name和age去进行检索,然后获取的结果可能就是20个doc id,然后根据doc id去hbase中查询每个doc id对应的完整的数据,将结果查询出来,然后再返回给前端,这样的性能完全是ms级的

    所以说最好的方式就是ES中只存放检索的数据,然后其他的数据存放在Mysql或者hbase中,最好的就是Es 中存放的数据尽量不要大于file system cache 的空间,或者是略微大于

  3. 数据预热

    上述可以解决一定的问题,但是如果Es中存储的数据着实超过了file system cahe的空间,还可以通过数据预热的方式来进行查询效率的优化,写一个定时任务,每隔一段时间执行一下慢查询的数据,这样用户体验起来要好很多

  4. 冷热分离,最好是将冷数据写入一个索引中,然后热数据写入另一个索引中,这样可以确保热数据被预热知乎,尽量让他们都留在fileSystem OS cache中,别让冷数据冲刷掉,类似于Mysql的水平拆分,有一台Shard专门处理热数据检索

  5. document模型设计

    document模型设计是非常重要的,尽量不要去执行es的复杂操作,譬如说join, nested,parent-child搜索都需要避免,性能很差,能用java处理的操作用java处理,然后es只做简单的查询

  6. 分页查询的性能优化

    es的分页其实是比较坑的,举个例子,每页10条数据,现在查询第100页,实际上就是会把每个shard上存储的前1000条数据都查到一个协调节点上,假如说有5个es,就会将获取到5000条数据,然后对这些数据进行合并,处理,然后再获取到最终100页的10条数据

    翻页的时候,翻的越深,每个shard返回的数据就越多,而且协调节点处理的时间越长,比较坑,所以用es做分页的时候,越到后面,就越慢

    针对这个问题,可以采用用scroll来进行处理,scroll的原理实际上就是保留一个数据快照,然后在一定时间内,如果不断地滑动往后翻页的时候,类似于现在浏览微博,不断往下刷新翻页,那么就用scroll不断通过游标获取下一页数据,这个性能是很高的,但是有个问题,scroll不能做到随机翻页,只能直接往下滑,所以可用性还是比较局限

    不允许深度分页/默认深度分页性能很差

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
存储 边缘计算 人工智能
云计算与分布式系统架构:驱动数字化时代的创新引擎
本文将探讨云计算与分布式系统架构在数字化时代中的重要性,介绍其基本概念和原理,并探讨其在推动技术创新、提升企业效率和满足用户需求方面的作用。同时,还将提出未来发展的趋势和挑战,为读者提供对云计算与分布式系统架构的深入理解。
|
4月前
|
消息中间件 算法 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
尽管经过了上一篇文章 《【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现》有了低延迟的优化保障,消息引擎仍需精心规划其容量。为了提供无与伦比的流畅体验,消息引擎必须实施有效的容量管理策略。
53 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
|
8月前
|
SQL 分布式计算 数据库连接
大数据Spark分布式SQL引擎
大数据Spark分布式SQL引擎
219 0
|
3月前
|
消息中间件 存储 负载均衡
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
昔之善战者,先为不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能为不可胜,不能使敌之必可胜。故曰:胜可知,而不可为。
84 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
|
4月前
|
消息中间件 存储 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
在充满挑战的2023年度,我们不可避免地面对了一系列棘手的问题,例如响应速度缓慢、系统陷入雪崩状态、用户遭受不佳的体验以及交易量的下滑。这些问题的出现,严重影响了我们的业务运行和用户满意度,为了应对这些问题,我们所在团队进行了大量的研究和实践,提出了低延迟高可用的解决方案,并在分布式存储领域广泛应用。
49 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
|
3月前
|
SQL 搜索推荐 数据库
分布式搜索引擎_学习笔记_3
分布式搜索引擎_学习笔记_3
20 1
|
5月前
|
SQL 分布式计算 Java
Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)
Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)
47 0
|
5月前
|
SQL 关系型数据库 MySQL
Presto【基础 01】简介+架构+数据源+数据模型+特点(一篇即可入门支持到PB字节的分布式SQL查询引擎Presto)
Presto【基础 01】简介+架构+数据源+数据模型+特点(一篇即可入门支持到PB字节的分布式SQL查询引擎Presto)
59 0
|
6月前
|
数据采集 前端开发 Java
分布式系列教程(38) -SpringBoot基于ES的网盘应用
分布式系列教程(38) -SpringBoot基于ES的网盘应用
39 0
|
9月前
|
数据采集 XML 搜索推荐
聚焦Python分布式爬虫必学框架Scrapy打造搜索引擎
聚焦Python分布式爬虫必学框架Scrapy打造搜索引擎