Est-il sûr de supposer qu’un GUID sera toujours unique?

Je sais qu’il y a une possibilité infime de conflit mais si je génère un lot de 1000 GUID (par exemple), serait-il sûr de supposer qu’ils sont tous uniques pour sauver chacun des tests?

Question bonus

Une façon optimale de tester un GUID pour l’unicité? Filtre Bloom peut-être?

Oui, vous pouvez. Comme les GUID ont une longueur de 128 bits, il y a certes une minuscule possibilité de conflit – mais le mot “minute” est loin d’être assez fort. Il y a tellement de GUID que si vous en générez plusieurs milliards au hasard, vous êtes toujours plus susceptible d’être touché par une météorite que d’avoir une seule collision (à partir de Wikipedia ). Et si vous ne les générez pas au hasard, mais utilisez par exemple l’algorithme MAC-address-and-time-stamp, ils seront également uniques, car les adresses MAC sont uniques parmi les ordinateurs et les horodatages sont uniques sur votre ordinateur . ordinateur.

Édition 1: Pour répondre à votre question sur les bonus, le meilleur moyen de tester un ensemble de GUID pour l’unicité est de supposer qu’ils sont tous uniques. Pourquoi? Étant donné le nombre de GUID que vous générez, les probabilités d’une collision de GUID sont plus petites que les chances qu’un rayon cosmique se retourne un peu dans la mémoire de votre ordinateur et gâchent la réponse donnée par un algorithme “précis” courir. (Voir cette réponse StackOverflow pour le calcul.)

Il existe un nombre énorme de GUID. Pour citer le Guide de l’auto-stoppeur de Douglas Adams sur la galaxie :

“L’espace, dit-il, est grand. Vraiment grand. Vous ne croirez pas à quel point il est énormément énorme. Je pense que vous pensez peut-être que le chimiste est loin, mais ce n’est que de la cacahuète.” , écoute… ”

Et comme il y a environ 7 × 10 22 écanvass dans l’univers et un peu moins de 2 128 GUID, il y a approximativement 4,86 ​​× 10 15 – presque cinq quadrillions – pour chaque écanvas. Si chacune de ces écanvass avait un monde avec une population florissante comme la nôtre, alors, autour de chaque écanvas, chaque humain ou étranger ayant déjà vécu aurait droit à plus de 45 000 GUID. Pour chaque personne dans l’histoire à chaque écanvas de l’univers. L’espace GUID est au même niveau que la taille de l’univers entier. Vous n’avez pas besoin de vous inquiéter.

( Edit 2: Réfléchir à ceci: wow. Je ne m’étais pas rendu compte de ce que cela signifiait. L’espace GUID est incompréhensible. Je suis en quelque sorte impressionné.)

Réponse courte: pour des raisons pratiques, oui.

Cependant, vous devez considérer le paradoxe de l’anniversaire!

J’ai calculé quelques probabilités de collision représentatives. Avec les UUID 122 bits spécifiés dans l’article de Wikipedia , la probabilité de collision est de 1/2 si vous générez au moins 2.71492e18 UUID. Avec 10 ^ 19 UUID, la probabilité est de 0,999918. Avec 10 ^ 17 UUIDs, 0,000939953.

Quelques chiffres pour la comparaison peuvent être trouvés sur Wikipedia. Ainsi, vous pouvez assigner en toute sécurité un UUID à chaque humain qui a vécu, à chaque galaxie de l’univers observable, à chaque poisson de l’océan et à chaque fourmi sur Terre. Cependant , les collisions sont presque certaines si vous générez un UUID pour chaque transistor que l’humanité produit en une année, chaque insecte sur Terre, chaque grain de sable sur Terre, chaque écanvas dans l’univers observable, ou quelque chose de plus grand.

Si vous générez 1 milliard d’UUID par seconde, il faudra environ 36 ans pour obtenir une probabilité de collision de 10%.

À terme, il y aura probablement une collision entre les ensembles d’UUID générés au cours de l’histoire humaine. Cependant, la probabilité que des UUID entrés en collision soient utilisés dans le même but est extrêmement faible, de sorte qu’il n’y a aucun problème dans la pratique.

En général, oui, il est sûr de supposer.

Si votre générateur de GUID est vraiment aléatoire, les possibilités d’un conflit dans 1000 GUID sont extraordinairement faibles.

Bien sûr, cela suppose un bon générateur de GUID. La question est donc de savoir à quel point vous utilisez l’outil que vous utilisez pour générer le GUID et at-il ses propres tests?

Une parsing de la possibilité de collision est disponible sur Wikipedia: http://en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates

Comme mentionné dans le lien, cela sera affecté par les propriétés du générateur de nombres aléatoires.

Il y a aussi la possibilité d’un bug dans le code du générateur GUID; Bien que les chances soient faibles, elles sont probablement plus élevées que les risques de collision basés sur les mathématiques.

Un filtre Bloom peut être approprié. il peut vous dire rapidement si un GUID est unique, mais il y a une possibilité de fausse indication de collision. Si vous testez un lot à la fois, une autre méthode consiste à sortinger le lot et à comparer chaque élément successif.

Bien qu’une collision soit possible, elle est fortement improbable. (Math ici .) Il est prudent de supposer qu’ils sont en fait distincts.

Habituellement, c’est une hypothèse assez sûre.

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

Un GUID est-il unique à 100%?