ElasticSearch 海量数据查询性能优化

  • 尽量让查询计算简单
  • 最大化使用操作系统的文件缓存
    • 增加内存
    • 减少 ES 中的数据量
    • 思路扩展
      • 冷热分离
      • 数据预加载
  • 小结

ES 接收到查询请求后,会转发给所有相关的 Shard 分片,每个 Shard 在自己这块儿进行搜索,各自的结果汇总后再返回给客户端。

这个过程有2个核心性能关键点:

  • Shard 执行查询计算的耗时
  • Shard 读取各个 Segment 文件的 I/O 耗时

所以,我们就要从这两个角度进行优化。

  1. 尽量让 ES 的查询动作简单,避免进行复杂的查询计算。
  2. 尽量提升 I/O 效率,也就是用好文件系统缓存(从 ES 写入流程可以知道文件缓存有很大的作用)

尽量让查询计算简单

这就涉及到 ES 中的数据建模方式。
例如关系数据库有两张表:

  • 订单表(编号、总金额、用户、日期)
  • 订单详情表(订单编号、商品信息)

查询订单时,需要对两张表进行关联查询。

这在关系数据库中很正常,因为关系数据库是根据实体及其关系来建模的。

但在 ES 中最好就不要这么定义数据结构了,ES 是搜索引擎,要以搜索的角度来规划数据,怎么便于搜索怎么来。

例如直接把这两张表的数据放在一个Document中,一个简单查询就完事儿了,不用让 ES 进行Document的关联查询。

最大化使用操作系统的文件缓存

操作系统喜欢用文件缓存,只要内存充足,读取 Segment 文件的时候,就会将其内容一直放在缓存中,直到内存不够用了。

比如读 Segment 01 这个文件的时候,先加载到文件缓存。

如果缓存空间足够,就直接加载进来。

否则,就会移除一部分缓存的文件,腾出空间后再加载进来。

例如,你的 ES 数据量是 1000G,集群有3个节点,每个节点上面就是 300 多个G。

假设,每个节点中操作系统可以使用内存为 16G,那么,搜索的时候,直接读文件缓存的最大概率也只有 5% 左右,绝大部分的数据都要读物理文件,一起争用那一点文件缓存空间,性能自然很差。

优化方向有 2 个:
1)增加内存
2)减少 ES 中的数据量

增加内存

增加内存很简单,只要有钱就行。

那么需要增加到多少呢?

建议:操作系统可用内存 > 本节点数据量的 50%

这样数据命中缓存的概率就比较高了。如果不差钱,内存越大越好。

减少 ES 中的数据量

再强调一次 ES 是搜索引擎,是用来干搜索的。

很多人喜欢把数据全都放 ES 里,感觉它是分布式的,多放几台服务器,硬盘大点,很能装。

比如一个表有上百个字段,真正搜索的时候,都会用到吗?不一定吧。

那么,搜索用不到的数据尽量别放在 ES 里。

ES 服务于搜索,不是服务于存储。

所以,ES 中应该放与搜索相关的数据,不应该放全量数据。

全量数据的存储应该使用专业的存储系统,例如 HBASE。

在大数据环境中,有几个T的数据很正常,如果都放在 ES 里面,并且想要保障查询性能,内存要多大呢?

如果经济实力不允许,内存不是很充足,那么查询性能就很悲催了,每次查询花费几秒钟很正常。

如果 ES 中只放搜索相关的少量数据,把全量数据放在 HBASE,性能就会快很多。

先从 ES 中查询出结果数据集,其中只包含核心字段,然后根据结果集中各条数据的 Key 到 HBASE 中进行精准查询,再把结果进行整合。

虽然是两次查询,但因为每部分都很快,所以整体下来也很快。

思路扩展

冷热分离

数据通常有冷热之分,有一部分数据的使用频率明显高于其他数据。

如果文件系统的缓存不是很充足,那么数据就需要轮流呆在缓存中。

热数据自然呆的时间长,但是当加载冷数据时,就会把热数据挤出缓存了。那么下次就需要从磁盘重新加载。

所以,最好让热数据走一部分 Shard,冷数据走其他 Shard,防止冲刷缓存。

数据预加载

还是基于热数据的角度,可以事先调用一下,使其提前进入文件缓存。

这样,客户第一次查询的时候也会很快。

小结

