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