问题
Elasticsearch在读写数据的过程是什么样的?你该如何理解这个问题!
Elasticsearch的写数据过程
- 客户端选择一个节点发送请求,这个时候我们所说的这个节点就是协调节点(coordinating node)
- 协调节点对document进行了路由,然后将请求再转发给对应的节点(primary shard)
- 实际上操作的节点的primary shard请求处理,之后再将数据进行同步,同步到replica node
- 协调节点发现primary node及所有的replica node都搞定了之后,就将相应结果返回给我们的客户端
Elasticsearch的读数据过程
这个时候我们可以通过文档id来查询,会根据文档id进行hash,判断我们当初将doc id分配给了哪一个shard,然后再从这个shar进行查询操作。
- 客户端发送一个请求到任意的一个节点,成为了协调节点(coordinate node)
- 协调节点对doc id 进行hash路由,然后在将请求进行转发,转发到对应的节点,这个时候会使用到round-robin进行随机轮询算法,最终将primary shard以及其所有replica中进行随机选择一个,来实现读请求的负载均衡。
- 接收到请求的节点返回document给协调节点。
- 协调节点返回document再给到客户端。
Elasticsearch的搜索数据过程
其实elasticsearch最强大的是他的全文检索功能。
- 客户端发送一个请求到协调节点
- 协调节点会将搜索请求转发到所有的shard中对应的replica shard或者primary shard
- 每个shard都会将自己的搜索结果返回给协调节点,然后再由协调节点对数据进行合并、排序、分页等操作,最终会输出结果
- 接下来协调节点会根据doc id 去各个节点上面拉取实际的文档数据,完成之后会最终将数据返回给客户端。
好了,今天关于Elasticsearch的读、写、搜索过程就讲解到这里,欢迎大家留言交流
也欢迎大家关注我的公众号《coder练习生》