雜湊函式
阿新 • • 發佈:2021-12-08
雜湊函式的輸入輸出性質
- 輸入域無窮,輸出域有界
MD5演算法的輸出域:返回長度為16位的字串,每位表示16種狀態->1616==264種狀態 => 值的範圍[0,2^64-1]
SHA1演算法的輸出域:返回長度為32位的字串,每位表示16種狀態->1632==2128種狀態 => 值範圍[0,2^128-1] - 相同的輸入必然會有相同的輸出
- 按一定規則計算,無隨機的成分
- 不同的輸入可能會有相同的輸出->雜湊碰撞
- 輸入域無窮輸出域有界
- 注意:雜湊碰撞是在極大量輸入情況下發生,發生概率較低)
- 不同的輸入具有均勻離散性,離散型越高,雜湊函式越優秀
例題
在40億個無符號整數(範圍0~2^32-1==42億)中,使用1G記憶體 返回出現次數最多的數
- hash表做法分析:
hash表的一條記錄至少需要8B key(int)-value(int),最差情況下需要40億*8B=320億B=32G記憶體, 32G > 1G,出現記憶體爆棧問題 - hash函式做法分析:
利用hash函式再取模100,得到100個分類小檔案;根據均分性和輸入輸出一致性,統計釋放每個小檔案,小檔案記憶體32G/100=0.32G < 1G,不會爆棧。
一致性雜湊原理
-
邏輯端伺服器
計算資料分配,每個例項都是等效的 -
資料端伺服器
如何組織: 算出雜湊值用模組織
負載均衡如何計算? 看高中低頻的數量
hash的key如何選擇? 選擇種類多,高中低頻都有數量分佈的key
弊端: 增加減少機器,資料遷移的代價是全量的
解決: 利用雜湊一致性, -
雜湊一致性
- 構建一個雜湊環,通過邏輯端維持一個雜湊值的有序陣列,由機器去搶佔雜湊環的雜湊值點去劃分環,順時針找到最近(較大於其)的機器,找到資料歸屬
- 優點: 增減機器,資料遷移代價小;還可實現管理負載
- 潛在問題: 機器很少時確保均分雜湊環有一定難度; 增減機器,負載不均衡
- 解決: 虛擬節點技術,由虛擬節點按比例強佔,解決負載不均衡問題