Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

245
Views
¿Cómo generar una identificación única garantizada para los archivos almacenados en el servidor?

Soy un completo novato en la programación del lado del servidor. Actualmente estoy escribiendo un servicio para almacenar archivos de usuarios enviados desde la aplicación ios. Me gustaría generar una identificación única para cada archivo y también usarla como nombre de archivo. El problema es que muchas de las soluciones, como el uso de una función hash, que encontré en línea tienen el riesgo de colisión. Entonces, ¿cuál es la forma preferida de hacer eso? Sé que AWS s3 genera una identificación única para cada archivo. ¿Cómo implementaron esto?

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Cualquiera que sea el lenguaje de programación que use, probablemente tenga una biblioteca GUID (a veces llamada UUID) que puede considerarse universalmente única. Ver https://en.wikipedia.org/wiki/Universally_unique_identifier

Hashing no resolverá este problema en absoluto, porque el punto de un hash es que dos entradas idénticas deberían dar como resultado dos salidas idénticas. Por lo tanto, si dos usuarios cargan ThisIsAFile.pdf , ambos tendrán que decir a89na3 y habrá una colisión.

about 4 years ago · Santiago Trujillo Report

0

Una forma posible es generar una identificación aleatoria amplia. Si genera un nombre aleatorio de varias docenas de caracteres como _5E960vkoXF8_6t2yfMbEM0A_6uBsy060PxH_2YKKKmZkTR6 , la probabilidad de colisión puede hacerse lo suficientemente pequeña como para ser insignificante (por ejemplo, su sistema necesitaría ejecutar muchos miles de millones de años para observar una sola colisión). Si desea estimar esa probabilidad, use el enfoque del problema del cumpleaños .

(las colisiones no siempre son un problema, si puede hacer que su probabilidad sea lo suficientemente pequeña)

Los UUID están explotando esta idea. Entonces, la forma más sencilla es usar una función de biblioteca que los genere, por ejemplo, uuid_generate . Es posible que desee hacer lo mismo (es decir, codificar su propio generador de identificación aleatoria), pero debe tener cuidado con la aleatoriedad.

Al menos, podría usar un buen PRNG (como uno de Mersenne twister ) que sembraría periódicamente (y al inicio) con algo de ruido aleatorio, por ejemplo, usando /dev/random (léase cuidadosamente random(4) ...) o obtener al azar (2) . O puede comprar alguna fuente de hardware de generación aleatoria (como OneRNG ).

Por cierto, si supone que el contenido de los archivos del usuario no cambia (por lo que cada archivo se escribe una vez en el momento de la creación), podría usar alguna función hash criptográfica en ellos (como SHA 256 ). Luego, si dos usuarios distintos subieran exactamente el mismo contenido (por ejemplo, el texto de GPLv3 ), lo almacenaría una vez en su disco (en algún archivo compartido ). El proyecto https://www.softwareheritage.org/ está utilizando dicha técnica.

(por razones de cardinalidad, las colisiones siguen siendo teóricamente posibles, pero altamente improbables)

No querrás que las colisiones sean matemáticamente imposibles. Probablemente quieras tenerlos muy improbables: si la probabilidad es menor que 10 -50 (o solo 10 -30 que es alrededor de 2 -100 ) probablemente no debería importarte (ya que nuestro planeta Tierra desaparecerá antes de que la colisión sea probable que ocurra). suceder).

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!