filesystem cache
ES数据写入磁盘,查询时通过缓存(filesystem cache)调用 filesystem cache存储索引文件,分配内存越大ES的性能越高 从磁盘读速度是秒级别,从内存读性能是毫秒级别  想保证性能,机器内存至少是总数据量的一半
如果只有100G内存留给filesystem cache,索引数据最好控制在100G内,只走内存搜索 为了避免索引数据过大,写入ES的字段越少越好 不参与搜索的字段尽量保存在HBase中(HBase:支持海量数据在线储存)
数据预热
对于经常访问的数据,可以做一个缓存预热的系统,提前访问,通过后台自动搜索刷到缓存中,提升用户访问性能
冷热分离
冷数据和热数据索引分开写,保存在不同的机器中,可以防止热数据被冷数据索引刷掉,保证热数据索引留在filesystem cache中,确保了热门数据的访问性能
document设计
避免关联查询,避免嵌套结构组成document
分页性能优化
避免深度分页,分页越深性能越差
合并segment
大量segment频繁加载索引到内存会直接影响查询性能,合并segment性能显著提升
总结
- 机器单独一台,不和其他业务复用
- SSD磁盘
- 内存配置合理
- CPU 16核+
- 节点优化,独立主节点和协调节点
- 冷热数据分离
- 副本越少越好
- 按日期规划
- 非实时场景关闭秒级响应
|