1. 程式人生 > 其它 >雜湊函式

雜湊函式

雜湊函式的輸入輸出性質

  • 輸入域無窮,輸出域有界
    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
    弊端: 增加減少機器,資料遷移的代價是全量的
    解決: 利用雜湊一致性,

  • 雜湊一致性

    • 構建一個雜湊環,通過邏輯端維持一個雜湊值的有序陣列,由機器去搶佔雜湊環的雜湊值點去劃分環,順時針找到最近(較大於其)的機器,找到資料歸屬
    • 優點: 增減機器,資料遷移代價小;還可實現管理負載
    • 潛在問題: 機器很少時確保均分雜湊環有一定難度; 增減機器,負載不均衡
    • 解決: 虛擬節點技術,由虛擬節點按比例強佔,解決負載不均衡問題