哈希算法

什么是哈希算法?
將任意長(zhǎng)度的二進(jìn)制值串映射到固定長(zhǎng)度的二進(jìn)制值串,這種映射規(guī)則就是哈希算法。

哈希算法的應(yīng)用:

  1. 安全加密:MD5,SHA

  2. 唯一標(biāo)識(shí):

例如查找圖片是否存在,簡(jiǎn)單的方法將圖片轉(zhuǎn)換為二進(jìn)制串,在圖庫(kù)中一一進(jìn)行對(duì)比,但圖片文件如果較大,轉(zhuǎn)換為二進(jìn)制串后將會(huì)很長(zhǎng),對(duì)比將變得很耗時(shí)。

采用哈希算法可優(yōu)化查找圖片方式。首先將圖片的摘要信息轉(zhuǎn)換為哈希值作為圖片的唯一標(biāo)識(shí),將哈希值和圖片路徑存到散列表中,查找圖片時(shí)利用相同的哈希函數(shù)獲取唯一標(biāo)識(shí)查詢(xún)。

  1. 數(shù)據(jù)校驗(yàn):例如驗(yàn)證視頻文件下載前后的哈希值是否一致。

  2. 散列函數(shù):哈希算法也可作為散列函數(shù),散列函數(shù)對(duì)反向獲取數(shù)據(jù)和散列碰撞要求不高。對(duì)通過(guò)散列后值是否均勻分布、散列函數(shù)的效率更為關(guān)注。

  3. 負(fù)載均衡:

實(shí)現(xiàn)會(huì)話(huà)粘滯的負(fù)載均衡算法。即相同客戶(hù)IP或會(huì)話(huà)ID,請(qǐng)求需要發(fā)送到同一臺(tái)機(jī)器上。

將客戶(hù)IP或會(huì)話(huà)ID通過(guò)哈希算法計(jì)算得到哈希值,再將哈希值對(duì)機(jī)器數(shù)量進(jìn)行取模運(yùn)算,獲取的值作為最終機(jī)器編號(hào)。這樣相同的IP或ID都會(huì)映射到同一個(gè)編號(hào)的機(jī)器上。

  1. 數(shù)據(jù)分片:

對(duì)數(shù)據(jù)量過(guò)大,一臺(tái)機(jī)器無(wú)法滿(mǎn)足高效計(jì)算的場(chǎng)景,可將數(shù)據(jù)分片下發(fā)到多臺(tái)機(jī)器,并發(fā)計(jì)算提高效率。

例1:對(duì)1T條搜索記錄的日志文件,統(tǒng)計(jì)搜索關(guān)鍵字的次數(shù)。首先通過(guò)n臺(tái)機(jī)器并行處理,從日志文件中依次讀取關(guān)鍵字,并通過(guò)哈希算法獲取關(guān)鍵字的哈希值,再對(duì)哈希值進(jìn)行機(jī)器數(shù)目的取模運(yùn)算獲取機(jī)器編號(hào),這樣相同關(guān)鍵字的都將映射到同一臺(tái)機(jī)器中。每臺(tái)機(jī)器分別計(jì)算搜索次數(shù)。

例2: 搜索圖片是否存在。分發(fā)到n臺(tái)機(jī)器維護(hù)圖片存儲(chǔ)的散列表。將圖片的信息摘要進(jìn)行取模運(yùn)算,得到機(jī)器編號(hào),在對(duì)應(yīng)的機(jī)器中查找。

  1. 分布式存儲(chǔ):

利用數(shù)據(jù)分片的思想,對(duì)數(shù)據(jù)的哈希值進(jìn)行取模,得到的編號(hào)作為存儲(chǔ)的機(jī)器編號(hào)。

但如果緩存機(jī)器擴(kuò)容,將會(huì)搬遷舊數(shù)據(jù)到新的機(jī)器中,原來(lái)機(jī)器的緩存失效,所有數(shù)據(jù)都對(duì)數(shù)據(jù)庫(kù)發(fā)起請(qǐng)求。

由此,需要一種擴(kuò)容機(jī)器后,不需要做大規(guī)模數(shù)據(jù)遷移的哈希算法來(lái)解決數(shù)據(jù)搬遷問(wèn)題:一致性哈希算法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容