Whiz Tools

Generator UUID-a

Generirani UUID

Struktura UUID-a
Vrijeme nisko

Generator UUID-a

Uvod

Univerzalno jedinstveni identifikator (UUID) je 128-bitni broj koji se koristi za identifikaciju informacija u računalnim sustavima. UUID-ovi su standardizirani od strane Open Software Foundation (OSF) kao dio Distribuiranog računalnog okruženja (DCE). Ovi identifikatori su dizajnirani da budu jedinstveni u prostoru i vremenu, što ih čini idealnim za razne primjene u distribuiranim sustavima i šire.

Ovaj alat za generiranje UUID-a omogućuje vam stvaranje verzije 1 (temeljene na vremenu) i verzije 4 (nasumične) UUID-ova. Ovi identifikatori su korisni u raznim scenarijima gdje je potrebna jedinstvena identifikacija, kao što su ključevi baza podataka, distribuirani sustavi i mrežni protokoli.

Kako UUID-ovi rade

Struktura UUID-a

UUID se obično prikazuje kao 32 heksadecimalne znamenke, prikazane u pet grupa odvojene crticama, u obliku 8-4-4-4-12 za ukupno 36 znakova (32 alfanumerična znaka i 4 crte). Na primjer:

550e8400-e29b-41d4-a716-446655440000

128 bita UUID-a podijeljeno je u specifična polja, pri čemu svako nosi različite informacije ovisno o verziji UUID-a:

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

Evo dijagrama koji ilustrira strukturu UUID-a:

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

Verzije UUID-a

Postoji nekoliko verzija UUID-a, od kojih svaka ima svoju metodu generiranja:

  1. Verzija 1 (temeljena na vremenu): Koristi trenutni vremenski pečat i MAC adresu računala.
  2. Verzija 2 (DCE sigurnost): Slična verziji 1, ali uključuje identifikator lokalnog domena.
  3. Verzija 3 (temeljena na imenu, MD5): Generira se hashiranjem identifikatora prostora imena i imena.
  4. Verzija 4 (nasumična): Generira se pomoću nasumičnog ili pseudo-nasumičnog broja.
  5. Verzija 5 (temeljena na imenu, SHA-1): Slična verziji 3, ali koristi SHA-1 hashiranje.

Ovaj alat se fokusira na generiranje verzija 1 i 4 UUID-ova.

Formula

Generiranje UUID-a verzije 1

UUID-ovi verzije 1 generiraju se koristeći sljedeće komponente:

  1. Vremenski pečat: 60-bitna vrijednost koja predstavlja broj intervala od 100 nanosekundi od 15. listopada 1582. (datum reforme gregorijanskog kalendara).
  2. Sekvenca sata: 14-bitna vrijednost koja se koristi za izbjegavanje dupliciranja u slučaju da se sat postavi unazad.
  3. Čvor: 48-bitna vrijednost, obično izvedena iz MAC adrese računala.

Formula za generiranje UUID-a verzije 1 može se izraziti kao:

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

Generiranje UUID-a verzije 4

UUID-ovi verzije 4 generiraju se pomoću kriptografski jakog generatora nasumičnih brojeva. Formula je jednostavno:

UUID = random_128_bit_number

Uz specifične bitove postavljene da označe verziju (4) i varijantu.

Primjene

UUID-ovi imaju brojne primjene u raznim domenama računalne znanosti i softverskog inženjerstva:

  1. Ključevi baza podataka: UUID-ovi se često koriste kao primarni ključevi u bazama podataka, posebno u distribuiranim sustavima gdje više čvorova može istovremeno generirati zapise.

  2. Distribuirani sustavi: U velikim distribuiranim sustavima, UUID-ovi pomažu u jedinstvenom identificiranju resursa, transakcija ili događaja među više čvorova ili podatkovnih centara.

  3. Adresiranje sadržaja: UUID-ovi se mogu koristiti za stvaranje jedinstvenih identifikatora za sadržaj u sustavima za pohranu s adresiranjem sadržaja.

  4. Upravljanje sesijama: Web aplikacije često koriste UUID-ove za upravljanje korisničkim sesijama, osiguravajući da svaka sesija ima jedinstveni identifikator.

  5. Identifikacija IoT uređaja: U aplikacijama Interneta stvari (IoT), UUID-ovi se mogu koristiti za jedinstveno identificiranje pojedinačnih uređaja u mreži.

