首先,没有银弹

性能优化的杀手锏-filesystem cache

es里写的数据,实际上都写到磁盘文件上去了。查询的时候,操作系统会将磁盘文件里的数据自动缓存到fileSystem Cache中去。
ES的搜索引擎严重依赖底层的filesystem cache, 如果你给file system 更多的缓存,尽量让内存容纳所有的idx segment file 索引数据文件,那么搜索的时候基本上是可以走内存的,性能会非常高。

最佳情况下,你的机器内存,至少可以容纳你的总数量的一半。 举例:机器64G,内存留给es jvm heap 是32G,那么留给filesystem cache就是32G

es存储的字段,尽量是需要检索的字段

非必要字段不必写入,占用内存,比方说采用es + mysql/ hbase架构。
hbase适用海量数据的在线存储,就是对hbase写入海量数据,但是不要做复杂的搜索,做简单的根据id或者范围查询一个操作就可以。

写es的数据最好小于等于filesystem cache的内存总量,然后es检索花费时间就少。然后再根据es返回的id去Hbase查询。

数据预热

提前搞一个子系统做数据预热。

冷热分离

类似mysql做水平拆分。
冷数据写入一个索引,然后热数据写入另外一个索引。

分页优化

  • 不要深度分页
  • 类似app里面推荐商品不断一页一页往下拉