¿Es un GUID único el 100% del tiempo?

519

¿Es un GUID único el 100% del tiempo?

¿Se mantendrá único en múltiples hilos?

David Basarab
fuente
265
No, no 100% ... Solo 99,999999999999999999999999999999999999999999999999999999999999999999999999999%;)
JohannesH
52
En primer lugar, un GUID no es infinito, lo que significa que, para el significado literal de "100% del tiempo", significaría que no importa cuánto tiempo siga generando GUID, siempre serán únicos. Este no es el caso. Además, desde la implementación original, donde la serie / id / MAC única de la tarjeta de red se utilizó para producir una parte de la clave ya no se utiliza, por varias razones, un GUID ya no es realmente único a nivel mundial . Sin embargo, es localmente único. En otras palabras, si sigue generando GUID en una sola máquina, no obtendrá duplicados.
Lasse V. Karlsen
36
@ojrac acabo decido bajar redonda ...: P
JohannesH
403
Cada vez que genero GUID siento que estoy robando uno del Universo. A veces pienso en la gente mala que generan mucho más GUID de los que necesitan y aquellos GUID desperdiciados son tan solo que no se utilicen o se generen de nuevo ...
asavartsov
29
@asavartsov Creo que te gustará wasteaguid.info ^ _ ^
Navin

Respuestas:

431

Si bien no se garantiza que cada GUID generado sea único, el número total de claves únicas (2 128 o 3,4 × 10 38 ) es tan grande que la probabilidad de que se genere el mismo número dos veces es muy pequeña. Por ejemplo, considere el universo observable, que contiene aproximadamente 5 × 10 22 estrellas; cada estrella podría tener 6.8 × 10 15 GUID universalmente únicos.

De Wikipedia .


Estos son algunos buenos artículos sobre cómo se hace un GUID (para .NET) y cómo podría obtener el mismo GUID en la situación correcta.

https://ericlippert.com/2012/04/24/guid-guide-part-one/

https://ericlippert.com/2012/04/30/guid-guide-part-two/

https://ericlippert.com/2012/05/07/guid-guide-part-three/

​​

Adam Davis
fuente
115
¿No se llamarían UUID, entonces? ;)
Arafangion
28
Un GUID es la implementación específica de microsoft del estándar UUID. Entonces, son ambos. Identificación única global versus identificación única universal.
Adam Davis
40
Técnicamente, no es 2 ^ 128, porque en un GUID v4, tiene un dígito hexadecimal que siempre será un 4 (eliminando efectivamente 4 bits), y dos bits más adelante también están reservados. Sin embargo, 2 ^ 122 GUID de V4 válidos todavía dejan alrededor de 5x10 ^ 36, lo que me servirá. y por ti tambien. Cada estrella tendrá que aceptar aproximadamente 1.1x10 ^ 14 GUID cada uno.
Andrew Shelansky
67
Si eres como yo, entonces usted querrá saber que 2^128en escrito es aproximadamente: 34,028,236,692,093,846,346,337,460,743,177,000,000. Estadísticamente, si calcularas 1000 GUID por segundo, todavía tomaría billones de años obtener un duplicado.
Entidad
26
Pensé que era divertido leerlo, así que diviértase :) Treinta y cuatro undecillion veintiocho decillion doscientos treinta y seis nonillion seiscientos noventa y dos octillion noventa y tres septillion ochocientos cuarenta y seis sextillion trescientos cuarenta y seis quintillion trescientos treinta siete quadrillion cuatrocientos sesenta billones setecientos cuarenta y tres mil ciento setenta y siete millones
hjavaher
85

Si tiene miedo de los mismos valores GUID, coloque dos de ellos uno al lado del otro.

Guid.NewGuid().ToString() + Guid.NewGuid().ToString();

Si eres demasiado paranoico, pon tres.

