¿Cuál es un buen algoritmo de hash para identificar de forma exclusiva una URL en una base de datos?

El problema en las URL de hashing no es el algoritmo de hashing (Murmur, MD5, SHA1, etc., todo estaría bien), sino la normalización de las URL.

Por ejemplo, todas las siguientes URL tienen el mismo significado, pero diferentes hashes:

  • http://www.google.com
  • http://www.google.com/
  • www.google.com
  • google.com
  • google.com.

Antes de hash las URL, debe normalizarlas. Wikipedia tiene una buena referencia para este proceso: http://en.wikipedia.org/wiki/URL…. La mayoría de las bibliotecas de URL también tienen métodos que pueden ayudarte con esto.

En términos de su aplicación específica, asegúrese de que realmente necesita hash la URL (que no tiene suficiente espacio solo para indexar las cadenas). Si tiene relativamente pocas URL, podría usar un algoritmo de suma de verificación como Adler32 que es sustancialmente más eficiente en espacio y más rápido. Si le preocupa el espacio, también podría usar un hash relativamente débil para reducir sustancialmente su región de búsqueda antes de realizar una búsqueda estándar basada en la cadena de URL.