Quale tipo dovrei usare?
| UUID v4 | UUID v7 | ULID | |
|---|---|---|---|
| Contenuto | 122 bit casuali | timestamp a 48 bit in ms + 74 bit casuali | timestamp a 48 bit in ms + 80 bit casuali |
| Ordinabile per tempo | No | Sì | Sì |
| Forma testuale | hex 8-4-4-4-12 | hex 8-4-4-4-12 | 26 caratteri Base32 Crockford |
| Standard | RFC 4122 / 9562 | RFC 9562 (2024) | Specifica della comunità |
| Adatto ai database | Scarso come chiave primaria: gli inserimenti casuali frammentano gli indici B-tree | Buono: le nuove righe finiscono in fondo all’indice | Buono, ma richiede una colonna a 128 bit o una stringa di 26 caratteri |
Per un nuovo sistema, UUID v7 è il default sensato: è un UUID standard, ogni database e linguaggio lo accetta, e mantiene compatti gli indici. Usa v4 quando l’ID non deve rivelare quando è stato creato. ULID è una buona scelta dove conta la sua forma testuale più corta e adatta agli URL e l’ecosistema lo usa già.
Leggere i bit
In xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, la cifra M è la versione (4 o 7) e i primi bit di N sono la variante (8, 9, a o b per gli UUID standard). In un v7 le prime 12 cifre hex sono il tempo Unix in millisecondi; in un v1 il tempo è sparso in tre campi e le ultime 12 cifre sono di solito l’indirizzo MAC della macchina che lo ha creato. L’ispettore decodifica tutto questo.
Collisioni
Un UUID v4 ha 2¹²² possibilità. Per arrivare al 50% di probabilità di una singola collisione dovresti generarne circa 2,7 × 10¹⁸, grosso modo un miliardo al secondo per 85 anni. In pratica il rischio è una cattiva sorgente casuale, non la matematica, ed è per questo che questa pagina usa crypto.getRandomValues e non Math.random.
Domande
Che differenza c’è tra UUID e GUID?
Nessuna, in pratica. GUID è il nome che Microsoft dà allo stesso identificatore a 128 bit. Gli strumenti Windows spesso li scrivono in maiuscolo con le graffe, cosa che l’opzione di formato qui riproduce.
Questi UUID sono davvero casuali?
I bit casuali vengono dal generatore crittograficamente sicuro del browser (WebCrypto), la stessa sorgente usata per le chiavi. Non derivano dal tuo orologio o da qualcosa di prevedibile, a parte il fatto che v7 e ULID includono deliberatamente l’ora corrente.
Un UUID può essere ricondotto a me?
Un v4 no. Un v7 o un ULID rivelano quando sono stati creati. Un v1 può contenere l’indirizzo MAC della macchina che lo ha generato, ed è per questo che il v1 è caduto in disuso.
Dovrei usare un UUID come chiave primaria del database?
Sì, se ti servono ID generati dai client o tra più servizi, ma preferisci il v7 così gli inserimenti sono sequenziali. Memorizzalo in una colonna UUID nativa a 16 byte (PostgreSQL uuid, MySQL BINARY(16)) invece che in una stringa di 36 caratteri.
Cos’è l’UUID nullo?
00000000-0000-0000-0000-000000000000, definito come segnaposto che significa «nessun valore». RFC 9562 definisce anche un UUID massimo tutto a uno.