UUID v4 spiegato: perché gli ID casuali battono l'auto-incremento
Cos'è davvero un UUID v4, perché il rischio di collisione è trascurabile, e le situazioni concrete in cui batte un semplice ID intero auto-incrementale.
Un UUID v4 è un identificatore a 128 bit generato quasi interamente da bit casuali, formattato come 32 caratteri esadecimali divisi in 5 gruppi (es. 3fa85f64-5717-4562-b3fc-2c963f66afa6). Il '4' indica la versione, e significa che l'ID non porta alcuna informazione su quando, dove o da cosa è stato creato — che è esattamente lo scopo.
Non c'è il rischio che due ID collidano?
Tecnicamente sì, praticamente no. Un UUID v4 ha 122 bit casuali (6 bit sono fissi per indicare versione e variante), il che dà circa 5,3 x 10^36 valori possibili. Servirebbe generare circa 2,71 trilioni di UUID prima di avere una probabilità del 50% di una singola collisione. Per praticamente qualsiasi applicazione reale, questo rischio è più piccolo della probabilità che un guasto hardware corrompa comunque i dati.
Perché non usare semplicemente 1, 2, 3… come un auto-incremento di database?
Un intero auto-incrementale funziona bene all'interno di un singolo database, ma rivela informazioni e si rompe non appena il sistema cresce. Gli ID sequenziali permettono a chiunque di indovinare record vicini semplicemente cambiando un numero in un URL (/ordini/1042 → /ordini/1043), rivelano ai concorrenti il tuo volume approssimativo di iscrizioni o ordini, e non possono essere generati in modo sicuro da due server diversi contemporaneamente senza un contatore condiviso — che diventa un collo di bottiglia non appena scali orizzontalmente.
Quando un UUID è chiaramente la scelta migliore
Qualsiasi sistema con più scrittori indipendenti (microservizi, app mobile offline-first, database distribuiti) ne trae il massimo beneficio, poiché ogni nodo può generare un ID valido e univoco con zero coordinamento e zero contatore centrale. È anche la scelta giusta ogni volta che un ID potrebbe diventare visibile all'utente — riferimenti d'ordine, ID di risorse API, nomi di file — dove non vuoi che sia indovinabile né che riveli informazioni di sequenza.
Quando un intero è ancora la scelta migliore
Per un'applicazione piccola con un unico scrittore in cui gli ID non lasciano mai il database e serve il minor spazio di archiviazione possibile e le ricerche su indice più veloci, un semplice intero auto-incrementale (o il suo cugino ordinato, UUID v7) resta più semplice e veloce. La casualità dell'UUID v4 è anche il suo principale svantaggio per l'indicizzazione: non essendo i valori ordinati, frammentano un indice B-tree molto più di un ID sequenziale.
Il nostro generatore di UUID produce UUID v4 validi e conformi a RFC 4122 all'istante e in blocco, interamente nel tuo browser — utile per fixture di test, dati simulati, o semplicemente per scegliere un ID univoco sicuro senza avviare un database.