Czy GUID jest unikalny w 100%?

Czy GUID jest unikalny w 100%?

Czy pozostanie unikalny w wielu wątkach?

Author: ljs, 2008-09-02

19 answers

Podczas gdy każdy wygenerowany GUID nie jest gwarantujemy wyjątkowość, całość liczba unikalnych kluczy (2^128 lub 3,4×10^38) jest tak duża, że prawdopodobieństwo tej samej liczby jest wygenerowany dwukrotnie jest bardzo mały. Na przykład, rozważmy obserwowalne uniwersum, który zawiera około 5×10^22 Gwiazdy; każda gwiazda może wtedy mieć 6.8×10^15

Z Wikipedii .


Oto kilka dobrych artykułów na temat tworzenia GUID (dla. NET) i jak można uzyskać ten sam guid w odpowiedniej sytuacji.

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
Author: Adam Davis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 01:53:01

Prosta odpowiedź brzmi: tak.

Raymond Chen napisał świetny artykuł na temat GUID i dlaczego podłańcuchy GUID są a nie gwarantowane unikalne. W artykule szczegółowo opisano sposób generowania identyfikatorów GUID i dane, których używają do zapewnienia wyjątkowości, co powinno być nieco dłuższe w wyjaśnianiu Dlaczego są: -)

 59
Author: ljs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 15:20:01

Jeśli boisz się tych samych wartości GUID, umieść dwa z nich obok siebie.

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

Jeśli jesteś zbyt paranoiczny, to umieść trzy.

 49
Author: Bura Chuhadar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-09 18:04:09

Na marginesie, grałem z GUID głośności w Windows XP. Jest to bardzo niejasny układ partycji z trzema dyskami i czternaście woluminów.

\\?\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
Nie chodzi o to, że Guidy są bardzo podobne, ale o to, że wszystkie Guidy mają w sobie napis "mario". Czy to zbieg okoliczności, czy za tym stoi jakieś wyjaśnienie?

Teraz, Kiedy googlowanie dla części 4 W GUID znalazłem około 125.000 odsłon z GUID głośności.

Wniosek: Kiedy przychodzi do GUID Tom nie są tak unikalne jak inne GUID.

 33
Author: Jonas Gulle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-08 16:28:00

Tak, GUID powinien być zawsze unikalny. Jest oparty zarówno na sprzęcie, jak i czasie, a także na kilku dodatkowych bitach, aby upewnić się, że jest wyjątkowy. Jestem pewien, że teoretycznie można skończyć z dwoma identycznymi, ale bardzo mało prawdopodobne w realnym scenariuszu.

Oto świetny artykuł Raymonda Chena o Guidach:

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

 27
Author: Eric Z Beard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 15:19:43

To nie powinno się zdarzyć. Jednak, gdy. NET jest pod dużym obciążeniem, możliwe jest uzyskanie duplikatów GUID. Mam dwa różne serwery www, używające dwóch różnych serwerów sql. Poszedłem połączyć Dane i znalazłem 15 milionów GUID i 7 duplikatów.

 20
Author: Tim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-29 23:43:49

Guidy są statystycznie unikalne. Szanse dwóch różnych klientów generujących ten sam Guid są nieskończenie małe(zakładając brak błędów w kodzie generującym Guid). Równie dobrze możesz martwić się o usterkę procesora z powodu promieniowania kosmicznego i zdecydować, że 2+2=5 dzisiaj.

Wiele wątków przydzielających nowe GUID otrzyma unikalne wartości, ale powinieneś wiedzieć, że funkcja, którą wywołujesz, jest bezpieczna dla wątku. W jakim środowisku to jest?

 19
Author: Rob Walker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 15:21:20

Eric Lippert napisał bardzo interesującą serię artykułów o Guidach.

Są na zamówienie 230 komputerów osobistych na świecie (i z kurs wiele urządzeń ręcznych lub urządzeń komputerowych innych niż PC, które mają mniej więcej taki sam poziom mocy obliczeniowej, ale ignorujmy te). Załóżmy, że umieściliśmy wszystkie te komputery na świecie do zadanie generowania GUID; jeśli każdy z nich może wygenerować, powiedzmy, 220 GUIDs per po drugie potem dopiero po o firmie 272 sekund -- sto pięćdziesiąt bilionów lat -- będziesz miał bardzo dużą szansę na wygenerowanie kolizja z Twoim identyfikatorem GUID. I szanse kolizji się całkiem nieźle po zaledwie 30 bilionach lat.

 16
Author: Paolo Moretti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-08 14:59:26

Teoretycznie nie, nie są unikalne. Możliwe jest generowanie identycznego guid w kółko. Jednak szanse na to są tak niskie, że można założyć, że są wyjątkowe.

Czytałem wcześniej, że szanse są tak niskie, że naprawdę powinieneś się stresować czymś innym-jak spontaniczne spalanie serwera lub inne błędy w kodzie. Oznacza to, że Załóżmy, że jest unikalny i nie buduj w żadnym kodzie, aby "łapać" duplikaty-spędzaj czas na czymś bardziej prawdopodobnym (tj. cokolwiek ).

