首页 > 技术文章 > elasticSearch查询性能的提升

bin-zhao 2021-01-22 10:04 原文

1.filesystem cache对es性能的影响
es的搜索引擎严重依赖于底层的filesystem cache,如果给它更多的内存,尽量让内存可以容纳所有的index segment file索引数据文件,那么搜索的时候肯定走的是内存,性能会非常高,这个时候一定要理解这个概念,使用es的时候尽量不要存储超出filesystem cache的容量的数据,如果没查到,就会走磁盘,此时的性能不是很理想.所以关键数据存储到es中,其他的可以结合mysql或者hbase进行存储,并且保证es部署的机器中存储在磁盘的文件大小能够被filesystem cache装载进去.

2.数据预热
如果上述方案作了之后还是超出了filesystem cache的大小,此时可以先把平时看的多的数据通过程序预先搜索一遍,提前装载到cache中,这样,别人访问性能会好一点.

3.冷热分离
就是建立两个索引,一个存放热数据,一个存放冷数据,放在不同的shard上,这样热数据加载之后,就可以避免filesystem cache中的内容不被冷数据给冲刷掉

4.document模型设计
意思就是不要在es中使用复杂的搜索,比如join,nested,parent-child搜索,如果可能会用到,那么在设计document文档的时候就提前做好,比如join查询,提前把需要的关联数据作为一条记录存入到es中,查询的时候就一并查询出来,比如订单表和商品表,两个整合起来,把订单id,用户id,商品id都存入.

5.分页性能优化
es的分页,性能很差,因为如果你要查100页的10条内容,那么如果你有5个shard,每个shard都会查询出1000条数据给到协调节点,然后由协调节点根据需求进行排序,筛选等操作,所以翻得页数越深,性能就会越差.
所以使用es不允许深度分页.
如果是类似于微博中的下拉刷出来的一页一页,或者微信朋友圈下拉分页,可以使用scroll来进行处理,实际上scroll就是一次性生成所有数据的快照,然后根据每次翻页的游标获取下一页下一页.性能无论翻多少页都是毫秒级.

推荐阅读