Czym tak naprawdę jest UUID
UUID, skrót od Universally Unique Identifier (globalnie unikalny identyfikator), to 128-bitowa wartość służąca do oznaczania czegoś bez potrzeby pytania kogokolwiek o pozwolenie. Możesz spotkać się też z nazwą GUID, czyli Globally Unique Identifier — to po prostu nazwa, którą Microsoft nadał temu samemu pomysłowi w środowisku Windows i .NET. Oba terminy opisują tę samą 128-bitową liczbę w niemal każdym praktycznym przypadku, więc gdy kolega mówi GUID, a Ty mówisz UUID, prawie zawsze chodzi o dokładnie to samo.
Te 128 bitów zapisuje się zazwyczaj jako 32 cyfry szesnastkowe podzielone na pięć grup łącznikami, w schemacie 8-4-4-4-12. Typowa wartość wygląda tak: 123e4567-e89b-12d3-a456-426614174000. Łączniki same w sobie nie niosą żadnego znaczenia — istnieją wyłącznie po to, by człowiek mógł odczytać wartość bez gubienia miejsca. Każdy znak to cyfra szesnastkowa od 0 do f, dlatego UUID wygląda gęściej niż zwykła liczba, choć pod spodem jest to po prostu jedna bardzo duża liczba całkowita.

Wersje i dlaczego v4 wygrywa
Standard definiuje kilka wersji, które różnią się sposobem wypełniania bitów. Wersja 1 jest oparta na czasie: splata razem bieżący znacznik czasu i adres MAC karty sieciowej urządzenia. Dzięki temu wartości v1 można sortować według czasu utworzenia, ale ujawniają też informacje o tym, gdzie i mniej więcej kiedy zostały wygenerowane — co nie zawsze jest pożądane. Wersje 3 i 5 są oparte na nazwie: haszują przestrzeń nazw i samą nazwę, dzięki czemu te same dane wejściowe zawsze dają ten sam identyfikator.
Wersja 4 obiera zupełnie inną drogę. Jest niemal czystą losowością. Z 128 bitów sześć jest zarezerwowanych do oznaczenia wersji i wariantu, pozostawiając 122 bity do wypełnienia losowymi danymi. Nie ma znacznika czasu, adresu MAC ani przestrzeni nazw — tylko szum. Właśnie dlatego większość generatorów, w tym ten, domyślnie produkuje v4. Nie ujawnia nic o urządzeniu ani o chwili powstania, a do jego tworzenia nie potrzeba żadnej koordynacji między stronami. Narzędzie na tej stronie działa w całości w Twojej przeglądarce, więc losowe wartości nigdy nie opuszczają Twojego urządzenia.
Jak mało prawdopodobna jest kolizja
Uzasadniona obawa jest taka, że dwa losowe UUID mogłyby kiedyś być identyczne. Przy 122 losowych bitach przestrzeń możliwych wartości v4 wynosi 2 do potęgi 122, co odpowiada mniej więcej 5,3 z 36 zerami po sobie. Żeby to zobrazować: musiałbyś generować miliardy UUID na sekundę przez wiele dziesiątek lat, zanim prawdopodobieństwo chociażby jednej duplikacji stałoby się mierzalne. Sam standard opisuje szansę kolizji jako bliską zeru do tego stopnia, że można ją pominąć. W praktyce zespoły traktują v4 jako unikalny i idą dalej, i słusznie.

Gdzie programiści po nie sięgają
Ponieważ unikalność nie wymaga centralnej władzy, UUID świetnie sprawdzają się tam, gdzie koordynacja jest kosztowna lub niemożliwa. Są naturalnym wyborem dla kluczy głównych w bazach danych, zwłaszcza gdy kilka serwisów jednocześnie wstawia rekordy i nie można zatrzymać się, by poprosić wspólny licznik o następny numer. W systemach rozproszonych dwa węzły na przeciwnych końcach świata mogą tworzyć identyfikatory w tej samej chwili bez ryzyka kolizji. Służą też jako klucze idempotentności w API, gdzie klient dołącza UUID do żądania, by serwer mógł bezpiecznie zignorować duplikat w razie powtórzenia przez sieć. Tokeny sesji, nazwy plików, identyfikatory zdarzeń i klucze wiadomości — wszystkie korzystają z tej samej właściwości.
UUID kontra identyfikatory auto-increment
Klasyczną alternatywą jest liczba całkowita auto-increment: 1, 2, 3 i tak dalej. Sekwencyjne identyfikatory są zwarte, naturalnie się sortują i łatwo je odczytać, ale mają realne wady. Ujawniają liczbę rekordów i pozwalają osobom z zewnątrz odgadywać sąsiednie wartości, a każde wstawienie musi przejść przez jeden licznik, który staje się wąskim gardłem przy dzieleniu bazy danych na fragmenty lub scalaniu danych z wielu źródeł. UUID rozwiązują te problemy, pozwalając każdej stronie niezależnie generować klucze i nie ujawniając nic o wolumenie ani kolejności. Ceną jest większy rozmiar i nieco gorsza lokalność w indeksach. Dla systemów skalowanych poziomo lub wymagających ukrycia wewnętrznych szczegółów ta wymiana jest zazwyczaj opłacalna. Możesz eksplorować to i podobne narzędzia w naszej kolekcji wszystkich generatorów lub przejrzeć szerszy zestaw narzędzi dla deweloperów.
Najczęściej zadawane pytania
Czy GUID to to samo co UUID?
Do codziennych celów: tak. GUID to nazwa Microsoftu dla tego samego 128-bitowego identyfikatora. Jedyna realna różnica dotyczy kolejności bajtów w surowej postaci binarnej na niektórych systemach Windows; w postaci ciągu tekstowego są identyczne i zamienne.
Którą wersję UUID generuje to narzędzie?
Generuje wersję 4, wariant losowy. Ze 128 bitów 122 jest wypełnionych losowymi danymi, co sprawia, że każda wartość jest niezwykle mało prawdopodobna do powtórzenia i nie zawiera znacznika czasu ani informacji o urządzeniu.
Czy dwa UUID mogą być takie same?
Teoretycznie prawdopodobieństwo nie wynosi dokładnie zero, ale przy około 5,3 razy 10 do potęgi 36 możliwych wartości v4 jest tak małe, że traktuje się je jako pomijalnie małe. Musiałbyś wygenerować astronomiczne liczby UUID, zanim kolizja stałaby się prawdopodobna.
Po co używać UUID zamiast liczby auto-increment?
UUID mogą być tworzone niezależnie przez dowolny serwis bez wspólnego licznika, nie ujawniają liczby rekordów ani kolejności, a scalanie danych z wielu źródeł jest z nimi bezproblemowe. Identyfikatory auto-increment są mniejsze, ale stają się wąskim gardłem i ujawniają informacje przy większej skali.
Czy UUID są generowane na serwerze?
Nie. To narzędzie działa w całości w Twojej przeglądarce, więc losowe wartości są produkowane lokalnie i nigdy nigdzie nie są wysyłane. To sprawia, że jest bezpieczne do użycia dla kluczy i tokenów, które chcesz zachować prywatnie.
Co oznacza wzorzec łączników?
Grupowanie 8-4-4-4-12 to tylko konwencja czytelności. Łączniki nie niosą żadnych danych; dzielą 32 cyfry szesnastkowe na fragmenty, żeby ludzie mogli łatwiej przeglądać i porównywać wartości.