Bura Chuhadar
fuente
64
Tienes que ser muy, muy, muy, muy paranoico para agregar 3 GUID.
harsimranb
25
@harsimranb No ... muy, muy, muy, muy paranoico son 6 GUID. Paranoico es uno adjunto, muy paranoico es dos
adjuntos
37
@Suamere He creado un sitio web para calcular su nivel paranoico jogge.github.io/HowParanoidAmI
Jogge
3
@Jogge xD Eso es increíble, jajaja. Después de 9 9 999999999en su forma, creo que Paranoia explotará mi navegador.
Suamere
66

La respuesta simple es sí.

Raymond Chen escribió un excelente artículo sobre los GUID y por qué las subcadenas de los GUID no están garantizadas como únicas. El artículo profundiza en la forma en que se generan los GUID y los datos que utilizan para garantizar la unicidad, lo que debería extenderse un poco al explicar por qué son :-)

ljs
fuente
23
Creo que el artículo de Chen se refiere a la V1 del algoritmo de generación GUID, que usa una dirección MAC y una marca de tiempo; la V4 actual usa un número pseudoaleatorio en su lugar: en.wikipedia.org/wiki/Globally_Unique_Identifier#Algorithm
Barrett
2
el enlace está muerto - 403 Forbidden
Daya
Aquí está el enlace: devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823
Olanrewaju O. Joseph
39

Como nota al margen, estaba jugando con GUID de volumen en Windows XP. Este es un diseño de partición muy oscuro con tres discos y catorce volúmenes.

\\?\Volume{23005604-eb1b-11de-85ba-806d6172696f}\ (F:)
\\?\Volume{23005605-eb1b-11de-85ba-806d6172696f}\ (G:)
\\?\Volume{23005606-eb1b-11de-85ba-806d6172696f}\ (H:)
\\?\Volume{23005607-eb1b-11de-85ba-806d6172696f}\ (J:)
\\?\Volume{23005608-eb1b-11de-85ba-806d6172696f}\ (D:)
\\?\Volume{23005609-eb1b-11de-85ba-806d6172696f}\ (P:)
\\?\Volume{2300560b-eb1b-11de-85ba-806d6172696f}\ (K:)
\\?\Volume{2300560c-eb1b-11de-85ba-806d6172696f}\ (L:)
\\?\Volume{2300560d-eb1b-11de-85ba-806d6172696f}\ (M:)
\\?\Volume{2300560e-eb1b-11de-85ba-806d6172696f}\ (N:)
\\?\Volume{2300560f-eb1b-11de-85ba-806d6172696f}\ (O:)
\\?\Volume{23005610-eb1b-11de-85ba-806d6172696f}\ (E:)
\\?\Volume{23005611-eb1b-11de-85ba-806d6172696f}\ (R:)
                                     | | | | |
                                     | | | | +-- 6f = o
                                     | | | +---- 69 = i
                                     | | +------ 72 = r
                                     | +-------- 61 = a
                                     +---------- 6d = m

No es que los GUID sean muy similares, sino el hecho de que todos los GUID tienen la cadena "mario". ¿Es una coincidencia o hay una explicación detrás de esto?

Ahora, cuando busqué en Google para la parte 4 en el GUID, encontré aproximadamente 125,000 visitas con GUID de volumen.

Conclusión: cuando se trata de GUID de volumen, no son tan únicos como otros GUID.

Jonas Gulle
fuente
31
¿Recuerdas el anuncio de Super Mario Bros 3 de los años 80? Todas esas personas gritando "¡Mario! ¡Mario! ¡Mario!" alrededor del mundo trastornó un poco la aleatoriedad del universo.
MGOwen
24
Si desinstala manualmente Office 2010 con msiexec, enumera todos los GUID de MSI del programa de Office. Todos deletrean 0FF1CE. Parece que Microsoft tiene una interpretación bastante ... suelta ... de cómo generar un GUID;)
Mark Henderson
3
Estos GUID de partición se crearon todos juntos en 2009-12-17 @ 2:47:45 PM UTC. Son exclusivos de su máquina, pero poner "mario" como identificador de nodo es incorrecto, lo que significa que no cumplen con RFC-4122. Del mismo modo, los 0FF1CEGUID se incluyen en la sección "Compatibilidad con versiones anteriores de NCS" de RFC-4122, pero es poco probable que Microsoft siga las reglas de NCS para esos valores.
Stephen Cleary
16
Lo sabía, la Administración de Seguridad de Nintendo ha comprometido los generadores de números aleatorios.
MetaGuru
1
tal vez es el mismo estadio de béisbol que el nombre de la compañía que fabrica agua mineral (escuché que lideran el mercado) Evian. Revés espelta da Naive :-)
Mariusz
31

