W tym artykule
Czym jest UUID?
UUID (Universally Unique Identifier) to 128-bitowy identyfikator, który jest gwarantowany jako unikalny w przestrzeni i czasie — bez potrzeby istnienia centralnego urzędu. UUID-y są formatowane jako 32 cyfry szesnastkowe w 5 grupach oddzielonych myślnikami: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Istnieje kilka wersji UUID, każda generowana w inny sposób. Wersja 4 (losowa) jest najszerzej stosowana — generuje 122 losowe bity, co sprawia, że kolizje są astronomicznie mało prawdopodobne. Aby mieć 50% szans na kolizję, musiałbyś generować miliard UUID-ów na sekundę przez 85 lat.
Jak działa generowanie UUID?
UUID v4 używa kryptograficznie bezpiecznego generatora liczb losowych.
- Losowe bity — 122 losowe bity są generowane przy użyciu CSPRNG
- Oznaczenie wersji — bity 12–15 trzeciej grupy są ustawiane na 0100, wskazując wersję 4
- Oznaczenie wariantu — bity 6–7 czwartej grupy są ustawiane na 10, wskazując wariant RFC 4122
Wypróbuj za darmo — bez rejestracji
Generuj UUID →Kiedy używać UUID-ów?
UUID-y są preferowanym typem identyfikatora w systemach rozproszonych i bazach danych.
- Klucze główne baz danych — używaj kluczy UUID w systemach rozproszonych, aby uniknąć konfliktów ID podczas scalania danych
- Tokeny sesji — generuj UUID-y dla identyfikatorów sesji i tymczasowych tokenów
- Nazewnictwo plików — używaj UUID-ów do generowania unikalnych nazw plików dla przesyłanych przez użytkowników materiałów i generowanych zasobów
Często zadawane pytania
Jaka jest różnica między UUID v1, v3, v4 i v5?
v1 jest oparty na czasie i zawiera MAC address, co czyni go identyfikowalnym. v3 i v5 są deterministyczne — haszują przestrzeń nazw i nazwę, aby za każdym razem produkować ten sam UUID (v3 używa MD5, v5 używa SHA-1). v4 jest losowy i najczęściej stosowany jako ogólny unikalny identyfikator. v7 (wschodzący standard) łączy znacznik czasu z losowością, tworząc sortowalne UUID-y.
Czy używać UUID czy autoinkrementowanych liczb całkowitych jako kluczy głównych bazy danych?
Autoinkrementowane liczby całkowite są prostsze i bardziej efektywne pod względem przechowywania. UUID-y są lepsze w systemach rozproszonych, przy scalaniu danych z wielu źródeł, gdy eksponujesz ID w URL-ach bez ujawniania informacji o sekwencji, oraz gdy chcesz generować ID po stronie klienta przed wstawieniem do bazy. Dla aplikacji działających na jednym serwerze autoinkrementacja często w zupełności wystarcza.
Czy UUID-y są naprawdę unikalne?
UUID v4 ma 2^122 możliwych wartości — około 5,3 × 10^36. Prawdopodobieństwo wygenerowania dwóch identycznych UUID-ów jest tak małe, że jest efektywnie zerowe w każdej praktycznej aplikacji. Z uwagi na paradoks urodzin, potrzebujesz mniej więcej 2,71 kwintyliona UUID-ów, aby mieć 50% szans na kolizję.