Un GUID è unico al 100% delle volte?


519

Un GUID è unico al 100% delle volte?

Rimarrà unico su più thread?


265
No, non 100% ... Solo 99.9999999999999999999999999999999999999999999999999999999999999999999999999999999%;)
JohannesH,

52
Prima di tutto, un GUID non è infinito, il che significa che per il significato letterale di "100% delle volte", significherebbe che, indipendentemente da quanto continui a generare GUID, sarebbero sempre unici. Questo non è il caso. Inoltre, dall'implementazione originale, in cui la scheda di rete univoca seriale / id / MAC è stata utilizzata per produrre una parte della chiave non viene più utilizzata, per vari motivi, un GUID non è più univoco a livello globale . È, tuttavia, localmente unico. In altre parole, se continui a generare GUID su un singolo computer, non otterrai duplicati.
Lasse V. Karlsen,

36
@ojrac Ho appena scelto di arrotondare per difetto ...: P
JohannesH,

403
Ogni volta che generi GUID mi sento come se stessi rubando uno dall'Universo. A volte penso alle persone malvagie che generano molti più GUID di quelli di cui hanno bisogno e quei GUID sprecati sono così soli che non vengono usati o generati di nuovo ...
asavartsov

29
@asavartsov Penso che ti piacerà wasteaguid.info ^ _ ^
Navin

Risposte:


431

Sebbene non sia garantito che ciascun GUID generato sia univoco, il numero totale di chiavi univoche (2 128 o 3,4 × 10 38 ) è così elevato che la probabilità che lo stesso numero venga generato due volte è molto piccola. Ad esempio, considera l'universo osservabile, che contiene circa 5 × 10 22 stelle; ogni stella potrebbe quindi avere 6,8 × 10 15 GUID universalmente unici.

Da Wikipedia .


Questi sono alcuni buoni articoli su come viene realizzato un GUID (per .NET) e su come ottenere la stessa guida nella giusta situazione.

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/

​​


115
Non sarebbero chiamati UUID, allora? ;)
Arafangion

28
Un GUID è l'implementazione specifica di Microsoft dello standard UUID. Quindi è entrambi. ID univoco globale vs ID univoco universale.
Adam Davis,

40
Tecnicamente, non è 2 ^ 128, perché in un GUID v4, hai una cifra esadecimale che sarà sempre un 4 (rimuovendo effettivamente 4 bit), e due bit più avanti sono riservati. Tuttavia, 2 ^ 122 GUID V4 validi lasciano ancora circa 5x10 ^ 36, cosa che farà per me. e anche per te. Ogni stella dovrà accettare circa 1.1x10 ^ 14 GUID ciascuno.
Andrew Shelansky,

67
Se siete come me, allora si vorrà sapere che 2^128scritto fuori è di circa: 34,028,236,692,093,846,346,337,460,743,177,000,000. Statisticamente, se calcolassi 1000 GUID al secondo, occorrerebbero comunque trilioni di anni per ottenere un duplicato.
Entità

26
Ho appena pensato che fosse divertente leggerlo così qui divertiti ragazzi :) Trentaquattro undecilioni venti otto decilioni duecento trenta sei nonillion seicento novanta due ottanta novanta tre settilioni ottocento quaranta sei sextillion trecento quaranta sei quintilioni trecento trenta sette quadrilioni quattrocentosessanta trilioni settecentoquaranta tre miliardi centosettantasette milioni
hjavaher,

85

Se hai paura degli stessi valori GUID, mettine due uno accanto all'altro.

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

Se sei troppo paranoico, mettine tre.


64
Devi essere molto, molto, molto paranoico per aggiungere 3 GUID.
Harsimranb,

25
@harsimranb No ... molto, molto, molto, molto paranoico è 6 GUID. Paranoid è uno aggiunto, molto paranoico è due aggiunti, ecc.
Suamere,

37
@Suamere Ho creato un sito Web per calcolare il tuo livello paranoico jogge.github.io/HowParanoidAmI
Jogge

3
@Jogge xD È incredibile, lol. Dopo 9 9 999999999nella tua forma, penso che Paranoia farà esplodere il mio browser.
Suamere,

66

La semplice risposta è sì.

