Guide UUID : Versions, Formats et Bonnes Pratiques
Les UUID (Universally Unique Identifiers) sont des identifiants de 128 bits conçus pour ĂȘtre uniques dans l'espace et le temps sans autoritĂ© centrale. Ils constituent le choix standard pour les systĂšmes distribuĂ©s oĂč la gĂ©nĂ©ration d'identifiants de maniĂšre indĂ©pendante â sans coordination â est essentielle.
Format UUID
Un UUID est un nombre de 128 bits affiché sous forme de 32 chiffres hexadécimaux en cinq groupes séparés par des tirets :
550e8400-e29b-41d4-a716-446655440000
^^^^^^^^ ^^^^ ^^^^ ^^^^ ^^^^^^^^^^^^
time-low mid hi clk node
+ver +var
- Total : 128 bits (16 octets)
- Longueur de chaĂźne : 36 caractĂšres (32 hex + 4 tirets)
- Version : Encodée dans le 13e caractÚre (le nibble "hi")
- Variante : Encodée dans le 17e caractÚre
Générez des UUID instantanément avec notre Générateur d'UUID.
Versions UUID
UUID v1 : Basé sur le Temps
Généré à partir de l'horodatage actuel et de l'adresse MAC de la machine.
// Structure: timestamp (60 bits) + clock sequence (14 bits) + node (48 bits)
6ba7b810-9dad-11d1-80b4-00c04fd430c8
Avantages : Naturellement triable par date de crĂ©ation, unicitĂ© garantie par machine. InconvĂ©nients : Expose l'adresse MAC (problĂšme de confidentialitĂ©), peut rĂ©vĂ©ler la date de crĂ©ation. Ă utiliser quand : Vous avez besoin d'un ordre temporel et ĂȘtes dans un environnement contrĂŽlĂ©.
UUID v4 : Aléatoire
Généré à partir de nombres aléatoires cryptographiquement sécurisés. C'est la version la plus largement utilisée.
// 122 random bits (6 bits reserved for version and variant)
f47ac10b-58cc-4372-a567-0e02b2c3d479
Avantages : Simple, aucune fuite d'information, aucune coordination nĂ©cessaire. InconvĂ©nients : Non triable, performance d'index de base de donnĂ©es lĂ©gĂšrement infĂ©rieure aux identifiants sĂ©quentiels. Ă utiliser quand : Usage gĂ©nĂ©ral â c'est le choix par dĂ©faut pour la plupart des applications.
UUID v7 : Aléatoire Ordonné par le Temps (Nouveau Standard)
La version la plus récente (RFC 9562, 2024), combinant un horodatage Unix avec des données aléatoires.
// Structure: timestamp (48 bits) + random (74 bits)
018e7b50-4a00-7000-8000-000000000001
Avantages : Naturellement triĂ© par le temps, excellente performance d'index de base de donnĂ©es, aucune fuite d'information au-delĂ de la prĂ©cision Ă la milliseconde. InconvĂ©nients : Plus rĂ©cent, certaines bibliothĂšques peuvent ne pas encore le supporter. Ă utiliser quand : Vous avez besoin d'identifiants uniques triĂ©s chronologiquement â idĂ©al pour les clĂ©s primaires de base de donnĂ©es.
Autres Versions
- UUID v3 : Hash MD5 d'un espace de noms et d'un nom. Déterministe.
- UUID v5 : Hash SHA-1 d'un espace de noms et d'un nom. Déterministe et préféré à v3.
- UUID v6 : v1 réordonné pour une meilleure triabilité. Remplacé par v7.
- UUID Nil : Tous les zéros (
00000000-0000-0000-0000-000000000000). Utilisé comme valeur sentinelle.
Probabilité de Collision
Quelle est la probabilité que deux UUID (v4) générés aléatoirement entrent en collision ? Avec 122 bits aléatoires :
- AprĂšs avoir gĂ©nĂ©rĂ© 1 milliard d'UUID : probabilitĂ© â 1 sur 10^18
- Pour avoir 50 % de chances de collision : il faut environ 2,7 Ă 10^18 UUID
- Ă 1 milliard d'UUID par seconde : cela prendrait environ 86 ans
En pratique, les collisions UUID v4 ne se produiront pas. Vous avez bien plus de chances de rencontrer une panne matérielle.
UUID vs Autres Formats d'Identifiants
| Format | Longueur | Triable | Unique | URL-Safe |
|---|---|---|---|---|
| UUID v4 | 36 car. | Non | Oui | Oui |
| UUID v7 | 36 car. | Oui | Oui | Oui |
| ULID | 26 car. | Oui | Oui | Oui |
| nanoid | 21 car. | Non | Probablement | Oui |
| Auto-incrément | Variable | Oui | Par table | Oui |
| Snowflake ID | 18-19 car. | Oui | Par systĂšme | Oui |
ULID (Universally Unique Lexicographically Sortable Identifier)
Les ULID sont une alternative compacte : horodatage de 48 bits + 80 bits aléatoires, encodés en 26 caractÚres Crockford Base32. Ils se trient lexicographiquement par date de création.
Quand Utiliser les Identifiants Auto-Incrémentés
Les identifiants séquentiels sont plus simples et plus efficaces pour les applications à base de données unique. Utilisez les UUID quand vous avez besoin de :
- Identifiants générés par plusieurs systÚmes indépendamment
- Identifiants qui ne révÚlent pas l'ordre d'insertion aux utilisateurs externes
- Identifiants compatibles avec la fusion pour les bases de données distribuées
Considérations de Performance en Base de Données
Les UUID aléatoires (v4) causent une fragmentation de l'index B-tree car les insertions se font à des positions aléatoires. Cela peut dégrader les performances d'écriture de 2 à 5 fois par rapport aux identifiants séquentiels sur les grandes tables.
Solutions :
- Utiliser UUID v7 : Les UUID ordonnés par le temps s'insÚrent séquentiellement, égalant les performances de l'auto-incrément
- Stocker en binaire : Utiliser
BINARY(16)au lieu deCHAR(36)pour économiser 55 % de stockage - Utiliser ULID : Triable et plus compact que les UUID
-- PostgreSQL: native UUID type (16 bytes, efficient)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
-- MySQL: store as BINARY(16) for performance
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
Générer des UUID
Ligne de Commande
# macOS/Linux
uuidgen
# Python one-liner
python3 -c "import uuid; print(uuid.uuid4())"
JavaScript
// Built-in (Node.js 19+, modern browsers)
crypto.randomUUID();
// For UUID v7 (using uuid package)
import { v7 } from 'uuid';
const id = v7();
Python
import uuid
uuid.uuid4() # Random
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com') # Name-based
Pour une génération rapide sans code, notre Générateur d'UUID crée des UUID v4 instantanément dans votre navigateur.
FAQ
Dois-je utiliser un UUID ou un entier auto-incrémenté pour ma clé primaire de base de données ?
Pour les applications à base de données unique, les entiers auto-incrémentés sont plus simples et plus rapides. Pour les systÚmes distribués, les microservices, ou lorsque vous devez générer des identifiants cÎté client avant l'insertion en base de données, les UUID (de préférence v7) sont le meilleur choix. Si vous utilisez PostgreSQL, le support natif des UUID rend la différence de performance négligeable.
Les UUID peuvent-ils ĂȘtre utilisĂ©s comme jetons de sĂ©curitĂ© ?
UUID v4 utilise 122 bits d'aléatoire provenant d'une source cryptographique, ce qui fournit une bonne entropie. Cependant, pour les jetons de sécurité (clés API, identifiants de session), il est préférable d'utiliser des formats de jetons conçus à cet effet avec des propriétés supplémentaires comme les sommes de contrÎle, l'encodage d'expiration ou l'identification par préfixe. Les UUID servent à l'identité, pas à l'authentification.
Ressources Connexes
- GĂ©nĂ©rateur d'UUID â GĂ©nĂ©rez des UUID instantanĂ©ment en ligne
- Comparaison des Algorithmes de Hachage â Comprendre les fonctions de hachage derriĂšre UUID v3 et v5
- Patrons de Conception d'API JSON â Utiliser efficacement les UUID dans les rĂ©ponses API