es读写和搜索数据的工作原理?

写数据:

  1. 客户端向任意节点发送请求,处理请求的节点就是协调节点。
  2. 协调节点将请求路由到主分片节点,
  3. 主分片处理请求后,同步到副本分片
  4. 协调节点返回响应。

   

读数据:

根据doc id读取文档,对应一个doc id。

get某一条数据,写入了某个doc,这个doc会自动给你分配一个全局唯一的id,也是根据doc id路由到主分片。也可以手动指定doc id,比如订单id。

  1. 客户端向任意节点发送请求,处理请求的节点就是协调节点。
  2. 写文档的时候,自动分配doc id,或者根据订单号等指定doc id。协调节点根据唯一的doc id找到对应的主分片和副本分片,将请求路由到宿主节点。读请求负载均衡默认用round-robin算法。
  3. 接收请求的node返回doc给协调节点
  4. 协调节点返回doc给客户端。

   

搜索数据:

最强大的就是全文检索,根据关键词来搜索,找到相关的文档。

  1. 客户端向某节点发送请求,该节点变身协调节点,
  2. 协调节点将请求转发到所有的shard。
  3. query phase:每个shard将自己的搜索结果(doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产生最终结果。
  4. fetch phase:协调节点根据doc id去各个节点拉取实际的doc数据,最终返回给客户端。

   

   

你可能感兴趣的:(es读写和搜索数据的工作原理?)