一致性Hash演算法

2022-01-23 02:59:23 字數 1125 閱讀 3991

取模有兩個主要的缺點

雜湊不均勻

增加節點、刪除節點後節點需要rehash

為了解決上述兩個主要問題,引入了一致性hash演算法。

首先,將0到 2^32 想象成乙個圓,就像鐘錶一樣,鐘錶的圓可以理解成由60個點組成的圓,而此處我們把這個圓想象成由 2^32 個點組成的圓。假設有兩個資料節點node1和node2,將它們通過乙個特定的hash演算法,肯定得到兩個整數,恰好落在這個圓的某個點上,如圖所示:

現有一批資料,通過特定的演算法,也會落在這個圓上,規定資料存在順時針最近的節點上,如圖:

這樣看起來有明顯的資料傾斜問題,為了解決資料傾斜問題,則引入了虛擬節點,所謂的虛擬節點就是某個實際幾點的乙個對映幾點,因為node2儲存的資料比較少,則虛擬出乙個node2的虛擬節點node2-v1,將這個節點取模後的數字正好落在我們認為合適的位置,那麼有些資料就會被分配到了虛擬節點上,比如下面的圖:

當查詢或插入資料到node2-v1節點的時候,實際上是插入到了真實節點node2上,這樣資料就被均勻的分布到了兩個節點上。

如果按照原來取模的方式,當新增或者刪除乙個資料節點的時候,取模演算法就有個極大的弊端,就是需要將所有資料rehash,資料遷移量比較大,如果採用一致性hash演算法,極大的減少了資料遷移的量級。假設新增了乙個節點node3,資料圖如下:

從圖上可以看出,需要進行資料遷移的只有node2和node3中間的兩個資料而已。

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...

一致性hash演算法

july部落格16章開始 第一題 全排列,輸入乙個字串,列印出該字串中字元的所有排列 1.個人思路 回溯法建立的排序樹 2.july部落格 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似 c stl 演算法 next permutation的思想,關於next permutat...