我是靠谱客的博主 善良黄蜂,最近开发中收集的这篇文章主要介绍21深度图解剖析document数据路由原理(1)document路由到shard上是什么意思?(2)路由算法:(3)_id or custom routing value(4)primary shard数量不可变的谜底,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

(1)document路由到shard上是什么意思?

image-20211106132726117

一个index的数据会被分为多片,分配到不同的shard上,所以说一个document只能存在一个shard中

当java应用程序创建document的时候,es就需要知道这个document放在index中的那个shard上。

es是如何知道的?

进行document routing 数据路由

(2)路由算法:

shard = hash(routing) % number_of_primary_shards

举个例子,一个index有3个primary shard,P0,P1,P2

每次增删改查一个document的时候,都会带过来一个routing number,默认就是这个document的_ id(可能是手动指定,也可能是自动生成)
routing = _ id,假设_ id=1

会将这个routing值,传入一个hash函数中,产出一个routing值的hash值,假设是hash(routing) = 21
然后将hash函数产出的值对这个index的primary shard的数量求余数,21 % 3 = 0
就决定了,这个document就放在P0上。

决定一个document在哪个shard上,最重要的一个值就是routing值,默认是_id,也可以手动指定,相同的routing值,每次过来,从hash函数中,产出的hash值一定是相同的

无论hash值是几,无论是什么数字,对number_of_primary_shards求余数,结果一定是在0~number_of_primary_shards-1之间这个范围内的。即【0,1,2】。

(3)_id or custom routing value

默认的routing就是_id
也可以在发送请求的时候,手动指定一个routing value,比如说put /index/type/id?routing=user_id

手动指定routing value是很有用的,可以保证说,某一类document一定被路由到一个shard上去,那么在后续进行应用级别的负载均衡,以及提升批量读取的性能的时候,是很有帮助的

(4)primary shard数量不可变的谜底

假设_ id=1,hash(routing) = 21,primary shard是3,replica shard是3

get /index/type/1 ,document就会路由到21 % 3 = 0=》P0的shard上,找到数据。

如果primary shard 变为4,下次请求,get /index/type/1, document就会路由到21 % 4 = 1=》P1的shard上

结果没有找到数据,以后_id=1的document都会被路由到P1的shard上,那么就间接导致原来的document数据丢失

ocument都会被路由到P1的shard上,那么就间接导致原来的document数据丢失

所以说primary shard一旦index建立,就不再允许修改,不过replica shard是可以随时修改的。

最后

以上就是善良黄蜂为你收集整理的21深度图解剖析document数据路由原理(1)document路由到shard上是什么意思?(2)路由算法:(3)_id or custom routing value(4)primary shard数量不可变的谜底的全部内容,希望文章能够帮你解决21深度图解剖析document数据路由原理(1)document路由到shard上是什么意思?(2)路由算法:(3)_id or custom routing value(4)primary shard数量不可变的谜底所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部