Przejdź do treści

UUID — co to jest, czym różni się v4 od v7 i czy może się powtórzyć

Redakcja AMKBIT · · 2 min czytania

Unikalne identyfikatory, które można tworzyć bez centralnego licznika. Wyjaśniamy budowę UUID, prawdopodobieństwo kolizji i dlaczego nowa wersja 7 lepiej sprawdza się w bazach danych.

UUID (Universally Unique Identifier, w świecie Microsoftu GUID) to 128-bitowy identyfikator zapisywany jako 32 cyfry szesnastkowe w pięciu grupach:

550e8400-e29b-41d4-a716-446655440000

Każdy system może generować UUID samodzielnie, bez pytania serwera o kolejny numer — a mimo to praktycznie nie ma ryzyka, że dwa identyfikatory się powtórzą.

Budowa

Pierwsza cyfra trzeciej grupy oznacza wersję (w przykładzie 4), a pierwsza cyfra czwartej grupy — wariant (8, 9, a lub b dla standardowych UUID według RFC 9562). Pozostałe bity zależą od wersji.

Najważniejsze wersje

WersjaZawartośćZastosowanie
v1czas + adres MACstarsze systemy; ujawnia sprzęt i czas
v4122 losowe bitynajpopularniejsza, uniwersalna
v5skrót SHA-1 z nazwyten sam UUID dla tej samej nazwy
v7czas Unix w ms + losowe bityklucze w bazach danych, sortowanie po czasie

Czy UUID v4 może się powtórzyć?

Teoretycznie tak, praktycznie nie. Jest 2¹²² ≈ 5,3 × 10³⁶ możliwych wartości. Żeby szansa choćby jednej kolizji wyniosła 50%, trzeba wygenerować ok. 2,7 × 10¹⁸ identyfikatorów — to miliard UUID na sekundę przez ponad 85 lat. Warunek: generator musi korzystać z dobrego źródła losowości (w przeglądarce crypto.randomUUID() lub crypto.getRandomValues(), a nie Math.random()).

Dlaczego v7 w bazach danych

Losowe UUID v4 jako klucz główny trafiają w przypadkowe miejsca indeksu. W dużych tabelach (np. MySQL InnoDB, gdzie dane są ułożone według klucza głównego) powoduje to częste dzielenie stron indeksu i wolniejsze zapisy. UUID v7 zaczyna się od znacznika czasu w milisekundach, więc kolejne identyfikatory rosną — jak licznik AUTO_INCREMENT, ale bez centralnego licznika. Dodatkowo z UUID v7 można odczytać przybliżony czas utworzenia rekordu (zobacz czas Unix).

Przechowywanie

  • jako tekst: 36 znaków (z myślnikami),
  • binarnie: 16 bajtów (np. BINARY(16) w MySQL, typ uuid w PostgreSQL) — oszczędniej i szybciej.

UUID to nie hasło

UUID v4 jest trudny do odgadnięcia, ale nie powinien zastępować tokenów bezpieczeństwa i haseł — może trafiać do logów, adresów URL i historii przeglądarki. UUID v1 i v7 ujawniają czas utworzenia.

Identyfikatory v4 i v7 — pojedynczo lub hurtem — wygenerujesz w generatorze UUID, który sprawdzi też wersję podanego identyfikatora.

Narzędzia do tego poradnika

UUIDGUIDidentyfikatorbaza danychUUIDv7

Przeczytaj też