No debe suceder Sin embargo, cuando .NET está bajo una gran carga, es posible obtener guías duplicadas. Tengo dos servidores web diferentes que usan dos servidores sql diferentes. Fui a fusionar los datos y descubrí que tenía 15 millones de guías y 7 duplicados.

Tim
fuente
1
¿Cómo es esto posible en dos máquinas diferentes? ¿Pensé que parte del GUID era el nombre de la máquina? (sin discutir ... solo preguntando)
John Cruz
8
Esto solo sería cierto para las guías v1 que usan direcciones MAC (no el nombre de la máquina) como parte de la generación de GUID. El v4, que es la STD de facto, ya no usa direcciones Mac sino un número pseudoaleatorio.
Xander
14
Guid.NewGuidsiempre genera v4 GUID (y siempre lo ha hecho). Tim debe haber tenido fuentes de entropía extremadamente pobres.
Stephen Cleary
1
¿Se ha replicado alguna vez? ese es un gran problema si es el caso.
Zyo
1
Lo mismo aquí al importar conjuntos de datos muy grandes. De aproximadamente 10-100 millones obtienes duplicados de Guid.NewGuid
Stephan Baltzer
28

Sí, un GUID siempre debe ser único. Se basa tanto en hardware como en tiempo, además de algunos bits adicionales para garantizar que sea único. Estoy seguro de que es teóricamente posible terminar con dos idénticos, pero extremadamente improbable en un escenario del mundo real.

Aquí hay un gran artículo de Raymond Chen sobre Guías:

https://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

Eric Z Beard
fuente
55
Este artículo es bastante antiguo y hace referencia a la v1 de los GUID. v4 no usa hardware / tiempo, sino un algoritmo de números aleatorios. en.wikipedia.org/wiki/Globally_unique_identifier#Algorithm
Mani Gandham
Este enlace está roto
Marcel
Aquí está el enlace: devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823
Olanrewaju O. Joseph
23

Las guías son estadísticamente únicas. Las probabilidades de que dos clientes diferentes generen el mismo Guid son infinitamente pequeñas (suponiendo que no haya errores en el código de generación de Guid). También puede preocuparse por la falla de su procesador debido a un rayo cósmico y decidir que 2 + 2 = 5 hoy.

Los subprocesos múltiples que asignan nuevas guías obtendrán valores únicos, pero debe tener en cuenta que la función que está llamando es segura para subprocesos. ¿En qué ambiente está esto?

Rob Walker
fuente
19

Eric Lippert ha escrito una serie muy interesante de artículos sobre GUID.

Hay en el orden 2 30 computadoras personales en el mundo (y, por supuesto, muchos dispositivos de mano o dispositivos informáticos que no son PC que tienen más o menos los mismos niveles de potencia informática, pero ignoremos esos). Asumamos que ponemos todas esas PC en el mundo a la tarea de generar GUID; si cada uno puede generar, digamos, 2 20 GUID por segundo, luego de solo unos 2 72 segundos, ciento cincuenta trillones de años , tendrá una probabilidad muy alta de generar una colisión con su GUID específico. Y las probabilidades de colisión se vuelven bastante buenas después de solo treinta billones de años.

