Qu'est-ce qu'un UUID ?
Un UUID (Universally Unique Identifier) est un identifiant de 128 bits conçu pour être unique dans l'espace et le temps, sans coordination centrale. Le résultat est une chaîne de 36 caractères au format :
550e8400-e29b-41d4-a716-446655440000
Elle encode 32 chiffres hexadécimaux en cinq groupes séparés par des tirets : 8-4-4-4-12.
Les Versions d'UUID Expliquées
UUID v1 — Basé sur le temps + adresse MAC
Combine l'horodatage avec l'adresse MAC. Ordonné chronologiquement mais révèle l'adresse MAC et l'horodatage exact — un problème de confidentialité.
UUID v4 — Aléatoire (le plus utilisé)
Remplit 122 bits avec des données aléatoires cryptographiquement sûres. Le choix par défaut pour la plupart des cas d'usage.
UUID v5 — Namespace + SHA-1
Déterministe : même namespace + nom = même UUID à chaque fois. Préférez v5 à v3 (MD5 est obsolète).
UUID v7 — Ordonné par le temps (nouveau standard)
Utilise un horodatage Unix en millisecondes dans les bits les plus significatifs. Les UUID sont triables et améliorent considérablement les performances des index B-tree.
Pourquoi Utiliser des UUIDs ?
- Pas de coordination centrale : N'importe quel client ou microservice peut générer un UUID indépendamment.
- Sécurité par l'opacité : Les IDs entiers séquentiels exposent votre volume de données. Les UUIDs ne révèlent rien.
- Fusion de bases de données : Les tables à clés UUID fusionnent sans conflits.
- Génération hors ligne : Les apps mobiles peuvent créer des enregistrements hors ligne et synchroniser plus tard.
- Standard industriel : Support natif dans toutes les bases de données et frameworks majeurs.
Quand NE PAS Utiliser des UUIDs ?
- Surcharge de stockage : Utilisez
BINARY(16)en MySQL ou le type natifuuiden PostgreSQL plutôt queVARCHAR(36). - Slugs d'URL : Trop longs et non mémorables. Utilisez des slugs lisibles pour les URLs orientées utilisateur.
- Fragmentation des index avec v4 : Pour les tables à forte écriture, utilisez UUID v7 ou ULID.
VARCHAR(36). Utilisez BINARY(16) avec UUID_TO_BIN(uuid, 1).
Générer des UUIDs dans le Code
JavaScript
const id = crypto.randomUUID(); // v4
Python
import uuid; id = str(uuid.uuid4())
PHP
use Ramsey\Uuid\Uuid;
$v4 = Uuid::uuid4()->toString();
$v7 = Uuid::uuid7()->toString();
SQL
-- MySQL : SELECT UUID();
-- PostgreSQL : SELECT gen_random_uuid();
Meilleures Pratiques
- Stocker en binaire :
BINARY(16)ou type natifuuidPostgreSQL. - Utiliser v4 dans la plupart des cas.
- Utiliser v7 pour les clés primaires de base de données.
- Éviter v1 dans les contextes sensibles à la vie privée.
- Valider le format UUID à l'entrée.
- Toujours utiliser des minuscules.
Questions Fréquentes
Deux UUIDs peuvent-ils être identiques ?
Théoriquement oui. La probabilité de collision v4 est d'environ 1 sur 5,3×1036. En pratique, vous ne rencontrerez jamais de collision dans un système réel.
v4 ou v7 pour les clés primaires ?
v7 pour les clés primaires. v4 insère à des positions aléatoires dans l'index B-tree. v7 garantit des insertions en fin d'index.
Les UUIDs sont-ils sensibles à la casse ?
Non. La spécification est insensible à la casse. Par convention, utilisez toujours des minuscules.