分布式搜索引擎(五) 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不能做到随机翻页,只能直接往下滑,所以可用性还是比较局限

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

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库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
目录
相关文章
|
2月前
|
自然语言处理 搜索推荐 数据库
高性能分布式搜索引擎Elasticsearch详解
高性能分布式搜索引擎Elasticsearch详解
84 4
高性能分布式搜索引擎Elasticsearch详解
|
1月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
44 1
|
1月前
|
存储 缓存 数据处理
深度解析:Hologres分布式存储引擎设计原理及其优化策略
【10月更文挑战第9天】在大数据时代,数据的规模和复杂性不断增加,这对数据库系统提出了更高的要求。传统的单机数据库难以应对海量数据处理的需求,而分布式数据库通过水平扩展提供了更好的解决方案。阿里云推出的Hologres是一个实时交互式分析服务,它结合了OLAP(在线分析处理)与OLTP(在线事务处理)的优势,能够在大规模数据集上提供低延迟的数据查询能力。本文将深入探讨Hologres分布式存储引擎的设计原理,并介绍一些关键的优化策略。
97 0
|
4月前
|
负载均衡 监控 搜索推荐
面试题ES问题之Solr和Elasticsearch在分布式管理上如何解决
面试题ES问题之Solr和Elasticsearch在分布式管理上如何解决
36 1
|
5月前
|
存储 搜索推荐 Java
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
77 2
|
6月前
|
存储 自然语言处理 搜索推荐
分布式搜索引擎ElasticSearch
Elasticsearch是一款强大的开源搜索引擎,用于快速搜索和数据分析。它在GitHub、电商搜索、百度搜索等场景中广泛应用。Elasticsearch是ELK(Elasticsearch、Logstash、Kibana)技术栈的核心,用于存储、搜索和分析数据。它基于Apache Lucene构建,提供分布式搜索能力。相比其他搜索引擎,如Solr,Elasticsearch更受欢迎。倒排索引是其高效搜索的关键,通过将词条与文档ID关联,实现快速模糊搜索,避免全表扫描。
257 13
|
6月前
|
存储 搜索推荐 Java
Java远程连接本地开源分布式搜索引擎ElasticSearch
Java远程连接本地开源分布式搜索引擎ElasticSearch
|
1月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
112 2
基于Redis的高可用分布式锁——RedLock
|
8天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
42 16

热门文章

最新文章