sql >> Databasteknik >  >> NoSQL >> Redis

MurmurHash - vad är det?

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/



  1. Automatisera MongoDB med SaltStack

  2. Om redis redan är en del av stacken, varför används Memcached fortfarande tillsammans med Redis?

  3. Vad är fördelen med Redis-klustring på olika värdar?

  4. Hur växlar man ett booleskt fält i ett dokument med atomär drift?