Un guide est-il unique 100% du temps?

Est un GUID unique 100% du temps?

restera-t-il unique sur plusieurs fils?

415
demandé sur ljs 2008-09-02 19:17:22

19 réponses

alors que chaque GUID généré n'est pas garantie d'être unique, le total nombre de touches uniques (2^128 ou 3.4×10^38) est si grande que la probabilité d'un même nombre généré deux fois est très petit. Pour exemple, considérons le observables l'univers, qui contient environ 5×10^22 les étoiles; chaque étoile pourrait alors avoir 6.8×10^15 GUIDs universellement uniques.

À Partir De Wikipedia .


ce sont quelques bons articles sur la façon dont un GUID est fait (pour .NET) et comment vous pourriez obtenir le même guid dans la bonne situation.

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

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

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

352
répondu Adam Davis 2015-11-20 01:53:01

la réponse simple est oui.

Raymond Chen a écrit un grand article sur les GUIDs et pourquoi substrats de GUIDs sont pas unique garanti. L'article va dans une certaine profondeur quant à la façon dont les GUIDs sont générés et les données qu'ils utilisent pour assurer l'unicité, qui devrait aller dans une certaine longueur pour expliquer pourquoi ils sont: -)

59
répondu ljs 2008-09-02 15:20:01

si vous avez peur des mêmes valeurs D'orientation, mettez-en deux à côté de l'autre.

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

Si vous êtes trop paranoïaque puis mettre trois.

49
répondu Bura Chuhadar 2014-05-09 18:04:09

comme note latérale, je jouais avec des goupilles de Volume dans Windows XP. C'est une disposition de partition très obscure avec trois disques et quatorze volumes.

\?\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

ce n'est pas que les guides sont très similaires mais le fait que toutes les Guides ont la chaîne" mario " en elles. C'est qu'une coïncidence ou est-il une explication derrière tout cela?

maintenant, quand googler pour la partie 4 dans le GUID j'ai trouvé environ 125.000 hits avec Volume GUIDs.

Conclusion: en ce qui concerne les GUIDs de Volume, ils ne sont pas aussi uniques que les autres GUIDs.

33
répondu Jonas Gulle 2015-01-08 16:28:00

Oui, un guide doit toujours être unique. Il est basé à la fois sur le matériel et le temps, plus quelques bits supplémentaires pour s'assurer qu'il est unique. Je suis sûr qu'il est théoriquement possible d'en avoir deux identiques, mais extrêmement improbable dans un scénario réel.

voici un grand article de Raymond Chen sur Guids:

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

27
répondu Eric Z Beard 2008-09-02 15:19:43

ça ne devrait pas arriver. Cependant, lorsque .NET est soumis à une charge importante, il est possible d'obtenir des gids en double. J'ai deux serveurs web différents utilisant deux serveurs sql différents. J'ai fusionné les données et j'ai trouvé que j'avais 15 millions de guids et 7 doubles.

20
répondu Tim 2010-01-29 23:43:49

Guids sont statistiquement unique. Les chances de deux clients différents générant le même Guid sont infinitésimalement petites (en supposant qu'il n'y a pas de bugs dans le code générant le Guid). Vous pouvez aussi bien vous inquiéter de votre processeur qui vacille à cause d'un rayon cosmique et décider que 2+2=5 aujourd'hui.

plusieurs threads attribuant de nouvelles guids obtiendront des valeurs uniques, mais vous devez vous assurer que la fonction que vous appelez est Sécuritaire. Dans quel environnement est-ce?

19
répondu Rob Walker 2008-09-02 15:21:20

Eric Lippert a écrit une série très intéressante d'articles sur les GUIDs.

il y a sur l'ordre 2 30 ordinateurs personnels dans le monde (et de cours beaucoup de dispositifs portatifs ou de dispositifs informatiques non-PC qui ont plus ou moins les mêmes niveaux de puissance de calcul, mais ignorons de ceux-ci). Supposons que nous mettions tous ces ordinateurs dans le monde tâche de générer des GUIDs; si chacun peut générer, disons, 2 20 GUIDs par deuxième, puis après seulement 2 72 secondes -- cent cinquante trillion années -- vous aurez un très élevé chance de générer un collision avec votre GUID spécifique. Et les chances de collision obtenir plutôt bien après seulement 30 trillions d'années.

16
répondu Paolo Moretti 2012-06-08 14:59:26

Théoriquement, non, ils ne sont pas uniques. Il est possible de générer une image identique encore et encore. Cependant, les chances que cela se produise sont si bas que vous pouvez supposer qu'ils sont uniques.

j'ai lu avant que les chances sont si faibles que vous devriez vraiment insister sur quelque chose d'autre--comme le fait que votre serveur brûle spontanément ou d'autres bogues dans votre code. C'est-à-dire, présumez qu'il est unique et ne construisez pas de code pour "attraper" les doublons--passez votre temps sur quelque chose de plus probable (i.e. anything else).

