今天,我将介绍三种project更有用的Hash,各一致性哈希、地点敏感的哈希和GeoHash。
1. 一致性哈希
一致性哈希算法是在1997年由麻省理工学院提出,设计的目标是为了解决因特网的热点问题。一致性哈希算法
攻克了在P2P环境中最为关键的问题,即怎样在动态的网络拓扑中分布存储和路由。在分布式系统中用得比較广
泛。当集群须要加入机器或者降低一台机器时,一致性哈希仅仅影响一台机器,将数据受影响的机器数量降到最低。
在这里讲述了一致性哈希的原理。而且在最后有各种语言版本号的实现。在Github上也有一个不错的实现版本号。
2. 局部敏感哈希
局部敏感哈希是一种高维数据索引技术。英文名为Locality-Sensitive Hashing,简记为 LSH,应用于计
算机非常多领域。想象在一个高维数据检索系统中。检索库中数据量非常大,每条数据的维度也非常高。常规的做法
就是针对每一次检索,都从数据库中进行一一匹配,这样将花费大量的时间和空间,显然不可取。
然后。我们就能够从两个方面考虑:
(1)通过一些算法对原始高维数据进行降维
(2)在检索初始阶段排除一些数据。降低检索时的比較次数
针对(2)有局部敏感Hash恰好满足了我们的要求。它的原理也easy理解。局部敏感哈希的实现有多种方式。接
下来主要以基于汉明距离的局部敏感哈希来说明实现思路。
须要注意的是上述方法并不可以一定保证查找到查询点的最邻近的数据,而是降低须要匹配的数据点个数的同
时保证查找到近期邻的数据点的概率非常大。为了解决问题,又提出了增强LSH。
关于p-stableLSH算法能够參考这里。最后附上Java实现的局部敏感哈希工具。
3. Geohash
想象这样一个场景。你在北京西二旗附近想找附近的餐馆。仅仅须要在手机上打开手机地图。然后搜索附近的餐馆
就能够进一步找到你所惬意的一家。那么问题来了,地图后台是怎样依据自己的位置来搜索附近的餐馆呢?接下
来的Geohash算法就是用来解决问题的,它将二维的经纬度转化为一个字符串。
參见其原理具体介绍。
在github上有一个geohash的C语言实现代码,而且附上了用法。Google有一个开源的Geohash代码,详
见链接:http://python-geohash.googlecode.com/svn/trunk/,包含Python和C++实现。
版权声明:本文博主原创文章,博客,未经同意不得转载。