想要 ES 查询速度快,需要使查询动作尽量简单,这需要在数据建模上多花些心思。

最重要的是要利用好文件缓存

增加内存是简单、粗暴、有效的方法。

还有就是尽量缩减 ES 中的数据量,不要存放与搜索需求无关的数据。可以配合 HBASE 这类的专业海量数据存储系统一起使用。

另外,冷热数据分离、数据预加载,也是比较有效的小技巧。

链接: CSDN:ElasticSearch 海量数据查询性能优化

ElasticSearch 海量数据查询性能优化相关推荐

  1. 【Elasticsearch】Elasticsearch的IndexSorting:一种查询性能优化利器

    1.概述 转载:Elasticsearch的IndexSorting:一种查询性能优化利器 前言 前两周写过一篇<基于Lucene查询原理分析Elasticsearch的性能>,在最后留了 ...

  2. 让Elasticsearch飞起来!——性能优化实践干货

    让Elasticsearch飞起来!--性能优化实践干货 2018年12月19日 23:01:39 铭毅天下(公众号同名) 阅读数:8805更多 所属专栏: 深入详解Elasticsearch 版权声 ...

  3. MySQL模糊查询性能优化

    一.背景 我们经常在数据库中使用 LIKE 操作符来完成对数据的模糊搜索,LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. 如果需要查找客户表中所有姓氏是"孙"的数据 ...

  4. 数据库查询性能优化之利器—索引(二)

    数据库查询性能优化之利器-索引(二) 在前面一篇文章中谈到适当地建立索引能够大幅度地提升SQL语句查询速度,然而并不是在什么情况下都适合建立索引,下面来谈一下什么情况下适合建立索引.建立什么样的索引以 ...

  5. SQL Server 查询性能优化——覆盖索引(二)

    在SQL Server 查询性能优化--覆盖索引(一)  中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索 ...

  6. 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)

    1.查询性能优化 1.1 使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 比较重要的字段有: select ...

  7. 读薄《高性能MySql》(四)查询性能优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

  8. mysql笔记03 查询性能优化

    查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...

  9. 高性能MySQL-3rd-(六)查询性能优化

    2019独角兽企业重金招聘Python工程师标准>>> /* * -------------------------------------------------------- * ...

最新文章

  1. pandas XLRDError Excel xlsx file; not supported 解决办法
  2. 拍拍网t恤DIY效果
  3. 背景减除(Background Segment)
  4. SqlServer 批量备份
  5. mysql作hive元数据库
  6. 对于半结构化数据的讲解,这可能是最通俗易懂的一篇文章了
  7. CAE所表示的计算机术语是,计算机应用中,英文缩略语CAE所表示的计算机术语是()。...
  8. R语言︱缺失值处理之多重插补——mice包
  9. VMware windows xp虚拟机设置静态ip
  10. 百度富文本编辑器UEditor
  11. 使用aspose进行将word转换为图片格式
  12. 随机搜索 /爬山法/模拟退火/遗传算法
  13. Pytorch 微调(Fine-tuning)
  14. CSS选择器有哪几种?举例轻松理解CSS选择器
  15. 学ui需要了解html,学UI设计需要掌握文案知识吗
  16. Confluence使用教程
  17. MySQL主从状态检查
  18. 华为k662c的虚拟服务器,华为k662c光猫怎么样? 华为K662c拆机技巧
  19. OpenSSL 拒绝服务、证书绕过漏洞通告
  20. 怎么用计算机算20次方,一个数的几次方怎么算,有简便方法吗?比如2的20次方,怎么算快?...

热门文章

  1. [附源码]java+ssm计算机毕业设计基于Web的操作系统题库平台06brw(源码+程序+数据库+部署)
  2. ESP32设备驱动-L9110直流电机风扇传感器模块
  3. proxool详细配置
  4. 高内聚,低耦合是什么意思?
  5. 百分点科技数据猿联合发布《2022年“3·15”晚会消费维权行业预测报告》
  6. 什么是CC攻击?如何判断网站是否被CC攻击? CC攻击怎么防御?
  7. ABAP使用AMDP调用HANA存储过程
  8. 女孩子转行软件测试还是ui,女生可以做软件测试吗?
  9. android字节流压缩,Android压缩图片,程序崩溃
  10. 近期找工作中,发一下我的个人简历