分布式哈希算法
我们从浅入深一步一步介绍什么是分布式哈希表。
哈希函数
哈希函数是一种计算方法,它可以把一个值A映射到一个特定的范围[begin, end]之内。对于一个值的集合{k1, k2, … , kN},哈希函数把他们均匀的映射到某个范围之中。这样,通过这些值就可以很快的找到与之对应的映射地址{index1, index2, … , indexN}。对于同一个值,哈希函数要能保证对这个值的运算结果总是相同的。
哈希函数需要经过精心设计才能够达到比较好的效果,但是总是无法达到理想的效果。多个值也许会映射到同样的地址上。这样就会产生冲突,如图中的红线所示。在设计哈希函数时要尽量减少冲突的产生。
最简单的哈希函数就是一个求余运算:hash(A)=A%N。这样就把A这个值映射到了[0~N-1]这样一个范围之中。
哈希表
哈希表的核心就是哈希函数hash()。
哈希表是一种数据结构,它把KEY和VALUE用某种方式对应起来。使用hash()函数把一个KEY值映射到一个index上,即hash(KEY) = index。这样就可以把一个KEY值同某个index对应起来。然后把与这个KEY值对应的VALUE存储到index所标记的存储空间中。这样,每次想要查找KEY所对应的VALUE值时,只需要做一次hash()运算就可以找到了。
举个例子:图书馆中的书会被某人借走,这样“书名”和“人名”之间就形成了KEY与VALUE的关系。假设现在有三个记录:
简明现代魔法 | 小明 |
最后一天 | 小红 |
变形记 | 小红 |
这就是“书名”和“人名”的对应关系,它表示某人借了某本书。现在我们把这种对应关系用哈希表存储起来,它们的hash()值分别为:
hash(简明现代魔法) = 2 |
hash(最后一天) = 0 |
hash(变形记) = 1 |
然后我们就可以在一个表中存储“人名”了:
0 |
小红 |
1 |
小红 |
2 |
小明 |
这三个人名分别存储在0、1和2号存