alltools.one
Development
2025-07-03
7 min
alltools.one Team
UUIDIdentifierDatabaseAPIDevelopment

Guida UUID: Versioni, Formati e Best Practice

Gli UUID (Universally Unique Identifier) sono identificatori a 128 bit progettati per essere univoci nello spazio e nel tempo senza un'autorità centrale. Sono la scelta standard per i sistemi distribuiti dove è essenziale generare ID in modo indipendente — senza coordinamento.

Formato UUID

Un UUID è un numero a 128 bit visualizzato come 32 cifre esadecimali in cinque gruppi separati da trattini:

550e8400-e29b-41d4-a716-446655440000
^^^^^^^^ ^^^^ ^^^^ ^^^^ ^^^^^^^^^^^^
time-low  mid  hi   clk   node
              +ver  +var
  • Totale: 128 bit (16 byte)
  • Lunghezza stringa: 36 caratteri (32 esadecimali + 4 trattini)
  • Versione: Codificata nel 13° carattere (il nibble "hi")
  • Variante: Codificata nel 17° carattere

Genera UUID istantaneamente con il nostro Generatore UUID.

Versioni UUID

UUID v1: Basato sul Tempo

Generato dal timestamp corrente e dall'indirizzo MAC della macchina.

// Struttura: timestamp (60 bit) + sequenza clock (14 bit) + nodo (48 bit)
6ba7b810-9dad-11d1-80b4-00c04fd430c8

Pro: Ordinabile naturalmente per tempo di creazione, univocità garantita per macchina. Contro: Espone l'indirizzo MAC (problema di privacy), può rivelare il tempo di creazione. Usa quando: Hai bisogno dell'ordinamento temporale e sei in un ambiente controllato.

UUID v4: Casuale

Generato da numeri casuali crittograficamente sicuri. Questa è la versione più ampiamente usata.

// 122 bit casuali (6 bit riservati per versione e variante)
f47ac10b-58cc-4372-a567-0e02b2c3d479

Pro: Semplice, nessuna perdita di informazioni, nessun coordinamento necessario. Contro: Non ordinabile, prestazioni di indice del database leggermente peggiori rispetto agli ID sequenziali. Usa quando: Uso generale — questa è la scelta predefinita per la maggior parte delle applicazioni.

UUID v7: Casuale Ordinato per Tempo (Nuovo Standard)

La versione più recente (RFC 9562, 2024), che combina un timestamp Unix con dati casuali.

// Struttura: timestamp (48 bit) + casuale (74 bit)
018e7b50-4a00-7000-8000-000000000001

Pro: Ordinato naturalmente per tempo, eccellenti prestazioni di indice del database, nessuna perdita di informazioni oltre la precisione al millisecondo. Contro: Più recente, alcune librerie potrebbero non supportarlo ancora. Usa quando: Hai bisogno di ID univoci che si ordinino cronologicamente — ideale per chiavi primarie del database.

Altre Versioni

  • UUID v3: Hash MD5 di un namespace e un nome. Deterministico.
  • UUID v5: Hash SHA-1 di un namespace e un nome. Deterministico e preferito rispetto a v3.
  • UUID v6: v1 riordinato per una migliore ordinabilità. Superato da v7.
  • UUID Nil: Tutti zeri (00000000-0000-0000-0000-000000000000). Usato come valore sentinella.

Probabilità di Collisione

Quanto è probabile che due UUID generati casualmente (v4) collidano? Con 122 bit casuali:

  • Dopo aver generato 1 miliardo di UUID: probabilità ≈ 1 su 10^18
  • Per avere una probabilità del 50% di collisione: servono circa 2,7 × 10^18 UUID
  • A 1 miliardo di UUID al secondo: ci vorrebbero circa 86 anni

Per tutti gli scopi pratici, le collisioni di UUID v4 non si verificheranno. È molto più probabile un guasto hardware.

UUID vs Altri Formati di ID

FormatoLunghezzaOrdinabileUnivocoURL-Safe
UUID v436 caratteriNo
UUID v736 caratteri
ULID26 caratteri
nanoid21 caratteriNoProbabilmente
Auto-incrementVariabilePer-tabella
Snowflake ID18-19 caratteriPer-sistema

ULID (Universally Unique Lexicographically Sortable Identifier)

Gli ULID sono un'alternativa compatta: timestamp a 48 bit + 80 bit casuali, codificati come 26 caratteri Crockford Base32. Si ordinano lessicograficamente per tempo di creazione.

Quando Usare gli ID Auto-Incrementanti

Gli ID sequenziali sono più semplici ed efficienti per le applicazioni con singolo database. Usa gli UUID quando hai bisogno di:

  • ID generati da più sistemi in modo indipendente
  • ID che non rivelano l'ordine di inserimento agli utenti esterni
  • ID compatibili con la fusione per database distribuiti

Considerazioni sulle Prestazioni del Database

Gli UUID casuali (v4) causano frammentazione dell'indice B-tree perché gli inserimenti avvengono in posizioni casuali. Questo può degradare le prestazioni di scrittura di 2-5x rispetto agli ID sequenziali su tabelle grandi.

Soluzioni:

  1. Usa UUID v7: Gli UUID ordinati per tempo si inseriscono sequenzialmente, eguagliando le prestazioni dell'auto-increment
  2. Archivia come binario: Usa BINARY(16) invece di CHAR(36) per risparmiare il 55% di spazio
  3. Usa ULID: Ordinabile e più compatto degli UUID
-- PostgreSQL: tipo UUID nativo (16 byte, efficiente)
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL
);

-- MySQL: archivia come BINARY(16) per le prestazioni
CREATE TABLE users (
  id BINARY(16) PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);

Generazione di UUID

Riga di Comando

# macOS/Linux
uuidgen

# Python one-liner
python3 -c "import uuid; print(uuid.uuid4())"

JavaScript

// Built-in (Node.js 19+, browser moderni)
crypto.randomUUID();

// Per UUID v7 (usando il pacchetto uuid)
import { v7 } from 'uuid';
const id = v7();

Python

import uuid
uuid.uuid4()  # Casuale
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com')  # Basato sul nome

Per una generazione rapida senza codice, il nostro Generatore UUID crea UUID v4 istantaneamente nel tuo browser.

FAQ

Devo usare UUID o intero auto-incrementante per la chiave primaria del mio database?

Per le applicazioni con singolo database, gli interi auto-incrementanti sono più semplici e veloci. Per i sistemi distribuiti, i microservizi o quando devi generare ID lato client prima dell'inserimento nel database, gli UUID (preferibilmente v7) sono la scelta migliore. Se usi PostgreSQL, il supporto nativo UUID rende la differenza di prestazioni trascurabile.

Gli UUID possono essere usati come token di sicurezza?

UUID v4 usa 122 bit di casualità da una fonte crittografica, che fornisce buona entropia. Tuttavia, per i token di sicurezza (chiavi API, ID di sessione), è meglio usare formati di token dedicati con proprietà aggiuntive come checksum, codifica della scadenza o identificazione con prefisso. Gli UUID sono per l'identità, non per l'autenticazione.

Risorse Correlate

Published on 2025-07-03
UUID Guide: Versions, Formats, and Best Practices | alltools.one