Whiz Tools

Generátor UUID

Vygenerovaný UUID

Štruktúra UUID
Čas nízky

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:

550e8400-e29b-41d4-a716-446655440000

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:

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

Generovanie UUID verzie 4

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

UUID = random_128_bit_number

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:

import uuid

## Generovanie UUID verzie 4 (náhodné)
random_uuid = uuid.uuid4()
print(f"UUID verzie 4: {random_uuid}")

## Generovanie UUID verzie 1 (na základe času)
time_based_uuid = uuid.uuid1()
print(f"UUID verzie 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Generovanie UUID verzie 4 (náhodné)
const randomUuid = uuidv4();
console.log(`UUID verzie 4: ${randomUuid}`);

// Generovanie UUID verzie 1 (na základe času)
const timeBasedUuid = uuidv1();
console.log(`UUID verzie 1: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Generovanie UUID verzie 4 (náhodné)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID verzie 4: " + randomUuid);

        // Generovanie UUID verzie 1 (na základe času)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID verzie 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## Generovanie UUID verzie 4 (náhodné)
random_uuid = SecureRandom.uuid
puts "UUID verzie 4: #{random_uuid}"

## Ruby nemá vstavanú metódu pre UUID verzie 1
## Na to by ste potrebovali použiť gem ako 'uuidtools'
<?php
// Generovanie UUID verzie 4 (náhodné)
$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
echo "UUID verzie 4: " . $randomUuid . "\n";

// PHP nemá vstavanú metódu pre UUID verzie 1
// Na to by ste potrebovali použiť knižnicu ako 'ramsey/uuid'
?>

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
Feedback