Paolo Moretti
fuente
28
... y continúa en el siguiente párrafo: "Pero eso está buscando una colisión con un GUID específico. [...] Entonces, si ponemos a trabajar esos mil millones de PC generando GUID de aleatoriedad de 122 bits, la probabilidad de que dos de ellos en algún lugar colisionarían mucho después de que se generen aproximadamente 2 ^ 61 GUID. Dado que suponemos que aproximadamente 2 ^ 30 máquinas están haciendo 2 ^ 20 GUID por segundo, esperaríamos una colisión después de aproximadamente 2 ^ 11 segundos, que es aproximadamente una hora ". (Y finalmente explica que, por supuesto, no se generan muchos GUID).
Arjan
16

Teóricamente, no, no son únicos. Es posible generar una guía idéntica una y otra vez. Sin embargo, las posibilidades de que ocurra son tan bajas que puede asumir que son únicas.

He leído antes que las posibilidades son tan bajas que realmente debería preocuparse por otra cosa, como que su servidor se queme espontáneamente u otros errores en su código. Es decir, suponga que es único y no construya ningún código para "atrapar" duplicados; dedique su tiempo a algo más probable que suceda (es decir, cualquier otra cosa ).

Me hice un intento para describir la utilidad de GUID a mi audiencia en el blog (memebers familia no técnicos). A partir de ahí (a través de Wikipedia), las probabilidades de generar un GUID duplicado:

  • 1 en 2 ^ 128
  • 1 en 340 undecillion (no te preocupes, undecillion no está en el cuestionario)
  • 1 en 3.4 × 10 ^ 38
  • 1 en 340,000,000,000,000,000,000,000,000,000,000,000,000
Michael Haren
fuente
1
En realidad, no estoy de acuerdo con 'no preocuparme por eso', aunque desde una postura diferente: si detecta una colisión GUID, entonces algo ha fallado con su aplicación. He usado GUID, por ejemplo, por idempotencia, y tengo una colisión cuando un comando se ha enviado dos veces (con el mismo GUID).
Kenny Hung
9

Ninguno parece mencionar la matemática real de la probabilidad de que ocurra.

Primero, supongamos que podemos usar todo el espacio de 128 bits (Guid v4 solo usa 122 bits).

Sabemos que la probabilidad general de NO obtener un duplicado en las nselecciones es:

(1-1 / 2 128 ) (1-2 / 2 128 ) ... (1- (n-1) / 2 128 )

Como 2 128 es mucho más grande que n, podemos aproximar esto a:

(1-1 / 2 128 ) n (n-1) / 2

Y como podemos suponer que nes mucho más grande que 0, podemos aproximarlo a:

(1-1 / 2 128 ) n ^ 2/2

Ahora podemos equiparar esto a la probabilidad "aceptable", digamos 1%:

(1-1 / 2 128 ) n ^ 2/2 = 0.01

Lo que resolvemos ny obtenemos:

n = sqrt (2 * log 0.01 / log (1-1 / 2 128 ))

Qué Wolfram Alpha llega a ser 5.598318 × 10 19

Para poner ese número en perspectiva, tomemos 10000 máquinas, cada una con una CPU de 4 núcleos, haciendo 4Ghz y gastando 10000 ciclos para generar un Guid y no hacer nada más. Luego tomaría ~ 111 años antes de que generen un duplicado.

Cine
fuente
Edité su publicación siguiente a esta publicación , edítela si cometí un error;).
shA.t
Hola @Cine, tengo el poder de editar tu respuesta, pero he optado por no hacerlo porque quiero tener la oportunidad de refutarlo primero, probablemente vendré en un mes para cambiarlo formalmente si no lo hago ' No tengo noticias tuyas. Aunque estoy bastante seguro de que tus matemáticas están mal. La ecuación real para determinar una probabilidad del 1% es la siguiente: ((2 ^ 128 - 1) / 2 ^ 128) ^ ((n (n-1)) / 2) = .01. Tu exponente está mal. no es solo n. Necesita C (n, 2) (también conocido como (n * (n-1)) / 2) para calcular todas las combinaciones cuando genera "n" guías. Vea aquí para más información
viggity
Gracias Cine, yo también terminé aproximando n ^
2/2
Tomaría 10000 máquinas 111 años generar cada GUID posible y luego generar un duplicado. Sin embargo, se produciría un duplicado mucho antes de que se hayan generado todos los GUID posibles. Creo que el plazo aproximado dependerá de cuán 'aleatorio' sea el proceso de generación de GUID.
George K
@GeorgeK Creo que entendiste mal ... Se necesitarían 10000 máquinas 111 años para tener un 1% de posibilidades de encontrar un duplicado. Pero sí, este curso matemático supone que el generador aleatorio es totalmente aleatorio.
Cine
7

