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里,别让冷数据给冲刷掉。

最新文章

  1. 软件工程:Wordcount程序作业
  2. Linux 路线 推荐
  3. jquery分隔Url的param方法
  4. 从MySQL 5.5到5.7看复制的演进
  5. nginx用户认证配置( Basic HTTP authentication)
  6. Ubuntu 14.04下安装eclipse搭建C++开发环境
  7. WF4与MVC结合示例
  8. 对于不是特别擅长Photoshop的人来说,熟悉和运用Photoshop工具提供的各类便捷的快捷键,是有帮助的。
  9. Python学习教程(learning Python)--3.3.1 Python下的布尔表达式
  10. iOS开发多线程--技术方案
  11. onConfigurationChanged与OnCreate,究竟谁被调用的问题
  12. sql递归函数(自定义函数递归查找) 能返回递归的层次
  13. java对Ldap操作4
  14. javaScript 的option触发事件
  15. 有空研究一下OwnerDraw和三种Windows风格CS_OWNDC和CS_PARENTDC和CS_CLASSDC
  16. vue-cli 如何配置sass
  17. mvc4 强大的导出和不需要上传文件的批量导入EXCEL--SNF快速开发平台3.1
  18. 一、SQL定义变量
  19. webpack学习笔记-2-file-loader 和 url-loader
  20. [LeetCode] 860. Lemonade Change_Easy tag: Greedy

热门文章

  1. Ceph 存储集群3-部署:
  2. NLP(二十)利用BERT实现文本二分类
  3. Servlet乱码问题解决
  4. what is muxing and demuxing
  5. Python趣味入门01:你真的了解Python么?
  6. python笔记18(复习)
  7. linux入门系列11--Centos7网络服务管理
  8. C++:析构函数的调用时机
  9. Django表单Form类对空值None的替换
  10. 12-Tomcat&Servlet: