w

Générateur UUID

Qu'est-ce qu'un UUID ?

UUID (Universally Unique Identifier, Identifiant unique universel) est un nombre de 128 bits utilisé pour identifier de manière unique les informations dans les systèmes informatiques. UUID est également appelé GUID (Globally Unique Identifier, Identifiant unique global).

Caractéristiques de l'UUID

  • Unicité : La probabilité de générer des UUID en double dans un système distribué est extrêmement faible
  • Standardisation : Conforme à la norme RFC 4122
  • Multi-plateforme : Peut être utilisé sur différents systèmes d'exploitation et langages de programmation
  • Décentralisé : Ne nécessite pas d'autorité de coordination centrale

Scénarios d'application de l'UUID

  1. Clé primaire de base de données : Utilisé comme clé primaire dans les bases de données distribuées
  2. Identification de fichiers : Identifier les fichiers dans le système de fichiers
  3. Gestion de session : Identifiant de session dans les applications Web
  4. File d'attente de messages : Identifiant unique des messages
  5. Interface API : Identifiant des requêtes et réponses API

Détails des versions UUID

UUID v1 (basé sur le temps et le nœud)

Format : xxxxxxxx-xxxx-1xxx-yxxx-xxxxxxxxxxxx

Caractéristiques :

  • Basé sur l'heure actuelle et l'ID du nœud (généralement l'adresse MAC)
  • Contient des informations d'horodatage, peut être trié par temps
  • Peut révéler des informations d'adresse MAC

Algorithme de génération :

// Exemple de pseudo-code
function generateUUIDv1() {
  const timestamp = Date.now();
  const nodeId = getMACAddress();
  const clockSeq = random16Bit();

  return formatUUID(timestamp, clockSeq, nodeId);
}

UUID v3 (basé sur l'espace de noms et MD5)

Format : xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx

Caractéristiques :

  • Basé sur le hachage MD5 de l'UUID d'espace de noms et du nom
  • Le même espace de noms et le même nom produisent toujours le même UUID
  • Applicable aux scénarios nécessitant des UUID déterministes

Algorithme de génération :

function generateUUIDv3(namespace, name) {
  const namespaceBytes = parseUUID(namespace);
  const nameBytes = Buffer.from(name, 'utf8');
  const hash = crypto
    .createHash('md5')
    .update(Buffer.concat([namespaceBytes, nameBytes]))
    .digest();

  return formatUUIDv3(hash);
}

UUID v4 (génération aléatoire)

Format : xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx

Caractéristiques :

  • Génération complètement aléatoire
  • Version UUID la plus couramment utilisée
  • Ne contient aucune information significative

Algorithme de génération :

function generateUUIDv4() {
  const bytes = crypto.randomBytes(16);
  bytes[6] = (bytes[6] & 0x0f) | 0x40; // Version 4
  bytes[8] = (bytes[8] & 0x3f) | 0x80; // Variante

  return formatUUID(bytes);
}

UUID v5 (basé sur l'espace de noms et SHA-1)

Format : xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx

Caractéristiques :

  • Basé sur le hachage SHA-1 de l'UUID d'espace de noms et du nom
  • Plus sûr que v3 (utilise SHA-1 au lieu de MD5)
  • Applicable aux scénarios nécessitant des UUID déterministes

UUID NIL (UUID vide)

Format : 00000000-0000-0000-0000-000000000000

Caractéristiques :

  • Tous les bits sont 0
  • Utilisé pour représenter "aucun UUID" ou "UUID inconnu"
  • Utilisé comme valeur par défaut dans la conception de base de données

Espaces de noms prédéfinis

UUID d'espace de noms standard

  • Espace de noms DNS : 6ba7b810-9dad-11d1-80b4-00c04fd430c8
  • Espace de noms URL : 6ba7b811-9dad-11d1-80b4-00c04fd430c8
  • Espace de noms OID : 6ba7b812-9dad-11d1-80b4-00c04fd430c8
  • Espace de noms X.500 DN : 6ba7b814-9dad-11d1-80b4-00c04fd430c8

Exemple d'utilisation

// Générer UUID v3 en utilisant l'espace de noms DNS
const dnsNamespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
const uuid = generateUUIDv3(dnsNamespace, 'example.com');
// Résultat : 5df41881-3aed-3515-88a7-2f4a814cf09e

Interface API

Génération d'UUID unique

// Générer UUID v4
const uuid = generateUUID('v4');

// Générer UUID v1
const uuid = generateUUID('v1');

// Générer UUID v3
const uuid = generateUUID('v3', {
  namespace: '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
  name: 'example.com',
});

Génération d'UUID par lot

// Génération d'UUID par lot
const uuids = generateMultipleUUIDs('v4', 10);

// Générer des UUID de différentes versions
const mixedUUIDs = generateMultipleUUIDs(['v1', 'v4', 'v5'], 5);

Validation UUID

// Valider le format UUID
const isValid = validateUUID('550e8400-e29b-41d4-a716-446655440000');

// Obtenir la version UUID
const version = getUUIDVersion('550e8400-e29b-41d4-a716-446655440000');

Considérations de performance

Vitesse de génération

  • v4 (aléatoire) : Plus rapide, environ 100 000 UUID/seconde
  • v1 (temps) : Moyen, environ 50 000 UUID/seconde
  • v3/v5 (hachage) : Plus lent, environ 10 000 UUID/seconde

Utilisation de la mémoire

  • Chaque UUID occupe 16 octets
  • Attention à l'utilisation de la mémoire lors de la génération par lot

Sécurité concurrentielle

  • v4 utilise un générateur de nombres aléatoires cryptographiquement sûr
  • v1 nécessite d'assurer l'unicité de la séquence d'horloge

Meilleures pratiques

Choix de la version UUID

  1. Usage général : Utiliser UUID v4
  2. Tri temporel nécessaire : Utiliser UUID v1
  3. Déterminisme nécessaire : Utiliser UUID v3 ou v5
  4. Clé primaire de base de données : Recommander UUID v4

Optimisation du stockage

-- Stockage UUID dans PostgreSQL
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name VARCHAR(255)
);

-- Créer un index
CREATE INDEX idx_users_id ON users(id);

Optimisation des performances

// Utiliser un pool d'objets pour réduire l'allocation de mémoire
const uuidPool = new Array(1000).fill(null).map(() => generateUUIDv4());

// Utiliser Web Workers pour la génération par lot
const worker = new Worker('uuid-worker.js');
worker.postMessage({ type: 'generate', count: 1000 });

Questions fréquentes

Q : Quelle est la différence entre UUID et GUID ?

R : UUID et GUID sont essentiellement les mêmes, seuls les noms diffèrent. UUID est le terme standard RFC, GUID est le terme Microsoft.

Q : Les UUID peuvent-ils se dupliquer ?

R : Théoriquement possible, mais la probabilité est extrêmement faible. La probabilité de duplication d'un UUID v4 est d'environ 2,71 × 10^-36.

Q : Comment choisir la version UUID ?

R : Choisir selon les besoins :

  • Besoin de caractère aléatoire : v4
  • Besoin d'informations temporelles : v1
  • Besoin de déterminisme : v3 ou v5

Q : L'UUID affecte-t-il les performances de la base de données ?

R : Peut affecter car l'UUID est plus grand qu'une clé primaire entière. Recommandations :

  • Utiliser des index B-tree
  • Considérer l'utilisation d'UUID v1 (tri temporel)
  • Utiliser des clés primaires entières dans les cas appropriés

Outils connexes

Spécifications techniques

Standards RFC

  • RFC 4122 : Spécification UUID
  • RFC 4122 Section 4.1.3 : Définition des versions UUID

Support des langages de programmation

  • JavaScript : crypto.randomUUID() (Node.js 14.17+)
  • Python : Module uuid
  • Java : java.util.UUID
  • C# : System.Guid

Dernière mise à jour : 20 janvier 2024

Was this page helpful?