zoukankan      html  css  js  c++  java
  • Hash算法相关

    一、散列

    散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。通过散列方法可以对结点进行快速检索。

    按散列存储方式构造的存储结构称为散列表。散列技术的核心是散列函数。散列的核心就是:由散列函数决定关键码值(X.key)与散列地址h(X.key)之间的对应关系,通过这种关系来实现组织存储并进行检索。

    二、散列函数

    1、除余法

    2、乘余取整法

    3、平方取中法

    4、数字分析法

    5、基数转换法

    6、折叠法

    三、冲突解决

    1、分离链表法

    2、开放地址法

    • 线性探测法
    • 二次探查法
    • 随机探查法
    • 双散列探查法

    四、一致性哈希

    一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环。使用服务器各自的IP地址或主机名作为关键字进行哈希计算,使用哈希后的结果对2^32取模,算出的这个整数,代表服务器A。

     缓存数据时,将数据key使用相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器。

    容错性和可扩展性

    在一致性Hash算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间数据,其它不会受到影响。

    数据倾斜问题

    一致性Hash算法在服务节点太少时,容易因为节点分部不均匀而造成数据倾斜(被缓存的对象大部分集中缓存在某一台服务器上)问题。

    将现有的物理节点通过虚拟的方法复制出来虚拟节点,即对每一个服务节点计算多个哈希,每个计算结果位置都放置一个此服务节点。具体做法可以在服务器IP或主机名的后面增加编号来实现。

  • 相关阅读:
    [Taro] 解决 使用 Taro UI 小程序下 Iconfont 图标 不显示问题
    [Taro] Taro 环境安装 (一)
    [RN] react-native FlatList 实现列表选中的最佳方式(刷新指定Item)
    [RN] React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题
    [RN] React Native 使用 Redux 比较详细和深刻的教程
    [Taro] taro 缓存
    个人总结第十五周
    个人总结第十四周
    个人总结第十三周
    个人总结第十二周
  • 原文地址:https://www.cnblogs.com/kingshine007/p/11455283.html
Copyright © 2011-2022 走看看