hash算法的标准
- 不能逆向推导出原数据
- 对输入数据很敏感,改了一bit,最后得到的hash值也不相同
- 散列冲突概率很小
- 算法执行效率高
应用场景
安全加密
我们在保存数据时候可以对数据用hash函数进行加密比如:MD5、SHA、DES、AES
hash算法做安全加密应该尽量避免hash冲突,但是也不可能完全避免,但是概率很低比如MD5的范围如下:
1 | 2^128=340282366920938463463374607431768211456 |
加密算法越高级效果越好,但是相应的性能会越差
唯一标识
我们可以通过hash函数作为数据的唯一标识,比如对一个图片的搜索我们如果一个个比对他们的2进制码会很耗时,我们可以抽样踩点进行hash计算,然后hash相同的在去比较是否。
数据校验
大数据可能会被分块保存,我们只需要记录每一块的hash值,当文件块下载完成后进行hash值的校验,校验文件是否完整
散列函数
因为hash函数冲突的概率很低,所以我们可以利用hash作为散列函数
负载均衡
session-sticky模式的访问,对于客户端请求hash之后和服务器个数取模,这样保证每个请求都打到同一个后端
数据分片
对于海量数据我们可以将数据hash之后分散到各服务器节点中,这样在计算的时候根据数据hash取模到某个服务器节点计算(map-reduce思想)
分布式存储
海量数据根据数据的hash分片落到某一个节点上,理论上可以存储无数的数据,常用于nosql的存储,不过要注意一致性hash,防止节点变更大量的数据进行rehash。