美文网首页ElasticSearch入门玩转大数据elasticsearch
二十八、Elasticsearch的document数据路由原理

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

作者: 编程界的小学生 | 来源:发表于2017-07-07 13:40 被阅读157次

    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数量不可变?

    Paste_Image.png

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


    qrcode_for_gh_577b64e73701_258.jpg

    相关文章

      网友评论

        本文标题:二十八、Elasticsearch的document数据路由原理

        本文链接:https://www.haomeiwen.com/subject/woblhxtx.html