Whiz Tools

Generator UUID

Ustvarjen UUID

Struktura UUID
Čas niz

Generátor UUID

Uvod

Univerzalno unikatni identifikator (UUID) je 128-bitna številka, ki se uporablja za identifikacijo informacij v računalniških sistemih. UUID-ji so standardizirani s strani Open Software Foundation (OSF) kot del okolja za porazdeljeno računalništvo (DCE). Ti identifikatorji so zasnovani tako, da so unikatni tako v prostoru kot v času, kar jih naredi idealne za različne aplikacije v porazdeljenih sistemih in še več.

Ta orodje za generiranje UUID omogoča ustvarjanje tako različice 1 (na osnovi časa) kot različice 4 (naključni) UUID-jev. Ti identifikatorji so koristni v različnih scenarijih, kjer je potrebna unikatna identifikacija, kot so ključi v bazah podatkov, porazdeljeni sistemi in omrežni protokoli.

Kako delujejo UUID-ji

Struktura UUID

UUID je običajno predstavljen kot 32 šestnajstiških številk, prikazanih v petih skupinah, ločenih s pomišljaji, v obliki 8-4-4-4-12, kar skupaj znaša 36 znakov (32 alfanumeričnih znakov in 4 pomišljaji). Na primer:

550e8400-e29b-41d4-a716-446655440000

128 bitov UUID-ja je razdeljenih na specifična polja, pri čemer ima vsako različica UUID različne informacije:

  • 32 bitov za polje time_low
  • 16 bitov za polje time_mid
  • 16 bitov za polje time_hi_and_version
  • 8 bitov za polje clock_seq_hi_and_reserved
  • 8 bitov za polje clock_seq_low
  • 48 bitov za polje node

Tukaj je diagram, ki prikazuje strukturo 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)

Različice UUID

Obstaja več različic UUID-jev, vsaka z lastno metodo generiranja:

  1. Različica 1 (na osnovi časa): Uporablja trenutni časovni žig in MAC naslov računalnika.
  2. Različica 2 (DCE varnost): Podobna različici 1, vendar vključuje lokalni domeni identifikator.
  3. Različica 3 (na osnovi imena, MD5): Ustvarjena z hashingom identifikatorja imenskega prostora in imena.
  4. Različica 4 (naključna): Ustvarjena z uporabo naključnega ali pseudo-naključnega števila.
  5. Različica 5 (na osnovi imena, SHA-1): Podobna različici 3, vendar uporablja SHA-1 hashing.

To orodje se osredotoča na generiranje različic 1 in 4 UUID-jev.

Formula

Generiranje UUID različice 1

UUID-ji različice 1 se generirajo z uporabo naslednjih komponent:

  1. Časovni žig: 60-bitna vrednost, ki predstavlja število 100-nanosekundnih intervalov od 15. oktobra 1582 (datum gregorijanske reforme krščanskega koledarja).
  2. Zaporedje ure: 14-bitna vrednost, ki se uporablja za izogibanje podvojenjem v primeru, da se ura nastavi nazaj.
  3. Vozlišče: 48-bitna vrednost, ki je običajno pridobljena iz MAC naslova računalnika.

Formula za generiranje UUID različice 1 se lahko izrazi kot:

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

Generiranje UUID različice 4

UUID-ji različice 4 se generirajo z uporabo kriptografsko močnega generatorja naključnih števil. Formula je preprosto:

UUID = random_128_bit_number

S posebnimi biti, nastavljenimi za označevanje različice (4) in variante.

Uporabe

UUID-ji imajo številne aplikacije v različnih področjih računalništva in inženirstva programske opreme:

  1. Ključi v bazah podatkov: UUID-ji se pogosto uporabljajo kot primarni ključi v bazah podatkov, zlasti v porazdeljenih sistemih, kjer lahko več vozlišč hkrati generira zapise.

  2. Porazdeljeni sistemi: V velikih porazdeljenih sistemih UUID-ji pomagajo pri edinstveni identifikaciji virov, transakcij ali dogodkov med več vozlišči ali podatkovnimi centri.

  3. Naslavljanje vsebine: UUID-ji se lahko uporabljajo za ustvarjanje unikatnih identifikatorjev za vsebino v sistemih za shranjevanje z naslovom vsebine.

  4. Upravljanje sej: Spletne aplikacije pogosto uporabljajo UUID-je za upravljanje uporabniških sej, kar zagotavlja, da ima vsaka seja unikatni identifikator.

  5. Identifikacija naprav IoT: V aplikacijah Internet of Things (IoT) se UUID-ji lahko uporabljajo za edinstveno identifikacijo posameznih naprav v omrežju.

