Generátor UUID pre rôzne aplikácie a systémy

Generujte univerzálne jedinečné identifikátory (UUID) pre rôzne aplikácie. Vytvorte verziu 1 (na základe času) a verziu 4 (náhodné) UUID na použitie v distribuovaných systémoch, databázach a ďalších.

Generátor UUID

Vygenerovaný UUID

Štruktúra UUID
Čas nízky
📚

Dokumentácia

Generátor UUID

Úvod

Universálne jedinečný identifikátor (UUID) je 128-bitové číslo používané na identifikáciu informácií v počítačových systémoch. UUID sú štandardizované Open Software Foundation (OSF) ako súčasť Distribuovaného výpočtového prostredia (DCE). Tieto identifikátory sú navrhnuté tak, aby boli jedinečné v priestore aj čase, čo ich robí ideálnymi pre rôzne aplikácie v distribuovaných systémoch a mimo nich.

Tento nástroj na generovanie UUID vám umožňuje vytvárať verzie 1 (na základe času) a verzie 4 (náhodné) UUID. Tieto identifikátory sú užitočné v rôznych scenároch, kde je potrebná jedinečná identifikácia, ako sú kľúče databáz, distribuované systémy a sieťové protokoly.

Ako UUID fungujú

Štruktúra UUID

UUID je zvyčajne reprezentovaný ako 32 hexadecimálnych číslic, zobrazených v piatich skupinách oddelených pomlčkami, v tvare 8-4-4-4-12, čo predstavuje celkom 36 znakov (32 alfanumerických znakov a 4 pomlčky). Napríklad:

1550e8400-e29b-41d4-a716-446655440000
2

128 bitov UUID je rozdelených do špecifických polí, pričom každé nesie rôzne informácie v závislosti od verzie UUID:

  • 32 bitov pre pole time_low
  • 16 bitov pre pole time_mid
  • 16 bitov pre pole time_hi_and_version
  • 8 bitov pre pole clock_seq_hi_and_reserved
  • 8 bitov pre pole clock_seq_low
  • 48 bitov pre pole node

Tu je diagram ilustrujúci štruktúru UUID:

A B C D E F A: time_low (32 bitov) B: time_mid (16 bitov) C: time_hi_and_version (16 bitov) D: clock_seq_hi_and_reserved (8 bitov) E: clock_seq_low (8 bitov) F: node (48 bitov)

Verzie UUID

Existuje niekoľko verzií UUID, z ktorých každá má svoj vlastný spôsob generovania:

  1. Verzia 1 (na základe času): Používa aktuálny časový pečiatok a MAC adresu počítača.
  2. Verzia 2 (DCE Security): Podobná verzii 1, ale obsahuje identifikátor miestneho domény.
  3. Verzia 3 (na základe názvu, MD5): Generovaná hashovaním identifikátora menného priestoru a názvu.
  4. Verzia 4 (náhodná): Generovaná pomocou náhodného alebo pseudo-náhodného čísla.
  5. Verzia 5 (na základe názvu, SHA-1): Podobná verzii 3, ale používa SHA-1 hashovanie.

Tento nástroj sa zameriava na generovanie verzií 1 a 4 UUID.

Formula

Generovanie UUID verzie 1

UUID verzie 1 sú generované pomocou nasledujúcich komponentov:

  1. Časová pečiatka: 60-bitová hodnota predstavujúca počet 100-nanosekundových intervalov od 15. októbra 1582 (dátum gregoriánskej reformy kresťanského kalendára).
  2. Sekvencia hodiniek: 14-bitová hodnota používaná na vyhnutie sa duplicitám v prípade, že sa hodiny nastavujú späť.
  3. Node: 48-bitová hodnota, zvyčajne odvodená z MAC adresy počítača.

Formula na generovanie UUID verzie 1 môže byť vyjadrená ako:

1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2

Generovanie UUID verzie 4

UUID verzie 4 sú generované pomocou kryptograficky silného generátora náhodných čísel. Formula je jednoducho:

