共计 931 个字符,预计需要花费 3 分钟才能阅读完成。
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 里,别让冷数据给冲刷掉。