二十八、Elasticsearch的document数据路由原理

1、document路由到shard上是什么意思?
我们知道,一个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,这个routing值默认就是这个document_id(可以手动指定,也可以是自动生成),假设这里是1,routing=_id,id=1
会将这个routing值(这里是1)传入一个hash函数中,产出一个routing值的hash值,假设hash值的21,hash(routing)=21,然后将hash函数产出的值对这个index的primary shard的数量求余数,21 % 3 = 0,这就决定了这个document就放在了P0上。

3、一句话总结路由算法
决定一个document放在哪个shard上,最重要的一个值就是routing值,默认是_id,也可以手动指定,相同的routing值每次过来从hash函数中,产出的hash值一定是相同的,无论hash值是多少,无论是什么数字,对number_of_primary_shards求余数,结果一定是在0~number_of_shards-1之间这个范围内的。 这里一定是0,1,2

4、如何手动指定routing值?
默认是document的_id
手动指定办法:
直接加routing=number即可。
比如
PUT /index/type/id?routing=123

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

5、为什么primary shard数量不可变?

二十八、Elasticsearch的document数据路由原理_第1张图片
Paste_Image.png

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


二十八、Elasticsearch的document数据路由原理_第2张图片
qrcode_for_gh_577b64e73701_258.jpg

你可能感兴趣的:(二十八、Elasticsearch的document数据路由原理)