Murmur är en familj av bra hashfunktioner för allmänna ändamål, lämpliga för icke-kryptografisk användning. Som sagt av Austin Appleby ger MurmurHash följande fördelar:
- enkel (med hänsyn till antalet genererade monteringsinstruktioner).
- bra distribution (godkänt chi-kvadrattest för praktiskt taget alla nyckelsatser och hinkstorlekar.
- bra lavinbeteende (max bias på 0,5%).
- bra kollisionsmotstånd (klarar Bob Jenkins frog.c tortyrtest. Inga kollisioner möjliga för 4-byte nycklar, inga små (1- till 7-bitars) skillnader).
- bra prestanda på Intel/AMD-hårdvara, bra avvägning mellan hashkvalitet och CPU-förbrukning.
Du kan säkert använda den för att hasha UUID (som alla andra avancerade hashfunktioner:CityHash, Jenkins, Paul Hsiehs, etc ...). Nu är en Redis-bituppsättning begränsad till 4 GB-bitar (512 MB). Så du måste minska 128 bitar av data (UUID) till 32 bitar (hashat värde). Oavsett kvaliteten på hashfunktionen kommer det att bli kollisioner.
Att använda en konstruerad hash-funktion som Murmur kommer att maximera kvaliteten på distributionen och minimera antalet kollisioner, men det ger ingen annan garanti.
Här är några länkar som jämför kvaliteten på hashfunktioner för allmänna ändamål:
http://www.azillionmonkeys.com/qed/hash.html
http://www.strchr.com/hash_functions
http://blog.aggregateknowledge.com/2011/12/05/choosing-a-good-hash-function-part-1/
http://blog.aggregateknowledge.com/2011/12/29/choosing-a-good-hash-function-part-2/
http://blog.aggregateknowledge.com/2012/02/02/choosing-a-good-hash-function-part-3/