I podjąłem próbę opisania przydatności GUID dla moich odbiorców bloga (nietechnicznych memeberów rodzinnych). Stąd (za pośrednictwem Wikipedii) szanse na wygenerowanie duplikatu GUID:

  • 1 w 2^128
  • 1 na 340 undecilion (nie martw się, undecilion nie jest na quiz)
  • 1 w 3.4 × 10^38
  • 1 do 340,000,000,000,000,000,000,000,000,000,000,000,000
 14
Author: Michael Haren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-07 13:20:38

Wydaje się, że nikt nie wspomina o rzeczywistej matematyce prawdopodobieństwa jej wystąpienia.

Po pierwsze, załóżmy, że możemy użyć całej 128 bitowej przestrzeni (Guid V4 używa tylko 122 bitów).

Wiemy, że ogólne prawdopodobieństwo Nie otrzymania duplikatu w typach n wynosi:

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

Ponieważ 2128 jest znacznie większa niż n, możemy to przybliżyć do:

(1-1/2128)n (n-1)/2

A ponieważ możemy założyć, że n jest znacznie większe od 0, możemy to przybliżyć do:

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

Teraz możemy to przyrównać do" akceptowalnego " prawdopodobieństwa, powiedzmy 1%:

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

Które rozwiązujemy dla n i otrzymujemy:

N = sqrt(2* log 0.01 / log (1-1/2128))

Jaki Wolfram Alpha ma być 5.598318 × 1019

Aby ująć tę liczbę w perspektywie, przyjmijmy 10000 maszyn, z których każda ma 4-rdzeniowy procesor, robi 4Ghz i spędza 10000 cykli, aby wygenerować Guid i nie robi nic innego. To zajmie ~111 lat, zanim wygenerują duplikat.

 7
Author: Cine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-02 03:14:20

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

Co to jest GUID?

GUID (lub UUID) to skrót od "globalnie niepowtarzalny identyfikator" (lub "uniwersalnie niepowtarzalny identyfikator"). Jest to 128-bitowa liczba całkowita używana do identyfikacji zasobów. Termin GUID jest powszechnie używany przez programistów pracujących z technologiami Microsoft, podczas gdy uuid jest używany wszędzie indziej.

Jak wyjątkowy jest GUID?

128-bit jest duży wystarczy, a algorytm generowania jest na tyle unikalny, że gdyby generowano 1 000 000 000 GUID na sekundę przez 1 rok, prawdopodobieństwo duplikatu wyniosłoby tylko 50%. Albo gdyby każdy człowiek na Ziemi wygenerował 600,000,000 Guidów, prawdopodobieństwo duplikatu byłoby tylko 50%.

 6
Author: Tono Nam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-15 08:34:13

Doświadczyłem duplikatu GUID.

Używam zgrabnego skanera pulpitu i jest dostarczany z autorskim oprogramowaniem bazodanowym. Oprogramowanie ma funkcję synchronizacji z chmurą i ciągle otrzymywałem błąd podczas synchronizacji. Patrząc na kłody, odkrył niesamowitą linię:

