Czym są UUID?
UUID (Uniwersalnie Unikalny Identyfikator) to standardowy format identyfikatora zaprojektowany tak, aby był globalnie unikalny w przestrzeni i czasie. UUID to 128-bitowe wartości zazwyczaj reprezentowane jako 32 cyfry szesnastkowe, wyświetlane w pięciu grupach oddzielonych myślnikami: 123e4567-e89b-12d3-a456-426614174000
.
UUID są zdefiniowane przez standard RFC 9562 (który zastępuje poprzedni RFC 4122) i są używane na różnych platformach komputerowych do identyfikacji informacji bez konieczności centralnej rejestracji lub koordynacji.
Format UUID
Wszystkie UUID mają wspólny format składający się z 36 znaków (32 cyfry szesnastkowe plus 4 myślniki) ułożonych według wzoru:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Gdzie:
x
to dowolna cyfra szesnastkowa (0-9, a-f)M
wskazuje wersję UUID (1-7)N
wskazuje wariant UUID (zazwyczaj 8, 9, A lub B dla nowoczesnych UUID)
Porównanie wersji UUID
Version | Name | Metoda generowania | Time-ordered | Przypadki użycia |
---|---|---|---|---|
UUID v1 | Timestamp | Aktualny znacznik czasu + ID węzła (MAC) | Tak (częściowo) | Logowanie, systemy rozproszone |
UUID v3 | Na podstawie nazwy (MD5) | Hash MD5 przestrzeni nazw + nazwy | No | Spójne identyfikatory dla tego samego wejścia |
UUID v4 | Random | Losowe lub pseudolosowe liczby | No | Ogólnego przeznaczenia, najczęstszy |
UUID v5 | Na podstawie nazwy (SHA-1) | Hash SHA-1 przestrzeni nazw + nazwy | No | Spójne identyfikatory z silniejszym hashem |
UUID v6 | Przearanżowany znacznik czasu | Znacznik czasu (uporządkowany do sortowania) | Yes | Klucze baz danych, rekordy sortowalne według czasu |
UUID v7 | Znacznik czasu Unix Epoch | Znacznik czasu Unix + losowe dane | Yes | Nowoczesne sortowalne identyfikatory |
Nil UUID | Zero UUID | Wszystkie zera | N/A | Wartość specjalna, znacznik niezainicjowany |
Zalety UUID
- Brak wymaganego koordynowania: Generuj identyfikatory bez centralnej koordynacji
- Globalna unikalność: Bardzo niskie prawdopodobieństwo kolizji
- Stała długość: Spójna reprezentacja ciągu 36 znaków
- Cross-Platform: Obsługiwane praktycznie we wszystkich językach programowania
- Versatile: Różne wersje dla różnych zastosowań
Alternatywy dla standardowych UUID
Typ ID | Description | Advantages | Disadvantages |
---|---|---|---|
GUID | Implementacja UUID firmy Microsoft | Funkcjonalnie równoważne UUID | Pewne różnice implementacyjne w starszych systemach |
ULID | Uniwersalnie Unikalny Leksykalnie Sortowalny Identyfikator | Leksykalnie sortowalne, najpierw znacznik czasu, bez rozróżniania wielkości liter | Nowsze, mniej rozpowszechnione |
Snowflake ID | Rozproszony system ID Twittera | Sortowalny według czasu, kompaktowy (64-bitowy) | Wymaga centralnej koordynacji |
CUID/CUID2 | Identyfikatory odporne na kolizje | Krótkie, odpowiednie do generowania po stronie klienta | Nie jest oficjalnym standardem |
Nano ID | Mały, bezpieczny, przyjazny dla URL generator unikalnych ciągów ID | Mniejszy niż UUID, konfigurowalny alfabet | Nie jest standaryzowany |
Krótki UUID | Krótsze kodowanie standardowych UUID | Bardziej kompaktowa reprezentacja | Wymaga konwersji do/z standardowego UUID |
Nil UUID | UUID z wszystkimi bitami ustawionymi na zero | Specjalne znaczenie semantyczne | Nie jest unikalny (używany jako wartość specjalna) |
Minecraft UUID | UUID z myślnikami lub bez | Kompatybilny ze standardowymi UUID | Tylko różnice w formatowaniu |
Praktyczne zastosowania
- Klucze główne baz danych: Szczególnie w bazach rozproszonych lub replikowanych
- Systemy rozproszone: Identyfikacja podmiotów w wielu systemach
- Aplikacje internetowe: Identyfikatory sesji, śledzenie anonimowych użytkowników
- Zarządzanie treścią: Identyfikatory dokumentów i mediów
- APIs: Identyfikatory żądań i transakcji do śledzenia i debugowania
- Internet rzeczy: Identyfikacja urządzeń bez centralnej rejestracji
- Synchronizacja danych: Identyfikacja rekordów w wielu magazynach danych
- Licencjonowanie oprogramowania: Unikalne klucze produktów lub licencji