性能优化的杀手锏-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里面推荐商品不断一页一页往下拉