UUID

128-bitowy identyfikator praktycznie gwarantujący globalną unikalność bez koordynacji między serwerami. Często używany jako klucz główny w systemach rozproszonych.

UUID (Universally Unique Identifier) to 128-bitowy identyfikator, który ma jedno proste zadanie: być unikalny w skali całego świata, bez pytania nikogo o pozwolenie. Zapisuje się go zwykle jako 36 znaków w formacie 8-4-4-4-12, np. 550e8400-e29b-41d4-a716-446655440000. Sztuczka polega na tym, że przestrzeń możliwych wartości jest tak gigantyczna (2^128, czyli liczba z 39 cyframi), że szansa wylosowania dwóch takich samych jest praktycznie zerowa. Dlatego dwa różne serwery mogą generować UUID-y w tym samym czasie, offline, bez wspólnej bazy i bez ryzyka kolizji.

Do czego to służy

Klasyczny problem: masz autoinkrementowane id w bazie i nagle musisz scalić dane z kilku serwerów albo wygenerować klucz, zanim rekord w ogóle trafi do bazy. Z liczbą sekwencyjną poległeś — dwie instancje wyprodukują to samo id = 1. UUID rozwiązuje to elegancko: identyfikator powstaje po stronie aplikacji, urządzenia mobilnego albo wręcz w przeglądarce, a baza tylko go przyjmuje. Stąd jego popularność w systemach rozproszonych, kolejkach, eventach i synchronizacji offline.

Wersji jest kilka. Najczęściej spotkasz UUIDv4 (w całości losowy) oraz coraz popularniejszy UUIDv7, który ma na początku znacznik czasu, więc identyfikatory są naturalnie posortowane chronologicznie. To istotne, bo czysto losowy UUIDv4 jako klucz główny rozrzuca wpisy po całym indeksie i potrafi rozłożyć wydajność zapisu. Formalnie standard opisuje RFC 9562 (z 2024 r., zastąpiło wcześniejsze RFC 4122), które dorzuciło właśnie wersje 6, 7 i 8.

Przykład z praktyki

W PostgreSQL wygenerujesz losowy identyfikator natywnie:

  • SELECT gen_random_uuid(); — zwróci gotowy UUIDv4,
  • kolumnę definiujesz jako id UUID PRIMARY KEY DEFAULT gen_random_uuid().

W kodzie też jest banalnie: w Pythonie import uuid; uuid.uuid4(), w JS crypto.randomUUID(), a w Javie UUID.randomUUID().

Na co uważać

Kilka min, na które łatwo wejść:

  • UUID nie jest sekretem. To, że trudno go zgadnąć, nie czyni go tokenem bezpieczeństwa — do autoryzacji używaj prawdziwych tokenów.
  • UUIDv1 zawiera adres MAC i czas, więc potrafi zdradzić, gdzie i kiedy powstał. Jak nie potrzebujesz tej informacji, wybierz v4 lub v7.
  • Losowy v4 jako PK bywa kosztowny przy ogromnych tabelach (fragmentacja indeksu, większe klucze niż BIGINT). Przy dużej skali rozważ v7.
  • „Unikalny” nie znaczy „matematycznie niemożliwa kolizja” — to skrajnie nieprawdopodobne, nie zerowe. W praktyce możesz spać spokojnie.

Pojęcia powiązane: klucz główny (primary key), GUID (microsoftowa nazwa tego samego), ULID, autoinkrement, system rozproszony, RFC 9562.