Raymond Chen ha scritto un ottimo articolo sui GUID e sul perché le sottostringhe dei GUID non sono garantite come uniche. L'articolo approfondisce il modo in cui i GUID vengono generati e i dati che usano per garantire unicità, che dovrebbe andare oltre spiegando perché sono :-)


23
Penso che l'articolo di Chen si riferisca a V1 dell'algoritmo di generazione GUID, che utilizza un indirizzo MAC e un timestamp - l'attuale V4 utilizza invece un numero pseudo-casuale: en.wikipedia.org/wiki/Globally_Unique_Identifier#Algorithm
Barrett

2
il collegamento è morto - 403 proibito
daya


39

Come nota a margine, stavo giocando con i GUID del volume in Windows XP. Questo è un layout di partizione molto oscuro con tre dischi e quattordici volumi.

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

Non è che i GUID siano molto simili, ma il fatto che tutti i GUID contengano la stringa "mario". È una coincidenza o c'è una spiegazione dietro questo?

Ora, quando ho cercato su Google per la parte 4 nel GUID ho trovato circa 125.000 hit con i GUID di volume.

Conclusione: quando si tratta di GUID del volume non sono così unici come altri GUID.


31
Ricordi quella pubblicità di Super Mario Bros 3 degli anni '80? Tutte quelle persone che urlano "Mario! Mario! Mario!" in tutto il mondo sconvolge un po 'la casualità dell'universo.
MGOwen,

24
Se si disinstalla manualmente Office 2010 con msiexec, vengono elencati tutti i GUID MSI del programma Office. Tutti si incantano 0FF1CE. Sembra che Microsoft abbia un'interpretazione abbastanza ... libera di come generare un GUID;)
Mark Henderson

3
Questi GUID di partizione sono stati tutti creati insieme il 17/12/2009 alle 14:47:45 UTC. Sono unici per la tua macchina, ma mettere "mario" come identificativo del nodo non è corretto - significa che non sono conformi a RFC-4122. Allo stesso modo, i 0FF1CEGUID rientrano nella sezione "Compatibilità con le versioni precedenti NCS" di RFC-4122, ma è improbabile che Microsoft stia seguendo le regole NCS per tali valori.
Stephen Cleary,

16
Lo sapevo, la Nintendo Security Administration ha compromesso i generatori di numeri casuali.
MetaGuru,

1
forse è lo stesso parco di palline del nome dell'azienda che produceva un'acqua minerale (ho sentito che guidano il mercato) Evian. Il farro all'indietro dà Naive :-)
Mariusz il

31

Non dovrebbe succedere. Tuttavia, quando .NET è sottoposto a un carico pesante, è possibile ottenere guide duplicate. Ho due diversi server Web che utilizzano due diversi server SQL. Sono andato a unire i dati e ho scoperto che avevo 15 milioni di guide e 7 duplicati.


1
Come è possibile su due macchine diverse? Pensavo che parte del GUID fosse il nome della macchina? (non discutere ... sto solo chiedendo)
John Cruz,

8
Questo sarebbe vero solo per le guide v1 che usano indirizzi MAC (non il nome della macchina) come parte della generazione GUID. La v4, che è di fatto l'STD, non utilizza più indirizzi Mac ma un numero pseudo casuale.
Xander,

14
Guid.NewGuidgenera sempre GUID v4 (e ha sempre). Tim deve aver avuto fonti di entropia estremamente povere.
Stephen Cleary,

1
È mai stato replicato? questo è un grosso problema se è il caso.
Zyo,

1
Lo stesso qui durante l'importazione di set di dati molto grandi. Da circa 10-100 milioni si ottengono duplicati da Guid.NewGuid
Stephan Baltzer

28

Sì, un GUID dovrebbe essere sempre unico. Si basa sia sull'hardware che sul tempo, oltre a qualche bit in più per assicurarsi che sia unico. Sono sicuro che teoricamente è possibile finire con due identici, ma estremamente improbabili in uno scenario del mondo reale.

Ecco un ottimo articolo di Raymond Chen su Guids:

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


5
Questo articolo è piuttosto vecchio e si riferisce alla v1 dei GUID. v4 non utilizza hardware / tempo ma un algoritmo di numeri casuali. en.wikipedia.org/wiki/Globally_unique_identifier#Algorithm
Mani Gandham

Questo collegamento è interrotto
Marcel il


23

Le guide sono statisticamente uniche. Le probabilità di due client diversi che generano lo stesso Guid sono infinitamente piccole (supponendo che non vi siano errori nel codice di generazione Guid). Potresti anche preoccuparti del glitch del tuo processore a causa di un raggio cosmico e decidere che 2 + 2 = 5 oggi.

Più thread che assegnano nuove guide otterranno valori univoci, ma dovresti ottenere che la funzione che stai chiamando è thread-safe. In quale ambiente si trova?


19

Eric Lippert ha scritto una serie molto interessante di articoli sui GUID.

Ci sono nell'ordine 2 30 personal computer nel mondo (e ovviamente molti dispositivi portatili o dispositivi informatici non PC che hanno più o meno gli stessi livelli di potenza di calcolo, ma lasciano ignorare quelli). Supponiamo che mettiamo tutti quei PC nel mondo al compito di generare GUID; se ognuno può generare, ad esempio, 2 20 GUID al secondo, quindi dopo solo circa 2 72 secondi - centocinquanta trilioni di anni - avrai un'altissima probabilità di generare una collisione con il tuo GUID specifico. E le probabilità di collisione diventano piuttosto buone dopo solo trenta trilioni di anni.


28
... e continua nel prossimo paragrafo: "Ma questo è alla ricerca di una collisione con un GUID specifico. [...] Quindi se mettessimo al lavoro quei miliardi di PC generando GUID a 122 bit di casualità, la probabilità che due di loro da qualche parte lì dentro si scontrerebbero molto in alto dopo che sono stati generati circa 2 ^ 61 GUID. Dato che supponiamo che circa 2 ^ 30 macchine stiano eseguendo 2 ^ 20 GUID al secondo, ci aspetteremmo una collisione dopo circa 2 ^ 11 secondi, che è di circa un'ora ". (E infine spiega che, naturalmente, non vengono generati molti GUID.)
Arjan,

16

Teoricamente no, non sono unici. È possibile generare più volte una guida identica. Tuttavia, le probabilità che ciò accada sono così basse che si può presumere che siano uniche.

Ho già letto che le probabilità sono così basse che dovresti davvero sottolineare qualcos'altro - come il tuo server che combatte spontaneamente o altri bug nel tuo codice. Cioè, supponiamo che sia univoco e non incorporare alcun codice per "catturare" i duplicati: trascorri il tuo tempo in qualcosa di più probabile che accada (cioè qualsiasi altra cosa ).

Ho tentato di descrivere l'utilità dei GUID al pubblico del mio blog (membri della famiglia non tecnici). Da lì (tramite Wikipedia), le probabilità di generare un GUID duplicato:

  • 1 in 2 ^ 128
  • 1 su 340 undecilioni (non preoccuparti, undecillion non è presente nel quiz)
  • 1 in 3,4 × 10 ^ 38
  • 1 su 340.000.000.000.000.000.000.000.000.000.000.000.000.000

1
In realtà, non sono d'accordo sul "non preoccuparti", sebbene da una posizione diversa: se rilevi una collisione GUID, allora qualcosa è andato storto con la tua applicazione. Ho usato i GUID, ad esempio, per idempotenza e ho avuto una collisione quando un comando è stato inviato due volte (con lo stesso GUID).
Kenny Hung,

9

Nessuno sembra menzionare l'effettiva matematica della probabilità che si verifichi.

Innanzitutto, supponiamo di poter utilizzare l'intero spazio a 128 bit (Guid v4 utilizza solo 122 bit).

Sappiamo che la probabilità generale di NON ottenere un duplicato nelle nscelte è:

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

Poiché 2 128 è molto più grande di n, possiamo approssimare questo a:

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

E poiché possiamo supporre che nsia molto più grande di 0, possiamo approssimare che a:

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

Ora possiamo equiparare questo alla probabilità "accettabile", diciamo l'1%:

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

Che risolviamo ne otteniamo:

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

Quale Wolfram Alpha diventa 5,598318 × 10 19

Per mettere quel numero in prospettiva, prendiamo 10000 macchine, ognuna con una CPU a 4 core, facendo 4Ghz e spendendo 10000 cicli per generare un Guid e non fare nient'altro. Ci vorrebbero quindi ~ 111 anni prima di generare un duplicato.


