sql >> Base de Datos >  >> NoSQL >> Redis

MurmurHash - ¿Qué es?

Murmur es una familia de buenas funciones hash de propósito general, adecuadas para uso no criptográfico. Según lo declarado por Austin Appleby, MurmurHash brinda los siguientes beneficios:

  • simple (en términos de número de instrucciones de montaje generadas).
  • buena distribución (superando las pruebas de chi-cuadrado para prácticamente todos los juegos de llaves y tamaños de depósito).
  • buen comportamiento ante avalanchas (sesgo máximo de 0,5 %).
  • buena resistencia a colisiones (pasa la prueba de tortura frog.c de Bob Jenkin. No hay colisiones posibles para claves de 4 bytes, no hay diferencias pequeñas (de 1 a 7 bits)).
  • gran rendimiento en hardware Intel/AMD, buen compromiso entre calidad de hash y consumo de CPU.

Sin duda, puede usarlo para codificar UUID (como cualquier otra función de cifrado avanzada:CityHash, Jenkins, Paul Hsieh, etc.). Ahora, un conjunto de bits de Redis está limitado a 4 GB de bits (512 MB). Por lo tanto, debe reducir 128 bits de datos (UUID) a 32 bits (valor hash). Sea cual sea la calidad de la función hash, habrá colisiones.

El uso de una función hash diseñada como Murmur maximizará la calidad de la distribución y minimizará la cantidad de colisiones, pero no ofrece ninguna otra garantía.

Aquí hay algunos enlaces que comparan la calidad de las funciones hash de uso general:

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/