亿级以上的数据量 ES如何优化
亿级以上的数据量 ES如何优化
·
1 增大fileSystem cache容量
fileSystem cache存的是最近搜索过、然后缓存下来的索引文档数据,会存放在堆内存外的 系统缓存里
给es服务器多分配内存,增大此缓存的容量,即可增加查询性能
2 es只负责存储核心关键数据
通过es查询出关键数据以后,再通过mysql/Hbase去查询其他相关数据
建议 ES+Hbase
最佳实践,某个节点的内存= 节点上文档总大小的一半
若文档数据远远大于内存,性能肯定不行,所以只存储海量数据里的关键字段
否则和 mysql没啥区别,缓存空间太小,热数据被频繁刷掉,每次都是io查询磁盘
3 冷热分离
热数据放到索引a里,冷数据放到索引b里
尽量把两种索引分开存放,热数据和冷数据分别在不同节点上
以业务类型区分冷热数据
以时间区分冷热数据
(定时任务 把n天前的数据 转移到冷节点里,在热节点里删除,在冷节点里新增)
4 数据预热
自己搞个脚本/定时任务/系统
专门去搜搜热数据
把热数据文档缓存到内存里
其他用户访问时就不用走io了
5 业务
a 避免深度分页,深度分页可能会导致 查询从 级ms 变成几s
,改设计,下拉方式刷新
技术实现
1 scroll api
2 es自身的search_after 也支持这种优化方式
这也是为什么很多网站都不允许翻页的原因
b 避免大结果集查询
c 避免复杂查询如 join/nested/parent-child文档关联、集合嵌套、父子文档嵌套
6 文档结构设计
把相关数据关联处理以后,再存入es
更多推荐
已为社区贡献1条内容
所有评论(0)