(十五)哈希算法

Posted Warrior

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(十五)哈希算法相关的知识,希望对你有一定的参考价值。



这节主要讲述哈希算法的应用,重点是一致性哈希的讲解



01



什么是哈希算法



哈希算法:

可以将任意长度的二进制值串映射成固定长度的二进制值串

这个映射规则就是哈希算法


哈希算法有如下几个特点:

  • 映射后的哈希值不能反向推导出原始数据

  • 对输入数据非常敏感,哪怕只有一个bit不同,映射后的数据也大不相同

  • 散列冲突概率要小,不同数据的哈希值相同的概率要小

  • 哈希算法的执行效率要尽可能高




02



哈希算法一般应用


  • 安全加密

  • 安全标识

例如图片,我们可以计算图片的二进制码,取出二进制码的前100,后100个元素进行哈希。得到的值存入哈希表中,用于判断图片是否已存在。

  • 数据校验

例如对于下载的文件,在网络传输过程中有可能会被恶意篡改,我们可以拿到下载后的文件的哈希值与种子文件的哈希值做对比,如果不同则说明文件已被人恶意篡改过。

  • 散列函数

  • 区块链

区块链是一块一块区块组成的,每一个区块分成两部分,区块头和区块体。

区块头保存着自己区块体和上一个区块头的哈希值。这种哈希算法使用的是SHA256,计算非常耗时。如果有一个区块进行篡改,那后面所有区块保存的哈希值就对不上了。




03



哈希算法分布式上的应用


  • 负载均衡

对请求的IP或者回话ID计算哈希后与服务器列表的大小进行取模,保证同一个请求都落在同一台服务器上

  • 数据分片

例如对1T大小的文件中统计每个单词出现次数。文件过大无法在一台服务器上计算,这时我们就可以将单词计算哈希值后取模,保证相同单词落在同一台服务器上计算。这个思想如同hadoop的mapreduce,flink的keyBy,spark的shuffle.

  • 分布式存储

利用数据分片,可以将数据放入不同的服务器中存放。但是当目前数据服务器空间不足,需要扩容的时候,就会需要全部重新计算hash值,例如:(十五)哈希算法


这时候就需要一致性哈希算法了。




04



一致性哈希


如上图:假设所有的请求都通过哈希计算并取模后落在圆上的各个点。

其中有4台服务器分别负责相应的点的请求数据,

服务器1负责:a,b,c,d

服务器2负责:p,o,n,m

服务器3负责:l,k,j

服务器4负责:e,f,g,h,i

当第四台磁盘空间剩余不足,在第四台服务器所负责空间位置上,加上一台服务器5,从此5则负责服务器h,i上的数据。

这样在扩容的同时又保证了之前的数据位置不变。唯一变得只是服务器4中的部分数据放到了服务器5上。



05



总结


  1. 讲述了哈希算法

  2. 哈希算法的应用

    1. 数据加密

    2. 数据标识

    3. 数据校验

    4. 散列表

    5. 区块链

    6. 负载均衡

    7. 数据分片

    8. 分布式存储

  3. 一致性哈希


下一节讲述数据结构之二叉树







以上是关于(十五)哈希算法的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法笔记(十五)—— 散列(哈希表)

《算法零基础100讲》(第55讲) 哈希表入门

2021数据结构与算法实验合集

C1认证学习十四十五(算法常识HTML Head 头)

C1认证学习十四十五(算法常识HTML Head 头)

哈希算法和哈希表的区别?