写数据:
- 客户端向任意节点发送请求,处理请求的节点就是协调节点。
- 协调节点将请求路由到主分片节点,
- 主分片处理请求后,同步到副本分片
- 协调节点返回响应。
?
?
读数据:
根据doc id读取文档,对应一个doc id。
get某一条数据,写入了某个doc,这个doc会自动给你分配一个全局唯一的id,也是根据doc id路由到主分片。也可以手动指定doc id,比如订单id。
- 客户端向任意节点发送请求,处理请求的节点就是协调节点。
- 写文档的时候,自动分配doc id,或者根据订单号等指定doc id。协调节点根据唯一的doc id找到对应的主分片和副本分片,将请求路由到宿主节点。读请求负载均衡默认用round-robin算法。
- 接收请求的node返回doc给协调节点
- 协调节点返回doc给客户端。
?
?
搜索数据:
最强大的就是全文检索,根据关键词来搜索,找到相关的文档。
- 客户端向某节点发送请求,该节点变身协调节点,
- 协调节点将请求转发到所有的shard。
- query phase:每个shard将自己的搜索结果(doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产生最终结果。
- fetch phase:协调节点根据doc id去各个节点拉取实际的doc数据,最终返回给客户端。
?
?
?
?
es读写和搜索数据的工作原理?
原文:https://www.cnblogs.com/gxli/p/11323995.html