Estoy desarrollando una aplicación de back-end para un sistema de búsqueda. El sistema de búsqueda copia archivos en un directorio temporal y les da nombres aleatorios. Luego pasa los nombres de los archivos temporales a mi aplicación. Mi aplicación debe procesar cada archivo dentro de un período de tiempo limitado; de lo contrario, se cierra; esa es una medida de seguridad similar a la de un perro guardián. Procesar archivos es probable que tome mucho tiempo, así que necesito diseñar la aplicación capaz de manejar este escenario. Si mi aplicación se cierra la próxima vez que el sistema de búsqueda quiera indexar el mismo archivo, probablemente le dé un nombre temporal diferente.¿Cómo puedo evaluar la probabilidad de colisión hash?
La solución obvia es proporcionar una capa intermedia entre el sistema de búsqueda y el back-end. Pondrá en cola la solicitud al back-end y esperará a que llegue el resultado. Si la solicitud expira en la capa intermedia, no hay problema, el servidor continuará funcionando, solo la capa intermedia se reinicia y puede recuperar el resultado del servidor cuando el sistema de búsqueda repite la solicitud.
El problema es cómo identificar los archivos. Sus nombres cambian aleatoriamente. Tengo la intención de utilizar una función hash como MD5 para hash el contenido del archivo. Conozco bien el birthday paradox y usé una estimación del artículo vinculado para calcular la probabilidad. Si asumo que no tengo más de 100 000 archivos, la probabilidad de que dos archivos tengan el mismo MD5 (128 bit) es aproximadamente 1,47x10 -29.
¿Debo cuidar esa probabilidad de colisión o simplemente asumir que los valores de hash iguales significan el mismo contenido de archivo?
¿Esto es un hash en el contenido del nombre de archivo? –
El contenido es hash. No tiene sentido ordenar los nombres de los archivos; cambian aleatoriamente. – sharptooth
Si le preocupan las colisiones, considere tanto el tamaño del archivo como el hash. –