Alternativi

Čeprav se UUID-ji široko uporabljajo, obstajajo alternativni pristopi za generiranje unikatnih identifikatorjev:

  1. Samodejno povečevanje ID-jev: Preprosto in pogosto uporabljeno v enojnih sistemih baz podatkov, vendar ni primerno za porazdeljena okolja.

  2. ID-ji na osnovi časa: Lahko so koristni za časovno urejene podatke, vendar se lahko srečajo s težavami pri podvajanju v scenarijih z veliko konkurenco.

  3. ID-ji Snowflake: Razviti s strani Twitterja, ti ID-ji združujejo časovni žig in številko delavca za generiranje unikatnih ID-jev v porazdeljenih sistemih.

  4. ULID (Univerzalno unikatni leksikografsko razvrščeni identifikator): Bolj nedavna alternativa, ki si prizadeva biti bolj prijazna do uporabnika in razvrščena kot UUID-ji.

Zgodovina

Koncept UUID-jev je prvič uveden v Apollo Network Computing System in kasneje standardiziran s strani Open Software Foundation (OSF) kot del okolja za porazdeljeno računalništvo (DCE) v devetdesetih letih. Prva specifikacija je bila objavljena leta 1997 kot ISO/IEC 11578:1996 in kasneje revidirana leta 2005 kot del ISO/IEC 9834-8:2005.

Ključni mejniki v zgodovini UUID:

  • 1980-ih: Apollo Computer razvije koncept UUID za njihov sistem omrežnega računalništva.
  • 1997: Prva specifikacija UUID objavljena kot ISO/IEC 11578:1996.
  • 2005: Specifikacija UUID revidirana in objavljena kot del ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 opredeljuje format UUID in algoritme generiranja, ki se uporabljajo danes.

Sčasoma so UUID-ji postali bistveno orodje v porazdeljenih sistemih in oblikovanju baz podatkov, z različnimi implementacijami in prilagoditvami v različnih programskih jezikih in platformah.

Kode

Tukaj so primeri generiranja UUID-jev v različnih programskih jezikih:

import uuid

## Ustvari UUID različice 4 (naključni)
random_uuid = uuid.uuid4()
print(f"UUID različice 4: {random_uuid}")

## Ustvari UUID različice 1 (na osnovi časa)
time_based_uuid = uuid.uuid1()
print(f"UUID različice 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Ustvari UUID različice 4 (naključni)
const randomUuid = uuidv4();
console.log(`UUID različice 4: ${randomUuid}`);

// Ustvari UUID različice 1 (na osnovi časa)
const timeBasedUuid = uuidv1();
console.log(`UUID različice 1: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Ustvari UUID različice 4 (naključni)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID različice 4: " + randomUuid);

        // Ustvari UUID različice 1 (na osnovi časa)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID različice 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## Ustvari UUID različice 4 (naključni)
random_uuid = SecureRandom.uuid
puts "UUID različice 4: #{random_uuid}"

## Ruby nima vgrajene metode za UUID različice 1
## Uporabiti bi morali gem, kot je 'uuidtools' za to
<?php
// Ustvari UUID različice 4 (naključni)
$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 različice 4: " . $randomUuid . "\n";

// PHP nima vgrajene metode za UUID različice 1
// Uporabiti bi morali knjižnico, kot je 'ramsey/uuid' za to
?>

Reference

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Mednarodna organizacija za standardizacijo. (2005). Informacijska tehnologija – Odprta omrežna povezljivost – Postopki za delovanje organov za registracijo OSI: Generiranje in registracija Univerzalno unikatnih identifikatorjev (UUID) in njihova uporaba kot komponent ASN.1 objektnih identifikatorjev. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Univerzalno unikatni identifikator. (2023). V Wikipediji. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. ID Snowflake. (2023). V Wikipediji. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Feedback