1UUID = random_128_bit_number
2

S konkrétnymi bitmi nastavenými na označenie verzie (4) a variantu.

Použitie

UUID majú množstvo aplikácií v rôznych oblastiach počítačovej vedy a softvérového inžinierstva:

  1. Kľúče databáz: UUID sa často používajú ako primárne kľúče v databázach, najmä v distribuovaných systémoch, kde môže viacero uzlov generovať záznamy súčasne.

  2. Distribuované systémy: V rozsiahlych distribuovaných systémoch pomáhajú UUID jedinečne identifikovať zdroje, transakcie alebo udalosti naprieč viacerými uzlami alebo dátovými centrami.

  3. Adresovanie obsahu: UUID môžu byť použité na vytvorenie jedinečných identifikátorov pre obsah v systémoch s adresovateľným obsahom.

  4. Správa relácií: Webové aplikácie často používajú UUID na správu používateľských relácií, pričom zabezpečujú, že každá relácia má jedinečný identifikátor.

  5. Identifikácia zariadení IoT: V aplikáciách Internetu vecí (IoT) môžu byť UUID použité na jedinečné identifikovanie jednotlivých zariadení v sieti.

Alternatívy

Aj keď sú UUID široko používané, existujú alternatívne prístupy na generovanie jedinečných identifikátorov:

  1. Automaticky zvyšujúce sa ID: Jednoduché a bežne používané v systémoch s jednou databázou, ale nie sú vhodné pre distribuované prostredia.

  2. ID na základe časovej pečiatky: Môžu byť užitočné pre časovo usporiadané dáta, ale môžu čeliť problémom s kolíziou v scénaroch s vysokou konkurenciou.

  3. Snowflake ID: Vyvinuté spoločnosťou Twitter, tieto ID kombinujú časovú pečiatku a číslo pracovníka na generovanie jedinečných ID v distribuovaných systémoch.

  4. ULID (Universally Unique Lexicographically Sortable Identifier): Novšia alternatíva, ktorá sa snaží byť priateľskejšia k používateľom a usporiadateľnejšia ako UUID.

História

Koncept UUID bol prvýkrát predstavený v systéme Apollo Network Computing a neskôr štandardizovaný Open Software Foundation (OSF) ako súčasť Distribuovaného výpočtového prostredia (DCE) v 90. rokoch. Počiatočná špecifikácia bola publikovaná v roku 1997 ako ISO/IEC 11578:1996 a neskôr revidovaná v roku 2005 ako súčasť ISO/IEC 9834-8:2005.

Kľúčové míľniky v histórii UUID:

    1. roky: Apollo Computer vyvinul koncept UUID pre ich systém sieťového výpočtu.
  • 1997: Prvá špecifikácia UUID publikovaná ako ISO/IEC 11578:1996.
  • 2005: Špecifikácia UUID revidovaná a publikovaná ako súčasť ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 definuje formát UUID a algoritmy generovania používané dnes.

V priebehu času sa UUID stali nevyhnutným nástrojom v distribuovaných systémoch a návrhu databáz, s rôznymi implementáciami a adaptáciami naprieč rôznymi programovacími jazykmi a platformami.

Kódové príklady

Tu sú príklady generovania UUID v rôznych programovacích jazykoch:

1import uuid
2
3## Generovanie UUID verzie 4 (náhodné)
4random_uuid = uuid.uuid4()
5print(f"UUID verzie 4: {random_uuid}")
6
7## Generovanie UUID verzie 1 (na základe času)
8time_based_uuid = uuid.uuid1()
9print(f"UUID verzie 1: {time_based_uuid}")
10

Odkazy

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Medzinárodná organizácia pre normalizáciu. (2005). Informačné technológie – Procedúry pre prevádzku orgánov registrácie OSI: Generovanie a registrácia univerzálnych jedinečných identifikátorov (UUID) a ich použitie ako komponenty ASN.1 Object Identifier. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Universálne jedinečný identifikátor. (2023). V Wikipédii. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). V Wikipédii. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec