Well,不要刷屏了

请求到某个节点后,如果这个节点已经有全部数据了,还会到其他节点拿数据么??、

Elasticsearch | 作者 2bqianbi | 发布于2018年05月28日 | 阅读数:1892

6台es机器,有3个分片、5个副本,从head上看,每个节点都有全部的数据:
问题:
1,如果请求到某个节点了,这个节点会有全部数据么??
2,我不太确认,到哪个节点去找,是业务层应用里的TransportClient来控制的,还是会先把请求发到某个节点,由该节点去各个节点拉数据??
已邀请:

lightClouds917

赞同来自:

个人理解,不一定正确:查询数据的时候,返回数据都按照相关性得分进行排序,意味着,一般来说,你的查询应该很少有精确的结果,所以也就不太适合这个说法:“请求到某个节点后,如果这个节点已经有全部数据了”,他会请求所有分片,不断去做评分排序,除非你的这个请求属于不评分的。

bill

赞同来自:

We can send our requests to any node in the cluster. Every node is fully capable of
serving any request. Every node knows the location of every document in the cluster
and so can forward requests directly to the required node. In the following examples,
we will send all of our requests to Node 1, which we will refer to as the requesting
node.

我理解有两种类型查询:
1. 一种查询带Document ID,获取每个Document的内容。
那么处理请求的节点可以根据哈希算法计算出该document所在的shard no, 然后从主本和副本中选出一个,找出它所在的节点,把请求转发过去。查询结果会原路返回到请求节点,再返给客户端。

1. 另一种查询不带Document ID,需要分发到所有的分片执行。
那么处理请求的节点可以从所有分片的主本和副本中各选出一个shard,找出所在的节点,把请求转发过去。每个节点的查询结果会原路返回到请求节点,汇总后,再返给客户端。
 

要回复问题请先登录注册