ES 26 - Elasticsearch document数据路由以及document 查询内部原理图解揭秘

 

document数据路由

1. 什么是document路由

2. 路由算法 shard = hash(routing) % number_of_primary_shards

3. 手动指定routing

4. primary shard数量不可变的原因

document 查询内部原理图解揭秘

 

document数据路由

1. 什么是document路由

      一个index的数据会被分为多个片(shard),一个document只能放在一个shard中。
当客户端创建document的时候,ES就要决定document放在index的哪个shard上。这个过程称为document routing,即数据路由。


2. 路由算法 shard = hash(routing) % number_of_primary_shards

     举例:
     一个index有3个primary shard,P0, P1, P2
每次增删改查一个document的时候,都会带过来一个routing number,默认就是这个document的_id(可能是手动指定,也可能是自动生成)routing = _id。
     es会将这个routing值,传入一个hash函数中,产出一个routing值的hash值,假设hash(routing) = 21,然后将hash函数产出的值对这个index的primary shard的数量求余数(假设primary shard的数量为3):21 % 3 = 0,就决定了,这个document就放在P0上。

     无论什么数字,对number_of_primary_shards求余数,结果一定是在0~number_of_primary_shards-1之间。相同的routing值,每次过来,从hash函数中产出的hash值一定是相同的。

3. 手动指定routing

      默认的routing就是_id,也可以在发送请求的时候,手动指定一个routing value,比如说put /index/type/id?routing=user_id
手动指定routing value是很有用的,这样可以让某一类document一定被路由到一个shard上去,那么在后续进行应用级别的负载均衡,以及提升批量读取的性能的时候,是很有帮助的。


4. primary shard数量不可变的原因

一旦index建立,primary shard是不允许修改的,但是replica shard可以随时修改。
primary shard的数量确定之后不可更改,这是因为,数据路由时确定了shard的数值,后续primary shard数量变了的话,再根据路由算法确定shard的位置,得到的shard数值就会与原先不一致,导致找不到数据

 

 

 

document 查询内部原理图解揭秘
 

1、客户端发送请求到任意一个node,成为协调节点(coordinate node)
2、coordinate node对document 进行路由,讲请求转发到对应的node,此时会使用round_robin随机轮询算法,在primary shard以及所有的replica中随机选择一个,让读请求负载均衡。
3、接受请求的node返回document给coordinate node
4.coordinate node返回document给客户端

特殊情况:
document 如果还在建立索引过程中,可能只有primary shard有,任何replica shard都没有数据,此时可能会导致无法读取到document,但是document完成索引建立之后,primary shard和replica shard就都有数据了。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值