"errors":[{"code":1,"message": "creator_guid: jest już taken", "guid": "C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}

Byłem trochę niedowierzający, ale na pewno wystarczająco, kiedy znalazłem drogę do mojego lokalnego baza danych neatworks i usunął rekord zawierający ten identyfikator GUID, błąd przestał występować.

Więc odpowiadając na twoje pytanie dowodami anegdotycznymi, nie. Duplikat jest możliwy. Ale jest prawdopodobne, że powodem, dla którego to się stało, nie był przypadek, ale ze względu na standardowe praktyki nie są przestrzegane w jakiś sposób. (Po prostu nie jestem taki szczęśliwy) jednak nie mogę powiedzieć na pewno. To nie jest moje oprogramowanie.

Ich Obsługa klienta była niezwykle uprzejma i pomocna, ale nigdy nie musieli napotkałem ten problem wcześniej, ponieważ po 3 + godzinach rozmowy telefonicznej z nimi nie znaleźli rozwiązania. (FWIW, jestem pod wrażeniem schludności, a ta usterka, choć frustrująca, nie zmieniła mojej opinii o ich produkcie.)

 5
Author: exintrovert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 10:42:22

Jeśli twój zegar systemowy jest ustawiony prawidłowo i nie jest zawinięty, i jeśli Twoja karta NIC ma swój własny MAC (tzn. nie ustawiłeś niestandardowego komputera MAC), a dostawca Twojej karty NIC nie recyklinguje komputerów Mac(czego nie powinno się robić, ale co było znane), i jeśli funkcja generowania GUID Twojego systemu jest prawidłowo zaimplementowana, to Twój system nigdy nie wygeneruje duplikatów GUID.

Jeśli wszyscy na ziemi, którzy generują GUID, przestrzegają tych zasad, Twoje GUID będą globalnie wyjątkowe.

W praktyce liczba osób, które łamią zasady jest niska, a ich Guidy raczej nie "uciekną". Konflikty są statystycznie nieprawdopodobne.

 4
Author: DrPizza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 16:16:20

MSDN :

Istnieje bardzo małe prawdopodobieństwo, że wartość nowego identyfikatora Guid jest równa zerom lub innym identyfikatorom Guid.

 3
Author: Jakub Šturc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 15:20:10
Czy GUID jest unikalny w 100%?

Nie gwarantowane, ponieważ istnieje kilka sposobów generowania. Można jednak spróbować obliczyć szansę na utworzenie dwóch identycznych identyfikatorów GUID i masz pomysł: GUID ma 128 bitów, stąd są 2128 odrębne Guidy - znacznie więcej niż gwiazdy w znanym wszechświecie. Przeczytaj artykuł Wikipedii aby uzyskać więcej szczegółów.

 3
Author: Konrad Rudolph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 15:20:44

Doświadczyłem, że GUID nie są unikalne podczas wielowątkowych / wieloprocesowych testów jednostkowych(też?). Myślę, że ma to związek z tym, że wszystkie inne tingi są równe, identycznym siewem (lub brakiem siewów) pseudo generatorów losowych. Używałem go do generowania unikalnych nazw plików. Stwierdziłem, że OS jest w tym znacznie lepszy:)

Trolling alert

Pytasz, czy GUID są w 100% unikalne. To zależy od liczby GUID musi być unikalny wśród. Jako liczba Guidów podejście nieskończoność, Prawdopodobieństwo dla zduplikowanych GUID zbliżyć 100%.

 1
Author: Robert Jørgensgaard Engdahl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-24 13:28:40

W bardziej ogólnym znaczeniu jest to znane jako" problem urodzinowy "lub" paradoks urodzinowy". Wikipedia ma dość dobry przegląd na: Wikipedia-Problem Urodzinowy

W bardzo przybliżonym ujęciu, pierwiastek kwadratowy wielkości puli jest przybliżonym przybliżeniem tego, kiedy można oczekiwać 50% szansy na duplikat. Artykuł zawiera tabelę prawdopodobieństwa wielkości puli i różnych prawdopodobieństw, w tym wiersz dla 2^128. Więc dla 1% prawdopodobieństwa kolizji można spodziewać się losowo wybierz liczby 2.6 * 10^18 128-bitowe. 50% szansa wymaga 2.2 * 10^19 typy, podczas gdy SQRT (2^128) jest 1.8*10^19.

Oczywiście, jest to idealny przypadek prawdziwie losowego procesu. Jak wspomnieli inni, wiele zależy od tego random aspekt - jak dobry jest generator i ziarno? Byłoby miło, gdyby istniało wsparcie sprzętowe, które pomogłoby w tym procesie, które byłoby bardziej Kuloodporne, z wyjątkiem tego, że wszystko może być sfałszowane lub zwirtualizowane. Podejrzewam, że to może być powód dlaczego adresy MAC/znaczniki czasu nie są już włączone.

 1
Author: mszil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-22 01:08:26

Algorytmy GUID są zwykle implementowane zgodnie ze specyfikacją GUID v4, która jest zasadniczo pseudolosowym ciągiem znaków. Niestety, należą one do kategorii "prawdopodobnie nie-unikalne" , z Wikipedii (Nie wiem, dlaczego tak wielu ludzi ignoruje ten bit): "... inne wersje identyfikatorów GUID mają różne właściwości unikalności i prawdopodobieństwa, od gwarantowanej unikalności do prawdopodobnej nie unikalności."

Pseudolosowe właściwości JavaScript V8 Math.random() są straszne w wyjątkowość, kolizje często następują po kilku tysiącach iteracji, ale V8 nie jest jedynym winowajcą. Widziałem kolizje GUID w świecie rzeczywistym przy użyciu zarówno implementacji PHP, jak i Ruby GUID V4.

Ponieważ coraz bardziej powszechne jest skalowanie generowania ID w wielu klientach i klastrach serwerów, Entropia ma duże znaczenie-szanse na to, że ten sam losowy seed zostanie użyty do wygenerowania ID eskalują (czas jest często używany jako losowy seed w generatorach pseudolosowych), i Kolizje GUID zwiększają się z "prawdopodobnego nie unikalnego" do "bardzo prawdopodobnego spowodowania wielu kłopotów".

Aby rozwiązać ten problem, postanowiłem stworzyć algorytm ID, który mógłby bezpiecznie skalować i zapewnić lepsze gwarancje przed kolizją. Robi to za pomocą znacznika czasu, licznika klienta w pamięci, odcisku palca Klienta i losowych znaków. Kombinacja czynników tworzy dodatkową złożoność, która jest szczególnie odporna na kolizje, nawet jeśli skalujesz ją na wiele różnych sposobów gospodarze:

Http://usecuid.org/

 0
Author: Eric Elliott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-27 06:39:05

Odpowiedź " Czy GUID jest w 100% unikalny?" jest po prostu "nie" .

  • Jeśli chcesz 100% unikalności GUID, wykonaj następujące czynności.

    1. Wygeneruj GUID
    2. sprawdź, czy ten identyfikator GUID istnieje w kolumnie tabeli, w której szukasz unikalności
    3. if exist then goto step 1 else step 4
    4. Użyj tego GUID jako unikalnego.
 0
Author: Baba Khedkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 11:55:37