什么是Elasticsearch中的num_routing_shards?

zte4gxcn  于 2023-05-16  发布在  ElasticSearch
关注(0)|答案(1)|浏览(327)

需要进行搜索或索引请求的分片由以下公式决定

routing_factor = num_routing_shards / num_primary_shards
shard_num = (hash(_routing) % num_routing_shards) / routing_factor

我无法理解num_routing_shards的有用性。我已经在下面的链接中读到了这一点,但不能理解这一点,什么是分裂。

如果有人能解释一下这一点,会很有帮助

yqlxgs2m

yqlxgs2m1#

这有点难以理解,我将尝试解释它。
1.如果没有拆分过程,则路由公式为:

shard = hash(_routing) % num_primary_shards

我们使用公式来决定将文档请求(例如,索引、删除、更新)发送到哪个分片。
1.拆分索引API允许您将现有索引拆分为新索引。
例如,您有一个包含5个主分片的索引(index.number_of_shards:5),并且您希望将数据更均匀地分布在20个节点上。由于主分片nubmer在创建索引后无法更改,因此您必须将数据重新索引到新索引(例如,index.number_of_shards:10). Elasticsearch提供了拆分索引API来实现这一点。
1.拆分过程中,我们使用以下公式来决定如何将doucment发送到新索引中的新分片。

routing_factor = num_routing_shards / num_primary_shards
shard_num = (hash(_routing) % num_routing_shards) / routing_factor

index.number_of_routing_shards与index.number_of_shards一起使用,将文档路由到主分片。
例如,您将num_routing_shards设置为30,并希望将index.number_of_shards更改为10(5 -> 10)。一个文件的hash(_routing)是10003。
routing_factor(3)= 30 / 10
shard_num(4)=(1003% 30)/ 3
最后,doucment将被发送到新索引中的shard(4)。
1.看,设置的num_routing_shards越大,新索引中的分布就越均匀。在重索引过程中,可以将num_routing_shards作为虚拟分片号。
确保routing_factor是有效的数字。num_routing_shards必须是num_primary_shards的倍数。

相关问题