I a fait une tentative de décrire l'utilité de GUIDs à mon public blog (non-technical family memebers). De là (via Wikipedia), les chances de générer un double GUID:

  • 1 en 2^128
  • 1 340 undecillion (ne vous inquiétez pas, undecillion n'est pas sur la quiz)
  • 1 en 3.4 × 10^38
  • 1 en 340,000,000, 000,000,000, 000,000,000, 000,000,000, 000,000,000
14
répondu Michael Haren 2009-05-07 13:20:38

aucun ne semble mentionner le calcul réel de la probabilité qu'il se produise.

tout d'abord, supposons que nous pouvons utiliser la totalité de l'espace de 128 bits (Guid v4 n'utilise que 122 bits).

nous savons que la probabilité générale de ne pas obtenir un duplicata dans n Pics est:

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

parce que 2 128 est beaucoup plus grand que n , nous pouvons approximer cela à:

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

et parce que nous pouvons supposer que n est beaucoup plus grand que 0, nous pouvons approximer cela à:

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

maintenant nous pouvons assimiler cela à la probabilité "acceptable", disons 1%:

(1-1/2 128 ) n^2/2 = 0,01

que nous résolvons pour n et obtenir:

n = sqrt (2 * log 0,01 / log (1-1/2 128 ))

qui Wolfram Alpha va être 5.598318 × 10 19

pour mettre ce nombre en perspective, prenons 10000 machines, chacune ayant un CPU 4 core, faisant 4Ghz et dépensant 10000 cycles pour générer un Guid et ne faisant rien d'autre. Il faudrait alors ~111 ans avant qu'ils ne génèrent un double.

7
répondu Cine 2017-06-02 03:14:20

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

Qu'est-ce qu'un guide?

GUID (ou UUID) est un acronyme pour 'Globally Unique Identifier' (ou 'Universally Unique Identifier'). Il s'agit d'un nombre entier de 128 bits utilisé pour identifier les ressources. Le terme GUID est généralement utilisé par les développeurs travaillant avec les technologies Microsoft, alors que L'UUID est utilisé partout ailleurs.

Quelle est l'originalité d'un guide?

128 bits est assez grand et l'algorithme de génération est assez unique que si 1.000.000.000 GUIDs par seconde ont été générés pendant 1 an la probabilité d'un duplicata serait seulement 50%. Ou si chaque humain sur terre générait 600 000 000 de GUIDs, il n'y aurait qu'une probabilité de 50% de dupliquer.

6
répondu Tono Nam 2016-01-15 08:34:13

j'ai eu un double GUID.

j'utilise le scanner de bureau de recettes soigné et il est livré avec le logiciel de base de données propriétaire. Le logiciel a une fonction sync to cloud, et j'ai continué à avoir une erreur lors de la synchronisation. Un coup d'oeil aux logs a révélé la ligne impressionnante:

"erreurs": [{"- code":1,"message":"creator_guid: est déjà taken", "guid": "C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}

j'étais un peu incrédule, mais certainement assez, quand j'ai trouvé un chemin dans ma base de données locale de neatworks et supprimé l'enregistrement contenant cette interface, l'erreur a cessé de se produire.

donc pour répondre à votre question avec des preuves anecdotiques, Non. Un duplicata est possible. Mais il est probable que la raison pour laquelle cela s'est produit n'était pas due au hasard, mais au fait que la pratique habituelle n'a pas été respectée d'une manière ou d'une autre. (Je ne suis pas si chanceux) cependant, je ne peux pas le dire avec certitude. Ce n'est pas mon logiciel.

leur soutien à la clientèle était extrêmement courtois et serviable, mais ils n'ont jamais dû rencontrer ce problème avant parce qu'après 3+ heures au téléphone avec eux, ils n'ont pas trouvé la solution. (FWIW, je suis très impressionné par Soignée, et ce glitch, cependant frustrant, n'est-ce pas modifier mon opinion de leur produit.)

5
répondu exintrovert 2015-07-22 10:42:22

si votre horloge système est réglée correctement et ne s'est pas enrayée, et si votre NIC a son propre MAC (c'est-à-dire que vous n'avez pas configuré de Mac personnalisé) et que votre vendeur NIC n'a pas recyclé de Mac (ce qu'ils ne sont pas censés faire mais qui a été connu pour se produire), et si la fonction de génération de GUID de votre système est correctement implémentée, alors votre système ne générera jamais de GUID en double.

si tout le monde sur Terre qui produit des GUIDs suit ces règles alors vos GUIDs sera unique au monde.

dans la pratique, le nombre de personnes qui enfreignent les règles est faible, et leurs suppositions sont peu susceptibles de"s'échapper". Les conflits sont statistiquement improbables.

4
répondu DrPizza 2008-09-02 16:16:20

MSDN :

il y a une très faible probabilité que la valeur de la nouvelle Guid soit égale à tous les zéros ou à toute autre Guid.

3
répondu Jakub Šturc 2008-09-02 15:20:10

Est un GUID unique 100% du temps?

non garanti, car il existe plusieurs façons d'en générer un. Cependant, vous pouvez essayer de calculer la chance de créer deux GUIDs qui sont identiques et vous obtenez l'idée: un GUID a 128 bits, donc, il ya 2 128 GUIDs distincts – beaucoup plus qu'il ya des étoiles dans l'univers connu. Lire l'article wikipedia pour plus de détails.

3
répondu Konrad Rudolph 2008-09-02 15:20:44

j'ai éprouvé les GUIDs n'étant pas unique lors de multi-threaded / multi-process unit-testing (too?). Je suppose que cela a à voir avec, toutes les autres choses étant égales, le semis identique (ou l'absence de semis) de pseudo générateurs aléatoires. Je l'utilisais pour générer des noms de fichiers uniques. J'ai trouvé l'OS est beaucoup mieux à faire :)

à la Traîne "alerte 151930920"

vous demandez si les GUIDs sont 100% uniques. Cela dépend du nombre de Guid il doit être unique parmi les. Comme le nombre de GUIDs approche l'infini, la probabilité pour les GUIDs doubles approche 100%.

1
répondu Robert Jørgensgaard Engdahl 2017-08-24 13:28:40

Dans un sens plus général, ce qui est connu comme le "problème d'anniversaire" ou "paradoxe d'anniversaire". Wikipedia a un assez bon aperçu à: Wikipedia - Problème D'Anniversaire

En très approximativement, la racine carrée de la taille de la piscine est une approximation de quand vous pouvez vous attendre une chance de 50% d'un duplicata. L'article inclut un tableau de probabilité de la taille de la piscine et de diverses probabilités, y compris une rangée pour 2^128. Donc pour une probabilité de 1% de collision vous vous attendriez à choisir au hasard 2,6*10^18 numéros de 128 bits. Une chance de 50% nécessite 2,2*10^19 pics, tandis que la SQRT(2^128) est de 1,8*10^19.

bien sûr, c'est juste le cas idéal d'un véritable processus aléatoire. Comme d'autres l'ont mentionné, beaucoup de choses dépendent de l'aspect aléatoire - à quel point le générateur et la graine sont-ils bons? Ce serait bien s'il y avait un support matériel pour aider à ce processus qui serait plus à l'épreuve des balles sauf que tout peut être mystifié ou virtualisé. Je soupçonne que c'est peut-être la raison pour laquelle les adresses/horodatage MAC ne sont plus incorporés.

1
répondu mszil 2017-09-22 01:08:26

les algorithmes GUID sont généralement implémentés selon la spécification GUID v4, qui est essentiellement une chaîne pseudo-aléatoire. Malheureusement, ceux-ci tombent dans la catégorie de "probablement non-unique" , de Wikipedia (Je ne sais pas pourquoi tant de gens ignorent ce peu): "... les autres versions ont des propriétés et des probabilités d'unicité différentes, allant de l'unicité garantie à l'unicité probable."

les propriétés pseudo-aléatoires de V8 JavaScript Math.random() sont terribles à unicité, avec des collisions souvent après seulement quelques milliers d'itérations, mais V8 n'est pas le seul coupable. J'ai vu des collisions de GUID dans le monde réel utilisant des implémentations PHP et Ruby de GUID v4.

parce qu'il est de plus en plus courant de mettre à l'échelle la génération D'ID à travers plusieurs clients, et des groupes de serveurs, entropy prend un grand coup -- les chances de la même graine aléatoire étant utilisé pour générer un ID escalade (le temps est souvent utilisé comme une graine aléatoire dans les générateurs pseudo-aléatoires), et les collisions de type GUID vont de "probablement non unique" à "très susceptible de causer beaucoup de problèmes".

pour résoudre ce problème, j'ai entrepris de créer un algorithme D'ID qui pourrait se dimensionner en toute sécurité, et faire de meilleures garanties contre les collisions. Pour ce faire, il utilise l'horodatage, un compteur client en mémoire, l'empreinte digitale du client et des caractères aléatoires. La combinaison de facteurs crée une complexité additive qui est particulièrement résistant à la collision, même si vous l'échelle sur un certain nombre d'hôtes:

http://usecuid.org /

0
répondu Eric Elliott 2013-06-27 06:39:05

La Réponse de "Est un GUID est 100% unique?" est tout simplement "Non" .

  • Si Vous voulez 100% d'unicité de GUID puis faites suivant.

    1. generate GUID
    2. vérifiez si ce GUID existe dans votre colonne de table où vous cherchez uniquensess
    3. s'il existe, passez à l'étape 1 sinon étape 4
    4. utilisation ce GUID unique.
0
répondu Baba Khedkar 2018-08-14 11:55:37