非常哇塞的 ES读场景写场景 性能优化指南!你值得拥有!

Posted 小姐姐味道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非常哇塞的 ES读场景写场景 性能优化指南!你值得拥有!相关的知识,希望对你有一定的参考价值。

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。

ES作为NoSQL数据库里非常重要的一员,使用越来越广泛。虽然它因为索引延迟的原因,数据在时效性上有一些缺陷,但其大容量、分布式的优秀设计,使得它在时效性要求并不是特别高的类实时搜索领域,能够大展身手。

根据使用场景和用途,ES可以分为写入和读取两种典型的应用方式。比如ELKB,我们就需要额外关注它的写优化;再比如从mysql中同步数据到ES的宽表,我们就需要额外关注它的读优化

废话不多说,我们直接show一下优化方法。如果你对ES的一些概念还不是很清楚,建议收藏本文慢慢看。

 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

推荐阅读:

1. 玩转Linux
2. 什么味道专辑

3. 蓝牙如梦
4. 杀机!
5. 失联的架构师,只留下一段脚本
6. 架构师写的BUG,非比寻常

ES的性能优化

ES的性能优化

es在数据量很大的情况下(数十亿级别)如何提高查询效率?

在es里,不要期待着随手调一个参数,就可以万能的应对所有的性能慢的场景。也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样。

es的性能优化,主要是围绕着fileSystem cache也可以叫做OS cache来进行;

前面已经分析了es写入数据的原理,实际上数据最终都会写入到磁盘中去,当我们搜索读取的时候,系统会将数据放入到os cache中,而es严重依赖于这个os cache,如果我们给机器的内存足够多,在es里存的书库里昂小于内存容量,那么搜索的效率是非常高的,

1、减少字段

如果我们的表里有很多的字段,而我们只需要往es库里写入我们需要检索的那几个字段就可以了,对于其他的字段我们可以存到mysql或者说其他的比如Hbase中,hbase的特点是适用于海量数据的在线存储,就是对hbase可以写入海量数据,不要做复杂的搜索,就是做很简单的一些根据id或者范围进行查询的这么一个操作就可以了,从es中根据检索的字段去搜索,拿到的结果可能就十几个doc id,然后根据doc id到hbase里去查询每个doc id对应的完整的数据,给查出来,再返回给前端。简单地说就是:elastcisearch减少数据量仅仅放要用于搜索的几个关键字段即可,尽量写入es的数据量跟es机器的filesystem cache是差不多的就可以了;其他不用来检索的数据放hbase里,或者mysql。

2、数据预热

如果说我们按照方案一的方法做了之后,效率还是不行,存的数据量还是超过os cache的空间,那么我们就可以吧一些比较热门的数据,比如在电商系统中,像一些热门的商品,我们可以在后台单独的写一个子系统,每隔一段时间,我们就访问一下,然数据进入到os cache中,这样用户来访问的时候就访问到的是os cache中的数据,就比较快。

3、冷热分离

es可以做类似于mysql的水平拆分,就是说将大量的访问很少,频率很低的数据,单独写一个索引,然后将访问很频繁的热数据单独写一个索引,这样可以确保热数据在被预热之后,尽量都让他们留在filesystem os cache里,别让冷数据给冲刷掉。

 

 

 

 

以上是关于非常哇塞的 ES读场景写场景 性能优化指南!你值得拥有!的主要内容,如果未能解决你的问题,请参考以下文章

ES的性能优化

ES的性能优化

理想汽车 HTAP 读流量优化指南

Elasticsearch性能调优之索引写入性能优化

elasticsearch性能调优

Elasticsearch性能优化