什么是哈希算法?
将任意长度的二进制值串映射到固定长度的二进制值串,这种映射规则就是哈希算法。
哈希算法的应用:
-
安全加密:MD5,SHA
-
唯一标识:
例如查找图片是否存在,简单的方法将图片转换为二进制串,在图库中一一进行对比,但图片文件如果较大,转换为二进制串后将会很长,对比将变得很耗时。
采用哈希算法可优化查找图片方式。首先将图片的摘要信息转换为哈希值作为图片的唯一标识,将哈希值和图片路径存到散列表中,查找图片时利用相同的哈希函数获取唯一标识查询。
-
数据校验:例如验证视频文件下载前后的哈希值是否一致。
-
散列函数:哈希算法也可作为散列函数,散列函数对反向获取数据和散列碰撞要求不高。对通过散列后值是否均匀分布、散列函数的效率更为关注。
-
负载均衡:
实现会话粘滞的负载均衡算法。即相同客户IP或会话ID,请求需要发送到同一台机器上。
将客户IP或会话ID通过哈希算法计算得到哈希值,再将哈希值对机器数量进行取模运算,获取的值作为最终机器编号。这样相同的IP或ID都会映射到同一个编号的机器上。
- 数据分片:
对数据量过大,一台机器无法满足高效计算的场景,可将数据分片下发到多台机器,并发计算提高效率。
例1:对1T条搜索记录的日志文件,统计搜索关键字的次数。首先通过n台机器并行处理,从日志文件中依次读取关键字,并通过哈希算法获取关键字的哈希值,再对哈希值进行机器数目的取模运算获取机器编号,这样相同关键字的都将映射到同一台机器中。每台机器分别计算搜索次数。
例2: 搜索图片是否存在。分发到n台机器维护图片存储的散列表。将图片的信息摘要进行取模运算,得到机器编号,在对应的机器中查找。
- 分布式存储:
利用数据分片的思想,对数据的哈希值进行取模,得到的编号作为存储的机器编号。
但如果缓存机器扩容,将会搬迁旧数据到新的机器中,原来机器的缓存失效,所有数据都对数据库发起请求。
由此,需要一种扩容机器后,不需要做大规模数据迁移的哈希算法来解决数据搬迁问题:一致性哈希算法。
网友评论