Est-il sûr de supposer qu'un guide sera toujours unique?

je sais qu'il y a une possibilité infime d'un choc mais si je produisais un lot de 1000 GUIDs (par exemple), serait-il sûr de supposer qu'ils sont tous uniques pour sauver tester chacun d'eux?

question Bonus

une façon optimale de tester un guide d'unicité? Un filtre Bloom peut-être?

89
demandé sur Mechanical snail 2010-06-05 00:30:26

6 réponses

Oui, vous pouvez. Puisque les GUIDs sont de 128 bits de long, il y a certes une possibilité infime d'un affrontement-mais le mot "minute" est loin d'être assez fort. Il ya tant de GUIDs que si vous produisez plusieurs trillions d'entre eux au hasard, vous êtes toujours plus susceptibles de se faire frapper par une météorite que d'avoir ne serait-ce qu'une collision (de Wikipedia ). Et si vous ne les générez pas au hasard, mais sont par exemple en utilisant L'algorithme MAC-address-and-time-stamp, ils vont aussi être uniques, car les adresses MAC sont uniques parmi les ordinateurs et les horodateurs sont uniques sur votre ordinateur.

Edit 1: pour répondre à votre question bonus, la meilleure façon de tester un ensemble de GUIDs pour l'unicité est de simplement supposer qu'ils sont tous uniques. Pourquoi? Parce que, étant donné le nombre de GUIDs que vous générez, les chances d'un GUID les collisions sont plus petites que les chances qu'un rayon cosmique tourne un peu dans la mémoire de votre ordinateur et foute en l'air la réponse donnée par n'importe quel algorithme "précis" que vous voudriez lancer. (Voir cette réponse pour les mathématiques.)

il y a un énorme nombre de GUIDs là-bas. Pour citer Douglas Adams Hitchhiker's Guide to the Galaxy :

"espace," il dit, "est grand. Vraiment grand. Tu ne vas pas croire à quel point c'est immensément énorme. Je veux dire que vous pouvez penser que c'est un long chemin vers la pharmacie, mais c'est juste des cacahuètes dans l'espace, écoutez... "

et puisqu'Il ya environ 7×10 22 étoiles dans l'univers , et un peu moins de 2 128 GUIDs, puis il ya environ 4.86×10 15 -presque cinq quadrillion - GUIDs pour chaque étoile. Si chacune de ces étoiles avait un monde avec une population florissante comme la nôtre, alors autour de chaque étoile, chaque humain ou étranger qui a jamais vécu aurait droit à plus de quarante-cinq mille GUIDs. Pour chaque personne de l'histoire à chaque étoile de l'univers. L'espace D'orientation est au même niveau d'immensité que la taille de l'univers entier. Vous faites pas besoin de s'inquiéter.

( Edit 2: en Réfléchissant sur ce: wow. Je n'avais pas réalisé moi-même ce que cela signifiait. L'espace de guidage est incroyablement massif. Je suis un peu dans la crainte de lui.)

299
répondu Antal Spector-Zabusky 2017-05-23 11:33:26

brève réponse: pour des raisons pratiques, Oui.

Cependant, vous devez considérer le paradoxe d'anniversaire!

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

certains nombres pour comparaison peuvent être trouvés sur Wikipedia. pour que vous puissiez assigner en toute sécurité un UUID pour chaque humain qui a vécu, chaque galaxie dans l'univers observable, chaque poisson dans l'océan, et chaque fourmi individuelle sur terre. cependant , les collisions sont presque certaines Si vous générez un UUID pour chaque transistor que l'humanité produit en un an, chaque insecte sur terre, chaque grain de sable sur terre, chaque étoile dans l'univers observable, ou quelque chose de plus grand.

si vous générez 1 milliard D'UUID par seconde, il faudrait environ 36 ans pour obtenir une probabilité de collision de 10%.

finalement, il y aura probablement une collision entre les UUIDs générés au cours de l'histoire humaine. Néanmoins, la probabilité que les UUIDs percutés seront utilisés dans le même but est de plus en plus faible, il n'y a donc aucun problème dans la pratique.

33
répondu Mechanical snail 2017-05-23 12:26:42

une analyse 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 de GUID; bien que les chances soient faibles, elles sont probablement plus élevées que les chances d'une collision basée sur le mathématique.

un filtre Bloom pourrait être approprié; il peut rapidement vous dire si un GUID est unique, mais il ya une chance pour une fausse indication d'une collision. Une méthode alternative si vous testez un lot à la fois est de trier le lot et de comparer chaque élément successif.

5
répondu Mark Ransom 2010-06-04 21:17:54

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 choc dans un 1000 GUID est extraordinairement petite.

bien sûr, cela suppose un bon générateur de guidage. Donc, la question est vraiment sur combien vous faites confiance à l'outil que vous utilisez pour générer GUID et a-t-il ses propres tests?

5
répondu Haacked 2010-06-04 21:20:23

bien qu'une collision soit possible, elle est très improbable. (Maths ici .) On peut supposer qu'elles sont en fait distinctes.

0
répondu VeeArr 2017-05-23 12:18:34
0
répondu Brad 2017-05-23 11:47:36