Pregunta

Estoy guardando URL en una base de datos, y cuando inserto una nueva, quiero verificar si esa URL ya existe en la base de datos.

Una práctica común (si no me equivoco) es hash las URL usando MD5 o SHA-1, etc. y verificar ese campo en la base de datos para duplicados antes de insertar una nueva.

Sé que MD5 puede producir colisiones, también Sha-1 ...

¿Qué sugieres para mí? Mis necesidades son:

  • Tamaño de DB: Finalmente, 10 a 20 millones de registros en la base de datos

  • Rendimiento/velocidad: Tamaño de hash pequeño para que la base de datos no tenga una verificación de carga pesada para duplicados (será un índice, por supuesto, en ese campo)

  • Tolerancia: No me importa si obtengo 1 colisión en cada 100,000 registros. Mis necesidades son más para el rendimiento (hash pequeño) en lugar del 0% de colisiones (hash grande).

  • Posibilidad de ataque de URL malformadas para producir colisiones a propósito: Extremadamente bajo

  • Daño máximo posible en caso de un ataque tan exitoso: Extremadamente bajo

Preguntas:

  • ¿Crees que MD5 es suficiente (algo mejor para sugerir)?

  • Tal vez MD5 es incluso exagerado ¿Para mí y en serio podría obtener los beneficios de rendimiento usando algo más simple?

¡Gracias de antemano chicos!

¿Fue útil?

Solución

¿Qué hay de usar MD5 o algún hash relativamente económico similar (tal vez Cuarc?), ¿Y en el raro caso de colisión verificando la URL completa para las entradas coincidentes? De esta manera, la mayoría de las veces solo tiene un cheque de hash económico, pero en realidad nunca inserta una URL duplicada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top