zoukankan      html  css  js  c++  java
  • hash一致性

    HASH取余算法问题

    节点数量越多时,迁移数据造成的未命中越高;

       

    hash一致性

    • 介绍:

      数学模型,经过代码的应用转化成的一种常见常用的计算算法;

      数学模型,是基于散列算法完成(key不变,散列结果的整数不变);1997年美国麻省理工;大二学生研发的数学模型;

         

      散列算法,将任意的内存对象数据转化成整数;整数区间0-2^32次方(43亿,无符号的int);称这个区间为hash环;利用这个hash环,能够实现,数据的切分处理逻辑计算;

         

    • 基本原理

      key值和节点node的对应关系可以通过hash环计算获取

       

    node节点信息,作为字符串数据,进行散列计算映射到环中的某个整数位置;

    key值作为字符串数据,散列计算映射到环中某个位置;

    key值的整数,顺时针寻找最近的节点整数,对应处理存储;

    上图内容:

    node1:key3,4,5,6

    node2:key2

    node3:key1

       

    • 扩容时

      能够解决扩容是,迁移量的问题?

      节点扩容时,数据被切分成若干个弧线整数对应关系;节点数量越多,弧线越小,需要迁移的数据量越少;

         

    • 数据平衡性

      直接对应真是节点整数,会非常有可能造成某个节点数据倾斜严重;

      hash一致性中,引入了虚拟节点,解决数据平衡性,每个真实节点有默认的若干个虚拟节点(jedis中虚拟节点个数160*weight权重值,权重默认是1)

       

    真实节点信息

    node1:10.9.39.13:6379

    node2:10.9.39.13:6380

    虚拟节点:

    node1-1:10.9.39.13:6379#01

    node1-2:10.9.39.13:6379#02

    node1-3:10.9.39.13:6379#03

    node2-1:

    node2-2:

    node2-3:

    key值依然完成散列计算,实现对应环上某个整数,依然顺时针寻找最近节点整数,如果对应的真实节点整数,直接处理,如果对应到了虚拟节点,根据虚拟节点绑定的真实节点对应;

       

    结论:虚拟节点越多,数据越均衡;

       

       

  • 相关阅读:
    【BZOJ 2124】【CodeVS 1283】等差子序列
    【BZOJ 1036】【ZJOI 2008】树的统计Count
    【BZOJ 1901】【ZJU 2112】Dynamic Rankings
    【BZOJ 3924】【ZJOI 2015】幻想乡战略游戏
    【BZOJ 4103】【THUSC 2015】异或运算
    【BZOJ 4513】【SDOI 2016】储能表
    【HDU 3622】Bomb Game
    【BZOJ 3166】【HEOI 2013】Alo
    【BZOJ 3530】【SDOI 2014】数数
    【BZOJ 4567】【SCOI 2016】背单词
  • 原文地址:https://www.cnblogs.com/shuzhiwei/p/11204778.html
Copyright © 2011-2022 走看看