Generator UUID
Wygenerowany UUID
Generator UUID
Wprowadzenie
Uniwersalny Unikalny Identifikator (UUID) to 128-bitowa liczba używana do identyfikacji informacji w systemach komputerowych. UUID są standaryzowane przez Open Software Foundation (OSF) jako część Środowiska Rozproszonego Obliczeń (DCE). Te identyfikatory są zaprojektowane tak, aby były unikalne zarówno w przestrzeni, jak i czasie, co czyni je idealnymi do różnych zastosowań w systemach rozproszonych i nie tylko.
To narzędzie do generowania UUID pozwala na tworzenie zarówno wersji 1 (opartej na czasie), jak i wersji 4 (losowej) UUID. Te identyfikatory są przydatne w różnych scenariuszach, w których wymagana jest unikalna identyfikacja, takich jak klucze bazy danych, systemy rozproszone i protokoły sieciowe.
Jak działają UUID
Struktura UUID
UUID jest zazwyczaj reprezentowany jako 32 cyfry szesnastkowe, wyświetlane w pięciu grupach oddzielonych myślnikami, w formacie 8-4-4-4-12, co daje łącznie 36 znaków (32 znaki alfanumeryczne i 4 myślniki). Na przykład:
550e8400-e29b-41d4-a716-446655440000
128 bitów UUID jest podzielonych na konkretne pola, z których każde niesie różne informacje w zależności od wersji UUID:
- 32 bity dla pola time_low
- 16 bitów dla pola time_mid
- 16 bitów dla pola time_hi_and_version
- 8 bitów dla pola clock_seq_hi_and_reserved
- 8 bitów dla pola clock_seq_low
- 48 bitów dla pola node
Oto diagram ilustrujący strukturę UUID:
Wersje UUID
Istnieje kilka wersji UUID, z których każda ma swoją metodę generacji:
- Wersja 1 (oparta na czasie): Używa aktualnego znacznika czasu i adresu MAC komputera.
- Wersja 2 (bezpieczeństwo DCE): Podobna do wersji 1, ale zawiera identyfikator lokalnej domeny.
- Wersja 3 (oparta na nazwie, MD5): Generowana przez hashowanie identyfikatora przestrzeni nazw i nazwy.
- Wersja 4 (losowa): Generowana przy użyciu losowego lub pseudo-losowego numeru.
- Wersja 5 (oparta na nazwie, SHA-1): Podobna do wersji 3, ale używa haszowania SHA-1.
To narzędzie koncentruje się na generowaniu UUID wersji 1 i wersji 4.
Formuła
Generowanie UUID Wersji 1
UUID wersji 1 są generowane przy użyciu następujących komponentów:
- Znacznik czasu: 60-bitowa wartość reprezentująca liczbę 100-nanosekundowych interwałów od 15 października 1582 roku (data reformy gregoriańskiej kalendarza chrześcijańskiego).
- Sekwencja zegara: 14-bitowa wartość używana do unikania duplikatów w przypadku, gdy zegar jest ustawiony wstecz.
- Węzeł: 48-bitowa wartość, zazwyczaj pochodząca z adresu MAC komputera.
Formuła generowania UUID wersji 1 może być wyrażona jako:
UUID = (znacznik_czasu * 2^64) + (sekwencja_zegara * 2^48) + węzeł
Generowanie UUID Wersji 4
UUID wersji 4 są generowane przy użyciu kryptograficznie silnego generatora liczb losowych. Formuła jest po prostu:
UUID = losowa_liczba_128_bitowa
Z określonymi bitami ustawionymi, aby wskazać wersję (4) i wariant.
Przykłady użycia
UUID mają liczne zastosowania w różnych dziedzinach informatyki i inżynierii oprogramowania:
-
Klucze bazy danych: UUID są często używane jako klucze główne w bazach danych, szczególnie w systemach rozproszonych, gdzie wiele węzłów może jednocześnie generować rekordy.
-
Systemy rozproszone: W dużych systemach rozproszonych UUID pomagają w unikalnej identyfikacji zasobów, transakcji lub zdarzeń w wielu węzłach lub centrach danych.
-
Adresowanie zawartości: UUID mogą być używane do tworzenia unikalnych identyfikatorów dla zawartości w systemach przechowywania adresowalnej zawartości.
-
Zarządzanie sesjami: Aplikacje internetowe często używają UUID do zarządzania sesjami użytkowników, zapewniając, że każda sesja ma unikalny identyfikator.
-
Identyfikacja urządzeń IoT: W aplikacjach Internetu Rzeczy (IoT) UUID mogą być używane do unikalnej identyfikacji poszczególnych urządzeń w sieci.
Alternatywy
Chociaż UUID są szeroko stosowane, istnieją alternatywne podejścia do generowania unikalnych identyfikatorów:
-
Identyfikatory autoinkrementacyjne: Proste i powszechnie stosowane w systemach z jedną bazą danych, ale nieodpowiednie dla środowisk rozproszonych.
-
Identyfikatory oparte na znaczniku czasu: Mogą być przydatne dla danych uporządkowanych czasowo, ale mogą napotykać problemy z kolizjami w scenariuszach o wysokiej współbieżności.
-
Identyfikatory Snowflake: Opracowane przez Twittera, te identyfikatory łączą znacznik czasu i numer roboczy, aby generować unikalne identyfikatory w systemach rozproszonych.
-
ULID (Uniwersalny Unikalny Identyfikator Sortowalny Leksykograficznie): Nowsza alternatywa, która ma być bardziej przyjazna dla ludzi i sortowalna niż UUID.
Historia
Koncepcja UUID została po raz pierwszy wprowadzona w Apollo Network Computing System, a następnie standaryzowana przez Open Software Foundation (OSF) jako część Środowiska Rozproszonego Obliczeń (DCE) w latach 90-tych. Początkowa specyfikacja została opublikowana w 1997 roku jako ISO/IEC 11578:1996, a następnie zrewidowana w 2005 roku jako część ISO/IEC 9834-8:2005.
Kluczowe wydarzenia w historii UUID:
- Lata 80.: Apollo Computer rozwija koncepcję UUID dla swojego systemu obliczeń sieciowych.
- 1997: Pierwsza specyfikacja UUID opublikowana jako ISO/IEC 11578:1996.
- 2005: Specyfikacja UUID zrewidowana i opublikowana jako część ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definiuje format UUID i algorytmy generacji używane dzisiaj.
Z biegiem czasu UUID stały się niezbędnym narzędziem w systemach rozproszonych i projektowaniu baz danych, z różnymi implementacjami i adaptacjami w różnych językach programowania i platformach.
Przykłady kodu
Oto przykłady generowania UUID w różnych językach programowania:
import uuid
## Generowanie UUID wersji 4 (losowego)
random_uuid = uuid.uuid4()
print(f"UUID wersji 4: {random_uuid}")
## Generowanie UUID wersji 1 (opartego na czasie)
time_based_uuid = uuid.uuid1()
print(f"UUID wersji 1: {time_based_uuid}")
Odniesienia
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- Międzynarodowa Organizacja Normalizacyjna. (2005). Technologie informacyjne – Otwarte systemy łączności – Procedury działania organów rejestracyjnych OSI: Generacja i rejestracja Uniwersalnych Unikalnych Identyfikatorów (UUID) oraz ich użycie jako komponentów identyfikatorów obiektów ASN.1. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Uniwersalny unikalny identyfikator. (2023). W Wikipedii. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Identyfikator Snowflake. (2023). W Wikipedii. https://en.wikipedia.org/wiki/Snowflake_ID
- Specyfikacja ULID. (n.d.). GitHub. https://github.com/ulid/spec