首页 > 其他 > 详细

《elasticsearch》之读写数据

时间:2020-12-14 21:51:38      阅读:46      评论:0      收藏:0      [点我收藏+]

    

             

                                           技术分享图片

es 写数据过程      

1)客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。

2)coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)。

3)node 上的 主分片(primary shard )处理请求,然后将数据同步到 复制分片(replica node)

4)node报告成功到协调节点,协调节点再报告给客户端。

 

 

                           技术分享图片

 

es 读数据过程     

                               

可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去,从那个 shard 去查询。

 

1)客户端发送请求到任意一个 node,成为 coordinate node

2)coordinate node 对 doc id 进行哈希路由,将请求转发到对应的 node,此时会使用 round-robin随机轮询算法,在 primary shard 以及其所有 replica 中随机选择一个,让读请求负载均衡。

3)接收请求的 node 返回 document 给 coordinate node

4)coordinate node 返回 document 给客户端。

 

 

                                      技术分享图片

 

es 搜索数据过程     

1)客户端发送请求到一个 coordinate node

2)协调节点将搜索请求转发到所有的 shard 对应的 primary shard 或 replica shard,都可以。

3)query phase:每个 shard 将自己的搜索结果(其实就是一些 doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。

4)fetch phase:接着由协调节点根据 doc id 去各个节点上拉取实际的 document 数据,最终返回给客户端。

 

 

 

查询阶段:

(1)客户端发送一个 search(搜索) 请求给 协调节点,协调节点创建了一个长度为 from+size 的空优先级队列。

(2)协调节点转发这个搜索请求到索引中每个分片的原本或副本。每个分片在本地执行这个查询并且结果将结果到一个大小为 from+size 的有序本地优先队列里去。

(3)每个分片返回document的ID和它优先队列里的所有document的排序值给协调节点  。 协调节点 把这些值合并到自己的优先队列里产生全局排序结果。

 

取回阶段:

(1)协调节点辨别出哪个document需要取回,并且向相关分片发出 GET 请求。

(2)每个分片加载document并且根据需要丰富(enrich)它们,然后再将document返回协调节点。

(3)一旦所有的document都被取回,协调节点会将结果返回给客户端。

 

《elasticsearch》之读写数据

原文:https://www.cnblogs.com/zrzct/p/14135572.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!