De http://www.guidgenerator.com/online-guid-generator.aspx

¿Qué es un GUID?

GUID (o UUID) es el acrónimo de 'Globally Unique Identifier' (o 'Universally Unique Identifier'). Es un número entero de 128 bits utilizado para identificar recursos. El término GUID generalmente lo usan los desarrolladores que trabajan con tecnologías de Microsoft, mientras que UUID se usa en cualquier otro lugar.

¿Qué tan único es un GUID?

128 bits es lo suficientemente grande y el algoritmo de generación es lo suficientemente único como para que si se generaran 1,000,000,000 de GUID por segundo durante 1 año, la probabilidad de un duplicado sería solo del 50%. O si cada humano en la Tierra generara 600,000,000 GUIDs, solo habría un 50% de probabilidad de un duplicado.

Tono Nam
fuente
77
¿No es una probabilidad del 50% de un duplicado lo suficientemente alto como para causar miedo?
disklosr
1
@disklosr, sí, es suficiente para causar miedo si sus sistemas están generando mil millones de GUID por segundo. En el caso extremadamente improbable que está generando esa cantidad a continuación, sólo encadenar dos GUID juntos ...
maxshuty
5

Experimenté un GUID duplicado.

Uso el escáner de escritorio Neat Receipts y viene con un software de base de datos patentado. El software tiene una función de sincronización con la nube, y seguí recibiendo un error al sincronizar. Un vistazo a los registros reveló la línea impresionante:

"errores": [{"código": 1, "mensaje": "creator_guid: ya está tomado", "guid": "C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}

Estaba un poco incrédulo, pero seguramente, cuando encontré un camino en mi base de datos local de Neatworks y eliminé el registro que contenía ese GUID, el error dejó de ocurrir.

Entonces, para responder a su pregunta con evidencia anecdótica, no. Un duplicado es posible. Pero es probable que la razón por la que sucedió no se deba al azar, sino a que la práctica estándar no se respeta de alguna manera. (No tengo tanta suerte) Sin embargo, no puedo decir con certeza. No es mi software.

Su atención al cliente fue EXTREMADAMENTE cortés y servicial, pero nunca debieron haber encontrado este problema antes porque después de más de 3 horas por teléfono con ellos, no encontraron la solución. (FWIW, estoy muy impresionado con Neat, y esta falla, aunque frustrante, no cambió mi opinión sobre su producto).

exintrovertido
fuente
19
No creas que tienes un duplicado. Probablemente haya algo más involucrado, como que el número no fue realmente aleatorio o que hubo un problema en el proceso de sincronización, o que el sistema intentó grabar dos veces, etc. Un problema de software es mucho más probable que obtener un GUID duplicado.
Orad
4

MSDN :

Hay una probabilidad muy baja de que el valor del nuevo Guid sea cero o igual a cualquier otro Guid.

Jakub Šturc
fuente
4

Si el reloj de su sistema está configurado correctamente y no se ha ajustado, y si su NIC tiene su propio MAC (es decir, no ha configurado un MAC personalizado) y su proveedor de NIC no ha estado reciclando los MAC (lo que se supone que no deben hacer) pero que se sabe que ocurre), y si la función de generación de GUID de su sistema se implementa correctamente, entonces su sistema nunca generará GUID duplicados.

Si todos en el mundo que están generando GUID siguen esas reglas, entonces sus GUID serán globalmente únicos.

En la práctica, el número de personas que rompen las reglas es bajo, y es poco probable que sus GUID "escapen". Los conflictos son estadísticamente improbables.

DrPizza
fuente
11
Esto solo sería cierto para las guías v1. El v4, que es la STD de facto, ya no usa direcciones Mac sino un número pseudoaleatorio.
Pita.O
1
"entonces su sistema nunca generará GUID duplicados" Incluso si se siguieran todas las reglas para un guid v1 como usted dice, su sistema aún podría generar duplicados. Es más correcto en la parte inferior cuando dice "Los conflictos son estadísticamente improbables".
Nick Meldrum
3

¿Es un GUID único el 100% del tiempo?

No garantizado, ya que hay varias formas de generar uno. Sin embargo, puede intentar calcular la posibilidad de crear dos GUID que sean idénticos y se le ocurre la idea: un GUID tiene 128 bits, por lo tanto, hay 2 128 GUID distintos, mucho más de lo que hay estrellas en el universo conocido. Lea el artículo de Wikipedia para más detalles.

Konrad Rudolph
fuente
2

En un sentido más general, esto se conoce como el "problema del cumpleaños" o la "paradoja del cumpleaños". Wikipedia tiene una muy buena visión general en: Wikipedia - Problema de cumpleaños

En términos muy generales, la raíz cuadrada del tamaño de la agrupación es una aproximación aproximada de cuándo se puede esperar una probabilidad del 50% de un duplicado. El artículo incluye una tabla de probabilidad del tamaño del grupo y varias probabilidades, incluida una fila para 2 ^ 128. Por lo tanto, para una probabilidad de colisión del 1%, esperaría elegir aleatoriamente 2.6 * 10 ^ 18 números de 128 bits. Una probabilidad del 50% requiere 2.2 * 10 ^ 19 selecciones, mientras que SQRT (2 ^ 128) es 1.8 * 10 ^ 19.

Por supuesto, ese es solo el caso ideal de un proceso verdaderamente aleatorio. Como otros mencionaron, mucho se basa en ese aspecto aleatorio : ¿qué tan bueno es el generador y la semilla? Sería bueno si hubiera algún soporte de hardware para ayudar con este proceso que sería más a prueba de balas, excepto que cualquier cosa puede ser falsificada o virtualizada. Sospecho que esa podría ser la razón por la cual las direcciones MAC / marcas de tiempo ya no se incorporan.

mszil
fuente
Creo que el problema de MAC fue el anonimato. Creo que usar un identificador como una dirección MAC de una manera que podría revertirse era una preocupación de privacidad. Creo que el verdadero azar en el hardware es muy difícil? Cloudflare usa una cámara y una hilera de lámparas de lava, sin embargo, creo que con una comprensión precisa de la física, ¿incluso eso no es aleatorio? Cloudflares lava lamp RNG: popularmechanics.com/technology/security/news/a28921/…
Jeff Block
2

Para obtener un mejor resultado, la mejor manera es agregar el GUID con la marca de tiempo (solo para asegurarse de que permanezca único)

Guid.NewGuid().ToString() + DateTime.Now.ToString();
Adithya Sai
fuente
¿Qué pasa si tienes dos colisiones en el mismo segundo?
Wai Ha Lee
Ese es el peor de los casos, pero aún así, no podemos tener los mismos dos Guid generados al mismo tiempo.
Adithya Sai
En algún lugar argumentan que uno debería copiar la respuesta en SO, no la pregunta, pero ahora no estoy tan seguro ...
Marcel
¿Qué hay de Guid.NewGuid (). ToString (). Reemplazar ("-", "") + DateTime.Now.Ticks .... No es cuestionable sobre la unicidad y se puede utilizar como clave principal
d-coder hace
1

Los algoritmos GUID generalmente se implementan de acuerdo con la especificación GUID v4, que es esencialmente una cadena pseudoaleatoria. Lamentablemente, estos entran en la categoría de "probablemente no únicos" , de Wikipedia (no sé por qué tanta gente ignora este bit): "... otras versiones GUID tienen diferentes propiedades y probabilidades de unicidad, que van desde la unicidad garantizada a probable no unicidad ".

Las propiedades pseudoaleatorias del JavaScript de V8 Math.random()son TERRIBLES en su unicidad, con colisiones a menudo después de solo unos pocos miles de iteraciones, pero V8 no es el único culpable. He visto colisiones de GUID en el mundo real usando implementaciones PHP y Ruby de v4 GUID.

Debido a que se está volviendo cada vez más común escalar la generación de ID en múltiples clientes y grupos de servidores, la entropía tiene un gran éxito: las posibilidades de que se use la misma semilla aleatoria para generar una escalada de ID (el tiempo a menudo se usa como semilla aleatoria en generadores pseudoaleatorios), y las colisiones GUID aumentan de "probable no único" a "muy probable que causen muchos problemas".

Para resolver este problema, me propuse crear un algoritmo de identificación que pudiera escalar de manera segura y ofrecer mejores garantías contra la colisión. Lo hace mediante el uso de la marca de tiempo, un contador de cliente en memoria, huella digital del cliente y caracteres aleatorios. La combinación de factores crea una complejidad aditiva que es particularmente resistente a la colisión, incluso si la escala en varios hosts:

http://usecuid.org/

Eric Elliott
fuente
1

He experimentado que los GUID no son únicos durante las pruebas unitarias multiproceso / multiproceso (¿también?). Supongo que eso tiene que ver con que todas las otras cosas sean iguales, la siembra idéntica (o la falta de siembra) de generadores pseudoaleatorios. Lo estaba usando para generar nombres de archivo únicos. Descubrí que el sistema operativo es mucho mejor para hacerlo :)

