Polski numer PESEL koduje w 11 cyfrach datę urodzenia, płeć i cyfrę kontrolną obliczaną według ustalonego algorytmu — to identyfikator scentralizowany, nadawany przez rejestr państwowy, w którym każda cyfra ma konkretne znaczenie. UUID reprezentuje podejście przeciwne: nie koduje żadnej informacji o swoim pochodzeniu, nie wymaga żadnego centralnego rejestru i może zostać wygenerowany niezależnie na dowolnej maszynie — a mimo to prawdopodobieństwo kolizji pozostaje praktycznie zerowe.
Wersje UUID
- v1 — na podstawie aktualnego czasu i adresu MAC karty sieciowej. Gwarantuje unikalność, ale częściowo ujawnia, kiedy i na jakim urządzeniu powstał identyfikator.
- v4 — całkowicie losowa (poza kilkoma bitami zarezerwowanymi na oznaczenie wersji). Najczęściej stosowany wariant dziś, właśnie dlatego, że nie ujawnia żadnych informacji ubocznych.
- v5 — deterministyczna, obliczana jako skrót przestrzeni nazw i ciągu znaków — to samo wejście zawsze daje ten sam UUID.
Dlaczego prawdopodobieństwo kolizji jest praktycznie zerowe
W UUID v4 losowych jest 122 bity. Nawet generując miliardy UUID na sekundę przez stulecia, prawdopodobieństwo choćby jednej kolizji pozostaje astronomicznie małe — fakt matematycznie oparty na paradoksie urodzin dla przestrzeni tej wielkości.
Do czego to się przydaje
- Generowanie kluczy głównych bazy danych bez centralnego licznika czy koordynacji między serwerami.
- Tworzenie identyfikatorów sesji, żądań lub transakcji w systemach rozproszonych, bez rejestru centralnego jak w przypadku numeru PESEL.
- Unikanie przewidywalnych, sekwencyjnych ID, które łatwo wyliczyć (w przeciwieństwie do
1, 2, 3...).
UUID v7: kompromis między losowością a sortowaniem
Całkowicie losowy UUID v4 źle wpływa na wydajność indeksów bazy danych — nowe rekordy są wstawiane w chaotyczne pozycje drzewa indeksu zamiast na koniec. Nowszy UUID v7 rozwiązuje ten problem, osadzając znacznik czasu w pierwszych bitach identyfikatora: wartości pozostają praktycznie unikalne, jak w v4, ale naturalnie sortują się według czasu utworzenia, jak sekwencyjny licznik.