Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

MurmurHash - o que é?


Murmur é uma família de boas funções de hashing de propósito geral, adequadas para uso não criptográfico. Conforme afirmado por Austin Appleby, MurmurHash oferece os seguintes benefícios:
  • simples (em termos de número de instruções de montagem geradas).
  • boa distribuição (passando nos testes de qui-quadrado para praticamente todos os conjuntos de chaves e tamanhos de baldes.
  • bom comportamento de avalanche (viés máximo de 0,5%).
  • boa resistência a colisões (passa no teste de tortura frog.c de Bob Jenkin. Não é possível colisões para chaves de 4 bytes, nem diferenciais pequenos (1 a 7 bits).
  • ótimo desempenho em hardware Intel/AMD, boa relação entre qualidade de hash e consumo de CPU.

Você certamente pode usá-lo para hash UUIDs (como qualquer outra função avançada de hash:CityHash, Jenkins, Paul Hsieh's, etc ...). Agora, um bitset Redis está limitado a 4 GB de bits (512 MB). Portanto, você precisa reduzir 128 bits de dados (UUID) para 32 bits (valor hash). Qualquer que seja a qualidade da função de hash, haverá colisões.

Usar uma função de hash projetada como Murmur maximizará a qualidade da distribuição e minimizará o número de colisões, mas não oferece outra garantia.

Aqui estão alguns links que comparam a qualidade das funções de hash de uso geral:

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/