Alerta de arrastre

Pregunta si los GUID son 100% únicos. Eso depende de la cantidad de GUID entre los que debe ser único. A medida que el número de GUID se aproxima al infinito, la probabilidad de duplicar GUID se aproxima al 100%.

Robert Jørgensgaard Engdahl
fuente
1

La respuesta de "¿Es un GUID es 100% único?" es simplemente "No" .

  • Si desea 100% de unicidad de GUID, haga lo siguiente.

    1. generar GUID
    2. compruebe si ese GUID existe en la columna de su tabla donde está buscando unicidad
    3. si existe, vaya al paso 1 y al paso 4
    4. use este GUID como único.
Baba Khedkar
fuente
Esto no lo hace único. Su algoritmo no guarda el GUID recién creado en la tabla. La próxima vez que cree un GUID, podría colisionar con uno anterior. Si tuviera que insertar el GUID en la tabla, el GUID ya podría haber sido insertado por otro par entre usted verificó la unicidad e insertó el GUID en la tabla. El GUID solo es único dentro de SU sistema, por lo que si importara o fusionara dos bases de datos, aún podrían colisionar. También los GUID se usan a menudo cuando no tiene acceso a una base de datos centrilizada. Si tenía, ¿por qué no simplemente extraer una ID de la base de datos?
Jogge
0

La parte más difícil no se trata de generar un Guid duplicado.

La parte más difícil es diseñar una base de datos para almacenar todos los generados para verificar si realmente está duplicada.

De WIKI:

Por ejemplo, el número de UUID de versión 4 aleatorios que deben generarse para tener una probabilidad del 50% de al menos una colisión es 2.71 quintillones, calculados de la siguiente manera:

ingrese la descripción de la imagen aquí

Este número es equivalente a generar mil millones de UUID por segundo durante aproximadamente 85 años, y un archivo que contenga tantos UUID, a 16 bytes por UUID, sería de aproximadamente 45 exabytes, muchas veces más grandes que las bases de datos más grandes que existen actualmente. el orden de cientos de petabytes

Trong Hiep Le
fuente
0

GUID significa Global Unique Identifier

En resumen: (la pista está en el nombre)

En detalle: los GUID están diseñados para ser únicos; se calculan utilizando un método aleatorio basado en el reloj de la computadora y la computadora misma, si está creando muchos GUID en el mismo milisegundo en la misma máquina, es posible que coincidan, pero para casi todas las operaciones normales deberían considerarse únicos.

Benjamin Roberts
fuente