性能优化
filesystem-cache
es的数据实际写入到了磁盘,但查询的时候会将数据缓存到filesystem-cache中,所以filesystem-cache的大小决定缓存数据量多少,间接决定了查询速录
数据预热
将热点数据提前查询刷到filesystem-cache中
冷热分离
将热点数据和冷数据进行分离存储在两个索引中,避免冷数据占用内存将热点数据挤占掉
分页性能优化
深度分页非常影响性能,和MySQL一样,建议使用searchAfter,按照某个键进行排序后给定游标进行分页
写入数据流程
- **客户端发送请求:**客户端可以把请求发送到集群中的任意一个节点,接收到请求的节点自动切换角色,成为协调节点,协调节点只负责控场和分发,不一定亲自存储这条数据
- **路由与转发:**协调节点使用hash算法计算数据应该去哪个分片,计算出目标主分片后,协调节点将请求转发过去
- 主分片处理与同步:主分片节点收到请求后,先在本地执行写入,写入成功后将请求并发转发给所有副本分片
- **响应客户端:**当主分片和副本分片全部写入后,向协调节点报告写入成功
读取数据流程
- 请求随机发送到其中的一个节点,该节点作为协调节点,协调节点对doc_id进行hash
- 将请求转发到hash路由得到的节点,此时该节点会使用随机轮询的方法将请求转发到对应的主分片或副本分片,保证负载均衡
- 接收请求的node将数据返回给协调节点
- 协调节点整合数据(合并、排序、分页等操作)之后返回给客户端