Ho modificato il tuo post seguendo questo post - per favore modifica se ho fatto un errore;).
shA.t

Ciao @Cine, ho il potere di modificare la tua risposta, ma ho deciso di non farlo perché voglio avere la possibilità che tu la confuti prima, probabilmente passerò tra un mese per cambiarla formalmente se non lo faccio ' non ho tue notizie Sono abbastanza certo che la tua matematica sia sbagliata però. l'equazione reale per determinare una probabilità dell'1% è questa: ((2 ^ 128 - 1) / 2 ^ 128) ^ ((n (n-1)) / 2) = .01. Il tuo esponente è sbagliato. non è solo n. È necessario C (n, 2) (aka (n * (n-1)) / 2) per calcolare tutte le combinazioni quando si generano guide "n". Vedi qui per maggiori informazioni
vigore

Grazie Cine, anch'io ho finito per approssimarmi n ^
2/2

Occorrerebbero 10000 macchine per 111 anni per generare ogni singolo GUID possibile, e quindi generare un duplicato. Un duplicato si verificherebbe comunque molto prima che tutti i possibili GUID siano stati generati. Penso che il lasso di tempo approssimativo dipenda da quanto 'casuale' il processo di generazione del GUID.
George K,

@GeorgeK Penso che tu abbia frainteso ... Ci sarebbero volute 10000 macchine per 111 anni per avere l'1% di probabilità di incontrare un duplicato. Ma sì, questa matematica presuppone che il generatore casuale sia totalmente casuale.
Cine

7

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

Che cos'è un GUID?

GUID (o UUID) è un acronimo di "Identificatore univoco globale" (o "Identificatore univoco universale"). È un numero intero a 128 bit utilizzato per identificare le risorse. Il termine GUID viene generalmente utilizzato dagli sviluppatori che lavorano con le tecnologie Microsoft, mentre UUID viene utilizzato ovunque.

Quanto è unico un GUID?

128 bit è abbastanza grande e l'algoritmo di generazione è abbastanza unico che se 1 milione e 1.000.000 di GUID al secondo fossero generati per 1 anno la probabilità di un duplicato sarebbe solo del 50%. O se ogni essere umano sulla Terra generasse 600.000.000 di GUID ci sarebbe solo una probabilità del 50% di un duplicato.


7
non c'è una probabilità del 50% di un duplicato abbastanza alto da causare paura?
disklosr,

1
@disklosr sì, è sufficiente causare paura se i tuoi sistemi generano 1 miliardo di GUID al secondo. Nel caso estremamente improbabile in cui stai generando tale importo, fai semplicemente incatenare due GUID ...
maxshuty

5

Ho riscontrato un GUID duplicato.

Uso lo scanner desktop Neat Receipts e viene fornito con un software di database proprietario. Il software ha una funzione di sincronizzazione con il cloud e ho continuato a ricevere un errore durante la sincronizzazione. Uno sguardo ai tronchi ha rivelato la linea fantastica:

