zoukankan      html  css  js  c++  java
  • elasticSearch查询性能的提升

    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就是一次性生成所有数据的快照,然后根据每次翻页的游标获取下一页下一页.性能无论翻多少页都是毫秒级.

  • 相关阅读:
    PHP文件系统处理(二)
    PHP中的文件系统处理(一)
    PHP中常用正则表达式大全
    PHP中的正则表达式的使用
    SLF4J日志框架
    内部类
    计算机存储单位
    Maven 要点
    Maven 父类工程创建及引用
    Eclipse Maven Web项目创建
  • 原文地址:https://www.cnblogs.com/bin-zhao/p/14311747.html
Copyright © 2011-2022 走看看