• 29.es路由原理


    主要知识点

    1document路由到shard的理解及原理

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

    3routing值(_id or custom routing value

    4primary shard创建之后不可变的原因

       

    一、document路由到shard理解及原理

    在es中,一个index会被分片,一个index中存在很多document,这个document存放在不同的shardK ,而一个document只能存在于一个primary shard中,这样,当客户端创建一个document并存入es时,es内部就需要决定这个document存于那一个primary shard,这就是es中的document 路由分发。

       

    二、路由算法

    shard = hash(routing) % number_of_primary_shards

       

    举个例子,一个index3primary shard,分别是P0P1P2

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

    2、es会将这个routing值,传入一个hash函数中,产出一个routing值的hash值,假设hash(routing) = 21

    3、然后将hash函数产出的值对这个indexprimary shard的数量求余数,21 % 3 = 0

    这样,这次这个document就放在P0上。

       

    决定一个document在哪个shard上,最重要的一个值就是routing值,默认是_id,也可以手动指定,相同的routing值,产出的hash值一定是相同的。

       

    三、routing值(_id or custom routing value

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

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

       

    四、primary shard创建之后不可变的原因

    假设,原index在创建时指定primary shard的值为3,分别是P0P1P2,某一个docment的routing值是1,该routing的hash值为21,这样这个document就存放于P0这个primary shard 中。如果primary shard 的值可以改变,假设变为4,要查询这个document时,根据shard = hash(routing) % number_of_primary_shard(21%4=1),就会到p1这个shard去查找,当然查找不到,这就间接导致了数据丢失。

       

  • 相关阅读:
    python 安装相关命令-汇总
    python3 安装 past 包
    IntelliJ IDEA、JetBrains PyCharm 注册码-收藏
    C# 播放器, 收藏
    C# 通过二进制,将多个文件合并为一个。
    AForge.NET是一个专门为开发者和研究者基于C#框架设计的视频录像
    eclipse-连接TFS错误 <the server to respond with a valid http response>解决方法
    CodeReview是开发中的重要一个环节,整理了一些关于jupiter for java
    通过html字符串连接组合并调用javascript函数
    System.load(PWConnector.dll)加载异常 Can't find dependent libraries
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8464238.html
Copyright © 2020-2023  润新知