"errori": [{"codice": 1, "messaggio": "creator_guid: is già ripreso", "guid": "C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}

Ero un po 'incredulo, ma sicuramente abbastanza, quando ho trovato un modo nel mio database neatworks locale e cancellato il record contenente quel GUID, l'errore ha smesso di verificarsi.

Quindi, per rispondere alla tua domanda con prove aneddotiche, no. Un duplicato è possibile. Ma è probabile che la ragione per cui è accaduto non fosse dovuta al caso, ma a causa della pratica standard non rispettata in alcun modo. (Non sono così fortunato) Tuttavia, non posso dirlo con certezza. Non è il mio software.

Il loro supporto clienti è stato ESTREMAMENTE cortese e disponibile, ma non hanno mai riscontrato questo problema prima perché dopo 3+ ore al telefono con loro, non hanno trovato la soluzione. (FWIW, sono molto colpito da Neat, e questo problema tecnico, per quanto frustrante, non ha cambiato la mia opinione sul loro prodotto.)


19
Non credere di avere un duplicato. Probabilmente c'era qualcos'altro coinvolto, come il numero non era davvero casuale o problema nel processo di sincronizzazione, o il sistema ha provato a registrare due volte, ecc. Un problema software è molto più probabile di te che ottieni un GUID duplicato.
orad,

4

MSDN :

C'è una probabilità molto bassa che il valore del nuovo Guid sia pari a zero o uguale a qualsiasi altro Guid.


4

Se l'orologio di sistema è impostato correttamente e non si è spostato e se la scheda di rete ha il proprio MAC (ovvero non è stato impostato un MAC personalizzato) e il fornitore della scheda di rete non ha riciclato i MAC (cosa che non dovrebbero fare ma è noto che si verifica) e se la funzione di generazione GUID del sistema è implementata correttamente, il sistema non genererà mai GUID duplicati.

Se tutti coloro che stanno generando GUID seguono queste regole, i tuoi GUID saranno univoci a livello globale.

In pratica, il numero di persone che infrangono le regole è basso e è improbabile che i loro GUID "scappino". I conflitti sono statisticamente improbabili.


11
Questo sarebbe vero solo per le guide v1. La v4, che è di fatto l'STD, non utilizza più indirizzi Mac ma un numero pseudo casuale.
Pita.O,

1
"allora il tuo sistema non genererà mai GUID duplicati" Anche se tutte le regole sono state seguite per una guida v1 come dici tu, il tuo sistema potrebbe comunque generare duplicati. Sei più corretto in fondo quando affermi "I conflitti sono statisticamente improbabili".
Nick Meldrum,

3

Un GUID è unico al 100% delle volte?

Non garantito, poiché esistono diversi modi per generarne uno. Tuttavia, puoi provare a calcolare la possibilità di creare due GUID identici e ottieni l'idea: un GUID ha 128 bit, quindi ci sono 2 128 GUID distinti, molto più di quanto ci siano stelle nell'universo noto. Leggi l' articolo di Wikipedia per maggiori dettagli.


2

In senso più generale, questo è noto come "problema del compleanno" o "paradosso del compleanno". Wikipedia ha una buona panoramica su: Wikipedia - Compleanno Problema

In termini molto approssimativi, la radice quadrata della dimensione del pool è una approssimazione approssimativa di quando ci si può aspettare una probabilità del 50% di un duplicato. L'articolo include una tabella di probabilità delle dimensioni del pool e varie probabilità, inclusa una riga per 2 ^ 128. Quindi, per una probabilità dell'1% di collisione, ti aspetteresti di scegliere casualmente numeri 2.6 * 10 ^ 18 a 128 bit. Una probabilità del 50% richiede 2,2 * 10 ^ 19 scelte, mentre SQRT (2 ^ 128) è 1,8 * 10 ^ 19.

Naturalmente, questo è solo il caso ideale di un processo veramente casuale. Come altri hanno già detto, molto sta cavalcando quell'aspetto casuale - quanto è buono il generatore e il seme? Sarebbe bello se ci fosse un po 'di supporto hardware per aiutare con questo processo che sarebbe più a prova di proiettile, tranne per il fatto che qualsiasi cosa può essere falsificata o virtualizzata. Ho il sospetto che questo potrebbe essere il motivo per cui gli indirizzi MAC / i timestamp non sono più incorporati.


Penso che il problema MAC fosse l'anonimato. Credo che l'utilizzo di un identificatore come un indirizzo MAC in un modo che possa essere invertito sia stato un problema di privacy. Credo che il vero random nell'hardware sia molto difficile? Cloudflare usa una macchina fotografica e una fila di lampade laviche, tuttavia penso che con una comprensione precisa della fisica, anche questo non è casuale? Lampada lava Cloudflares RNG: popularmechanics.com/technology/security/news/a28921/…
Jeff Block,

2

Per ottenere risultati migliori, il modo migliore è aggiungere il GUID con il timestamp (solo per assicurarsi che rimanga unico)

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

Cosa succede se si verificano due collisioni nello stesso secondo?
Wai Ha Lee,

Questo è il caso peggiore, ma non possiamo avere gli stessi due Guid generati contemporaneamente.
Adithya Sai,

Da qualche parte sostengono che si dovrebbe copiare dalla risposta su SO, non dalla domanda, ma non ne sono così sicuro ora ....
Marcel,

Che ne dici di Guid.NewGuid (). ToString (). Replace ("-", "") + DateTime.Now.Ticks .... Non discutibile di unicità e può essere usato come chiave primaria
d-coder

1

Gli algoritmi GUID sono generalmente implementati secondo la specifica GUID v4, che è essenzialmente una stringa pseudo-casuale. Purtroppo, questi rientrano nella categoria di "probabilmente non unico" , da Wikipedia (non so perché così tante persone ignorino questo bit): "... altre versioni GUID hanno proprietà e probabilità di unicità diverse, che vanno dall'unicità garantita alla probabile non unicità ".

Le proprietà pseudo-casuali del JavaScript di V8 Math.random()sono TERRIBILI all'unicità, con le collisioni spesso dopo poche migliaia di iterazioni, ma V8 non è l'unico colpevole. Ho visto collisioni GUID del mondo reale utilizzando entrambe le implementazioni PHP e Ruby dei GUID v4.

Poiché sta diventando sempre più comune ridimensionare la generazione di ID su più client e cluster di server, l'entropia subisce un grande successo: le probabilità che lo stesso seed casuale venga utilizzato per generare un escalation di ID (il tempo viene spesso utilizzato come seed casuale nei generatori pseudo-casuali) e le collisioni GUID passano da "probabilmente non univoci" a "molto probabilmente a causare molti problemi".

Per risolvere questo problema, ho deciso di creare un algoritmo ID che potesse ridimensionare in modo sicuro e offrire migliori garanzie contro la collisione. Lo fa utilizzando il timestamp, un contatore client in memoria, l'impronta digitale del client e caratteri casuali. La combinazione di fattori crea una complessità additiva particolarmente resistente alle collisioni, anche se la ridimensionate su un numero di host:

http://usecuid.org/


1

Ho riscontrato che i GUID non sono unici durante i test unitari multi-thread / multi-processo (anche?). Immagino che abbia a che fare con tutte le altre cose uguali, lo stesso seeding (o mancanza di seeding) di generatori pseudo casuali. Lo stavo usando per generare nomi di file univoci. Ho scoperto che il sistema operativo è molto meglio nel farlo :)

Avviso di pesca alla traina

Chiedete se i GUID sono unici al 100%. Dipende dal numero di GUID di cui deve essere unico. Man mano che il numero di GUID si avvicina all'infinito, la probabilità di GUID duplicati si avvicina al 100%.


1

La risposta di "Is GUID è unica al 100%?" è semplicemente "No" .

  • Se si desidera il 100% di unicità del GUID, procedere come segue.

    1. genera GUID
    2. controlla se quel GUID è presente nella colonna della tabella in cui stai cercando l'univocità
    3. se esiste, vai al passaggio 1, altrimenti al passaggio 4
    4. usa questo GUID come unico.

Questo non lo rende unico. L'algoritmo non salva il GUID appena creato nella tabella. La prossima volta che crei un GUID, potrebbe scontrarsi con uno prima. Se si dovesse inserire il GUID nella tabella, il GUID potrebbe essere già stato inserito da un altro peer tra il controllo di unicità e l'inserimento del GUID nella tabella. Il GUID è unico nel tuo sistema, quindi se dovessi importare o unire due database potrebbero comunque scontrarsi. Anche i GUID vengono spesso utilizzati quando non si ha accesso a un database centralizzato. Se avessi perché non estrarre un ID dal database?
Jogge,

0

La parte più difficile non riguarda la generazione di una guida duplicata.

La parte più difficile è un database progettato per memorizzare tutti quelli generati per verificare se è effettivamente duplicato.

Da WIKI:

Ad esempio, il numero di UUID casuali della versione 4 che devono essere generati per avere una probabilità del 50% di almeno una collisione è di 2,71 quintilioni, calcolato come segue:

inserisci qui la descrizione dell'immagine

Questo numero equivale a generare 1 miliardo di UUID al secondo per circa 85 anni e un file contenente così tanti UUID, a 16 byte per UUID, sarebbe di circa 45 exabyte, molte volte più grande dei più grandi database attualmente esistenti, che sono attivi l'ordine di centinaia di petabyte


0

GUID è l'acronimo di Global Unique Identifier

In breve: (l'indizio è nel nome)

Nel dettaglio: i GUID sono progettati per essere unici; vengono calcolati utilizzando un metodo casuale basato sull'orologio e sul computer stesso, se si stanno creando molti GUID allo stesso millisecondo sullo stesso computer, è possibile che possano corrispondere, ma per quasi tutte le normali operazioni dovrebbero essere considerati unici.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.