Elasticsearch---document存放时的路由原理及增删改查原理

路由

每次创建一个document的时候,这个document会放到那个shard哩?

路由算法: shard=hash(routing)%number_of_primary_shards
解释:每次增删改查一个document的时候,都会带过来一个routing number,这个值默认就是_id,即 routing=_id
算出这个routing的hansh值,然后和primary shard的总数求余,算出的值,就是这个document的存放的位置(存放至某个primay shard)。

这个routing的值,默认是_id,但我们也可以手动指定
例如发送求的时候

PUT /index/type/id?routing=user_id

primay shard数量不可变的原因就是因为这个路由算法
hash(routing)%number_of_primary_shards 一般是不等于 hash(routing)%(number_of_primary_shards+n)

增删改

增删改的请求只能由primary shard处理的

增加一个document举例

  1. 客户端会选择一个node(节点)发送请求,这个node就是coordinate node(协调节点)
  2. coordinate node,对document进行路由(假设计算出的prmary shard 在第n个node),将请求转发到对应的node的primary shard上处理(假设为node A)
  3. node A 上的primary shard 处理这个请求,然后再将数据同步到replica shard
  4. coordinae node,如果发现primary node 和所有replica node都搞定之后,就返回响应结果给客户端
Elasticsearch---document存放时的路由原理及增删改查原理_第1张图片
新增的过程,删除和修改类似

查询

  1. 客户端发送请求到任意一个node,这个node就是coordinatenode
  2. coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在paimary shard以及所有replica中随机选择一个,让读请求负载均衡
  3. 接收到请求的node返回document给coordinate node
  4. coordinate node返回document给客户端

特殊情况:document如果还在建立索引的过程中,可能只有primary shard有此document,任何一个replica都没有,此时会导致无法读取document(返回未找到),但是document完成索引后,primary shard和replica就都有了

你可能感兴趣的:(Elasticsearch---document存放时的路由原理及增删改查原理)