Generátor UUID
Vygenerovaný UUID
Generátor UUID
Úvod
Univerzálně jedinečný identifikátor (UUID) je 128bitové číslo používané k identifikaci informací v počítačových systémech. UUID jsou standardizovány Open Software Foundation (OSF) jako součást Distribuovaného výpočetního prostředí (DCE). Tyto identifikátory jsou navrženy tak, aby byly jedinečné jak v prostoru, tak v čase, což je činí ideálními pro různé aplikace v distribuovaných systémech a mimo ně.
Tento nástroj pro generování UUID vám umožňuje vytvářet jak verzi 1 (na základě času), tak verzi 4 (náhodné) UUID. Tyto identifikátory jsou užitečné v různých scénářích, kde je vyžadováno jedinečné identifikování, jako jsou klíče databáze, distribuované systémy a síťové protokoly.
Jak UUID fungují
Struktura UUID
UUID je obvykle reprezentováno jako 32 hexadecimálních číslic, zobrazených ve pěti skupinách oddělených pomlčkami, ve formátu 8-4-4-4-12 pro celkový počet 36 znaků (32 alfanumerických znaků a 4 pomlčky). Například:
550e8400-e29b-41d4-a716-446655440000
128 bitů UUID je rozděleno do specifických polí, z nichž každé nese různé informace v závislosti na verzi UUID:
- 32 bitů pro pole time_low
- 16 bitů pro pole time_mid
- 16 bitů pro pole time_hi_and_version
- 8 bitů pro pole clock_seq_hi_and_reserved
- 8 bitů pro pole clock_seq_low
- 48 bitů pro pole node
Zde je diagram ilustrující strukturu UUID:
Verze UUID
Existuje několik verzí UUID, z nichž každá má svůj vlastní způsob generování:
- Verze 1 (na základě času): Používá aktuální časové razítko a MAC adresu počítače.
- Verze 2 (DCE Security): Podobná verzi 1, ale zahrnuje identifikátor místní domény.
- Verze 3 (na základě názvu, MD5): Generována hashováním identifikátoru jmenného prostoru a názvu.
- Verze 4 (náhodná): Generována pomocí náhodného nebo pseudo-náhodného čísla.
- Verze 5 (na základě názvu, SHA-1): Podobná verzi 3, ale používá SHA-1 hashování.
Tento nástroj se zaměřuje na generování verzí 1 a 4 UUID.
Vzorec
Generování UUID verze 1
UUID verze 1 jsou generována pomocí následujících komponent:
- Časové razítko: 60bitová hodnota představující počet 100nanosekundových intervalů od 15. října 1582 (data gregoriánské reformy křesťanského kalendáře).
- Sekvence hodin: 14bitová hodnota používaná k vyhnutí se duplicitám v případě, že je hodiny nastaveny zpět.
- Uzlová hodnota: 48bitová hodnota, obvykle odvozená z MAC adresy počítače.
Vzorec pro generování UUID verze 1 lze vyjádřit jako:
UUID = (časové_razítko * 2^64) + (sekvence_hodin * 2^48) + uzel
Generování UUID verze 4
UUID verze 4 jsou generována pomocí kryptograficky silného generátoru náhodných čísel. Vzorec je jednoduše:
UUID = náhodné_128bitové_číslo
S konkrétními bity nastavenými tak, aby označovaly verzi (4) a variantu.
Případy použití
UUID mají nespočet aplikací v různých oblastech informatiky a softwarového inženýrství:
-
Klíče databáze: UUID se často používají jako primární klíče v databázích, zejména v distribuovaných systémech, kde může více uzlů generovat záznamy současně.
-
Distribuované systémy: V rozsáhlých distribuovaných systémech pomáhají UUID jedinečně identifikovat zdroje, transakce nebo události napříč více uzly nebo datovými centry.
-
Adresování obsahu: UUID mohou být použity k vytvoření jedinečných identifikátorů pro obsah v systémech s adresováním obsahu.
-
Správa relací: Webové aplikace často používají UUID k řízení uživatelských relací, což zajišťuje, že každá relace má jedinečný identifikátor.
-
Identifikace zařízení IoT: V aplikacích Internetu věcí (IoT) mohou být UUID použity k jedinečné identifikaci jednotlivých zařízení v síti.
Alternativy
I když jsou UUID široce používány, existují alternativní přístupy k generování jedinečných identifikátorů:
-
Automaticky se zvyšující ID: Jednoduché a běžně používané v systémech s jednou databází, ale nejsou vhodné pro distribuované prostředí.
-
ID na základě časového razítka: Mohou být užitečné pro časově uspořádaná data, ale mohou čelit problémům s kolizemi v situacích s vysokou konkurencí.
-
Snowflake ID: Vyvinuté Twitterem, tyto ID kombinují časové razítko a číslo pracovníka k generování jedinečných ID v distribuovaných systémech.
-
ULID (Univerzálně jedinečný lexikograficky seřaditelný identifikátor): Novější alternativa, která má být uživatelsky přívětivější a seřaditelnější než UUID.
Historie
Koncept UUID byl poprvé představen v systému Apollo Network Computing a později standardizován Open Software Foundation (OSF) jako součást Distribuovaného výpočetního prostředí (DCE) v 90. letech. První specifikace byla publikována v roce 1997 jako ISO/IEC 11578:1996 a později revidována v roce 2005 jako součást ISO/IEC 9834-8:2005.
Klíčové milníky v historii UUID:
-
- léta: Apollo Computer vyvíjí koncept UUID pro svůj systém Network Computing.
- 1997: První specifikace UUID publikována jako ISO/IEC 11578:1996.
- 2005: Specifikace UUID revidována a publikována jako součást ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definuje formát UUID a algoritmy generování používané dnes.
V průběhu času se UUID staly nezbytným nástrojem v distribuovaných systémech a návrhu databází, s různými implementacemi a adaptacemi napříč různými programovacími jazyky a platformami.
Příklady kódu
Zde jsou příklady generování UUID v různých programovacích jazycích:
import uuid
## Generování UUID verze 4 (náhodné)
náhodné_uuid = uuid.uuid4()
print(f"UUID verze 4: {náhodné_uuid}")
## Generování UUID verze 1 (na základě času)
uuid_na_zaklade_casu = uuid.uuid1()
print(f"UUID verze 1: {uuid_na_zaklade_casu}")
Odkazy
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- Mezinárodní organizace pro standardizaci. (2005). Informační technologie – Procedury pro provoz OSI registračních autorit: Generování a registrace univerzálně jedinečných identifikátorů (UUID) a jejich použití jako komponenty ASN.1 Object Identifier. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Univerzálně jedinečný identifikátor. (2023). V Wikipedii. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). V Wikipedii. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec