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