Sé que hay una posibilidad mínima de un choque, pero si genero un lote de 1000 GUID (por ejemplo), ¿sería seguro asumir que todos son únicos para guardar la prueba de cada uno?
Pregunta extra
¿Una manera óptima de probar un GUID para la unicidad? ¿Filtro de floración tal vez?
Respuestas:
Sí tu puedes. Dado que los GUID tienen 128 bits de largo, hay una posibilidad mínima de un choque, pero la palabra "minuto" no es lo suficientemente fuerte. Hay tantos GUID que si genera varios billones de ellos al azar, aún es más probable que sea golpeado por un meteorito que incluso tener una colisión (de Wikipedia ). Y si no los está generando al azar, pero está utilizando, por ejemplo , el algoritmo de dirección MAC y marca de tiempo, entonces también serán únicos, ya que las direcciones MAC son únicas entre las computadoras y las marcas de tiempo son únicas en su computadora.
Edición 1: para responder a su pregunta adicional, la forma óptima de probar un conjunto de GUID para la unicidad es simplemente asumir que todos son únicos. ¿Por qué? Porque, dada la cantidad de GUID que está generando, las probabilidades de una colisión de GUID son menores que las probabilidades de que un rayo cósmico se voltee un poco en la memoria de su computadora y arruine la respuesta dada por cualquier algoritmo "preciso" que le interese correr. (Vea esta respuesta de StackOverflow para las matemáticas).
Hay una enorme cantidad de GUID por ahí. Para citar la Guía del autoestopista de la galaxia de Douglas Adams :
Y dado que hay alrededor de 7 × 10 22 estrellas en el universo , y poco menos de 2 128 GUID, entonces hay aproximadamente 4,86 × 10 15, casi cinco billones, de GUID para cada estrella. Si cada una de esas estrellas tuviera un mundo con una población próspera como la nuestra, entonces, alrededor de cada estrella, cada humano o alienígena que haya vivido tendrá derecho a más de cuarenta y cinco mil GUID. Para cada persona en la historia en cada estrella del universo. El espacio GUID está en el mismo nivel de inmensidad que el tamaño de todo el universo. Usted no necesita preocuparse.
( Edición 2: Al reflexionar sobre esto: wow no me había dado cuenta. A mí mismo lo que este espacio GUID El significado es incomprensible masiva Soy una especie de en el temor de él...)
fuente
10^14
células en tu cuerpo, y 106.5 billones de personas han vivido. O,2.385 * 10^23
UUID por cada centavo en la deuda pública de los Estados Unidos.Respuesta corta: para fines prácticos, sí.
Sin embargo, ¡debes considerar la paradoja del cumpleaños!
He calculado algunas probabilidades representativas de colisión. Con UUID de 122 bits como se especifica en el artículo de Wikipedia , la probabilidad de colisión es de 1/2 si genera al menos
2.71492e18
UUID. Con 10 ^ 19 UUID, la probabilidad es 0.999918. Con 10 ^ 17 UUID, 0.000939953.Algunos números para comparar se pueden encontrar en Wikipedia. Por lo tanto, puede asignar con seguridad un UUID para cada humano que ha vivido, cada galaxia en el universo observable, cada pez en el océano y cada hormiga individual en la Tierra. Sin embargo , las colisiones son casi seguras si genera un UUID para cada transistor que la humanidad produce en un año, cada insecto en la Tierra, cada grano de arena en la Tierra, cada estrella en el universo observable o cualquier cosa más grande.
Si genera mil millones de UUID por segundo, tomaría unos 36 años obtener una probabilidad de colisión del 10%.
Eventualmente, probablemente habrá una colisión entre el conjunto de UUID generados en el transcurso de la historia humana. Aún así, la probabilidad de que los UUID colisionados se usen para el mismo propósito es muy pequeña, por lo que no hay problema en la práctica.
fuente
Un análisis de la posibilidad de colisión está disponible en Wikipedia: http://en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates
Como se menciona en el enlace, esto se verá afectado por las propiedades del generador de números aleatorios.
También existe la posibilidad de un error en el código del generador GUID; Si bien las posibilidades son bajas, probablemente sean más altas que las posibilidades de una colisión basada en las matemáticas.
Un filtro Bloom podría ser apropiado; puede decirle rápidamente si un GUID es único, pero existe la posibilidad de una indicación falsa de una colisión. Un método alternativo si está probando un lote a la vez es ordenar el lote y comparar cada elemento sucesivo.
fuente
En general, sí, es seguro asumirlo.
Si su generador de GUID es verdaderamente aleatorio, las posibilidades de un choque dentro de 1000 GUID son extraordinariamente pequeñas.
Por supuesto, eso supone un buen generador de GUID. Entonces, la pregunta es realmente cuánto confía en la herramienta que está utilizando para generar GUID y ¿tiene sus propias pruebas?
fuente
Si bien es posible una colisión, es ALTAMENTE improbable. (Matemáticas aquí .) Es seguro asumir que de hecho son distintos.
fuente
Por lo general, es una suposición bastante segura.
http://en.wikipedia.org/wiki/Globally_Unique_Identifier
¿Es un GUID único el 100% del tiempo?
fuente