Alternativne metode

Iako su UUID-ovi široko korišteni, postoje alternativni pristupi generiranju jedinstvenih identifikatora:

  1. Automatski povećavajući ID-ovi: Jednostavni i često korišteni u sustavima s jednom bazom podataka, ali nisu prikladni za distribuirana okruženja.

  2. ID-ovi temeljeni na vremenu: Mogu biti korisni za vremenski poredane podatke, ali mogu imati problema s kolizijama u scenarijima s visokom konkurencijom.

  3. Snowflake ID-ovi: Razvili su ih Twitter, ovi ID-ovi kombiniraju vremenski pečat i broj radnika za generiranje jedinstvenih ID-ova u distribuiranim sustavima.

  4. ULID (Univerzalno jedinstveni leksikografski sortirani identifikator): Novija alternativa koja ima za cilj biti prijateljskija prema ljudima i sortirana od UUID-ova.

Povijest

Koncept UUID-ova prvi put je predstavljen u Apollo Network Computing System i kasnije standardiziran od strane Open Software Foundation (OSF) kao dio Distribuiranog računalnog okruženja (DCE) 1990-ih. Prva specifikacija objavljena je 1997. godine kao ISO/IEC 11578:1996, a kasnije je revidirana 2005. godine kao dio ISO/IEC 9834-8:2005.

Ključni trenuci u povijesti UUID-a:

  • 1980-e: Apollo Computer razvija koncept UUID-a za svoj sustav mrežnog računalstva.
  • 1997: Prva specifikacija UUID-a objavljena kao ISO/IEC 11578:1996.
  • 2005: Specifikacija UUID-a revidirana i objavljena kao dio ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 definira format UUID-a i algoritme generiranja koji se danas koriste.

S vremenom, UUID-ovi su postali bitan alat u distribuiranim sustavima i dizajnu baza podataka, s raznim implementacijama i prilagodbama u različitim programskim jezicima i platformama.

Primjeri koda

Evo primjera generiranja UUID-ova u raznim programskim jezicima:

import uuid

## Generirajte UUID verzije 4 (nasumični)
random_uuid = uuid.uuid4()
print(f"UUID verzije 4: {random_uuid}")

## Generirajte UUID verzije 1 (temeljeni na vremenu)
time_based_uuid = uuid.uuid1()
print(f"UUID verzije 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Generirajte UUID verzije 4 (nasumični)
const randomUuid = uuidv4();
console.log(`UUID verzije 4: ${randomUuid}`);

// Generirajte UUID verzije 1 (temeljeni na vremenu)
const timeBasedUuid = uuidv1();
console.log(`UUID verzije 1: ${timeBasedUuid}`);
import java.util.UUID;

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

        // Generirajte UUID verzije 1 (temeljeni na vremenu)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID verzije 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## Generirajte UUID verzije 4 (nasumični)
random_uuid = SecureRandom.uuid
puts "UUID verzije 4: #{random_uuid}"

## Ruby nema ugrađenu metodu za UUID verzije 1
## Trebali biste koristiti gem poput 'uuidtools' za to
<?php
// Generirajte UUID verzije 4 (nasumič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 verzije 4: " . $randomUuid . "\n";

// PHP nema ugrađenu metodu za UUID verzije 1
// Trebali biste koristiti biblioteku poput '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. Međunarodna organizacija za standardizaciju. (2005). Informacijska tehnologija – Otvorena sustavna međusobna povezanost – Postupci za rad OSI registracijskih vlasti: Generiranje i registracija univerzalno jedinstvenih identifikatora (UUID) i njihova upotreba kao komponenti ASN.1 objektnog identifikatora. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Univerzalno jedinstveni identifikator. (2023). U Wikipediji. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). U Wikipediji. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Feedback