Murmur ist eine Familie guter Allzweck-Hashing-Funktionen, die für die nicht kryptografische Verwendung geeignet sind. Wie von Austin Appleby angegeben, bietet MurmurHash die folgenden Vorteile:
- einfach (in Bezug auf die Anzahl der generierten Montageanweisungen).
- Gute Verteilung (Bestehen von Chi-Quadrat-Tests für praktisch alle Keysets und Bucket-Größen.
- gutes Lawinenverhalten (maximale Vorspannung von 0,5%).
- Gute Kollisionsbeständigkeit (besteht Bob Jenkins frog.c-Foltertest. Keine Kollisionen für 4-Byte-Schlüssel möglich, keine kleinen (1- bis 7-Bit-) Differentiale).
- Hervorragende Leistung auf Intel / AMD-Hardware, guter Kompromiss zwischen Hash-Qualität und CPU-Verbrauch.
Sie können es sicherlich zum Hashing von UUIDs verwenden (wie alle anderen erweiterten Hashing-Funktionen: CityHash, Jenkins, Paul Hsiehs usw.). Jetzt ist ein Redis-Bitset auf 4 GB Bits (512 MB) begrenzt. Sie müssen also 128 Bit Daten (UUID) auf 32 Bit (Hash-Wert) reduzieren. Unabhängig von der Qualität der Hashing-Funktion kommt es zu Kollisionen.
Die Verwendung einer ausgereiften Hash-Funktion wie Murmur maximiert die Qualität der Verteilung und minimiert die Anzahl der Kollisionen, bietet jedoch keine andere Garantie.
Hier sind einige Links, die die Qualität von Allzweck-Hash-Funktionen vergleichen:
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/