Was ist UUID/GUID?
UUID (Universally Unique Identifier) und GUID (Globally Unique Identifier) sind austauschbare Begriffe für 128-Bit-eindeutige Kennungen. Sie wurden entwickelt, um eindeutige IDs ohne zentrale Koordination zu generieren und werden häufig in Datenbanken, REST-APIs und verteilten Systemen verwendet.
UUID-Versionen
UUID v4 - Zufällig (Empfohlen)
Zufällig generiert mit starker Kryptografie. Kollisionswahrscheinlichkeit: ~1 zu 2¹²² (Billionen von Billionen). Ideal für die meisten Fälle: Primärschlüssel, Sitzungstoken, Ressourcenkennungen.
Beispiel: 550e8400-e29b-41d4-a716-446655440000
UUID v1 - Timestamp-basiert
Enthält Zeitstempel (60 Bit) + MAC-Adresse des Computers (48 Bit) + Zähler. Vorteil: chronologisch sortierbar. Nachteil: offenbart Systeminformationen (MAC-Adresse, Erstellungszeit).
Beispiel: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Andere Versionen (v3, v5, v6, v7)
v3/v5: Generiert durch Hash (MD5/SHA-1) eines Namespace + Name. Deterministisch (gleiche Eingabe = gleiche UUID). v6/v7: Neuere Vorschläge, die sortierbaren Zeitstempel mit sicherer Zufälligkeit kombinieren.
Beispiel:
Häufige Anwendungsfälle
🗄️ Datenbank-Primärschlüssel
Ersetzen Sie Auto-Increment durch UUIDs, um das Zusammenführen von Daten zwischen Umgebungen (dev, staging, prod) und horizontales Sharding zu erleichtern. MongoDB, PostgreSQL und MySQL unterstützen es nativ.
🔗 REST-Ressourcen-URLs
/api/users/550e8400-e29b-41d4-a716-446655440000
UUIDs in URLs verhindern Enumerationsangriffe und halten URLs unvorhersehbar.
🎫 Sitzungs- und Authentifizierungstoken
OAuth-Token, Sitzungs-IDs, Reset-Token. UUIDs sind kryptografisch sicher und unmöglich zu erraten (im Gegensatz zu numerischen Sequenzen).
📦 Ereignis-/Nachrichtenkennungen
Ereignisverfolgung in Microservices, Nachrichtenwarteschlangen (RabbitMQ, Kafka), verteilten Logs. Korrelations-IDs zwischen Diensten.
📁 Eindeutige Dateinamen
Bild-Uploads, Backups, temporäre Dateien. Verhindert Konflikte und ermöglicht gleichzeitige Uploads ohne Sperre.
UUID vs Auto-Increment: Vor- und Nachteile
| Merkmal | UUID | Auto-Increment (INT) |
|---|---|---|
| Größe | 16 Bytes (128 Bit) | 4 Bytes (32 Bit) oder 8 Bytes (64 Bit) |
| Verteilte Generierung | ✓ Ja, ohne Koordination | ✗ Erfordert zentrale Steuerung |
| Vorhersagbarkeit | Unvorhersehbar (sicher) | Vorhersehbar (Enumerationsrisiko) |
| Index-Leistung | Langsamer (128 zufällige Bits) | Schneller (sequenziell, cache-freundlich) |
| Chronologische Sortierung | Nein (v4), Ja (v1, v6, v7) | Ja (sequenziell) |
| Datenbank-Zusammenführung | ✓ Trivial (keine Kollision) | ✗ Komplex (ID-Konflikte) |
| Ideal für | Verteilte Systeme, APIs, Sicherheit | Monolithische Systeme, kritische Leistung |
Wie man UUID in verschiedenen Sprachen verwendet
JavaScript/Node.js
// Native (Node.js 14.17+)
import { randomUUID } from 'crypto';
const uuid = randomUUID();
// Mit 'uuid' Bibliothek
import { v4 as uuidv4 } from 'uuid';
const uuid = uuidv4();Python
import uuid # UUID v4 uuid_v4 = uuid.uuid4() print(uuid_v4) # 550e8400-e29b-41d4-a716-446655440000 # UUID v1 uuid_v1 = uuid.uuid1() print(uuid_v1) # 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Java
import java.util.UUID; // Zufällige UUID UUID uuid = UUID.randomUUID(); System.out.println(uuid.toString());
PostgreSQL
-- Erweiterung aktivieren CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- UUID generieren SELECT uuid_generate_v4(); -- Tabelle mit UUID erstellen CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), name VARCHAR(100) );
FAQ - Häufig Gestellte Fragen
1. Sind UUIDs wirklich eindeutig? Kann es Kollisionen geben?
UUIDs v4 haben 2¹²² mögliche Kombinationen. Die Wahrscheinlichkeit einer Kollision ist astronomisch niedrig (1 zu 5 Milliarden nach Generierung von 1 Milliarde UUIDs). Für praktische Zwecke betrachten Sie sie als eindeutig. Moderne Datenbanken erkennen Kollisionen durch UNIQUE-Constraints.
2. Ist UUID v1 sicher? Kann ich es in der Produktion verwenden?
UUID v1 offenbart Erstellungszeitstempel und MAC-Adresse der Maschine, was als Informationsleck gilt. Verwenden Sie es nicht für Sicherheitstoken oder in Kontexten, in denen Privatsphäre kritisch ist. Bevorzugen Sie v4 für Sicherheit oder v6/v7, wenn Sie chronologische Sortierung ohne Offenlegung der MAC-Adresse benötigen.
3. Beeinträchtigt UUID die Datenbankleistung?
Ja, aber im Allgemeinen akzeptabel. Zufällige UUIDs verursachen B-Tree-Index-Fragmentierung (nicht sequenziell). Für PostgreSQL verwenden Sie UUID v7 oder ULID (Universally Unique Lexicographically Sortable Identifier). Für extreme Leistungsfälle (Milliarden von Datensätzen) behalten Sie Auto-Increment bei.
4. Soll ich Bindestriche verwenden oder entfernen?
Hängt vom Kontext ab. Mit Bindestrichen (RFC 4122-Standard): lesbarer, kompatibel mit Standardbibliotheken. Ohne Bindestriche: spart 4 Bytes bei String-Speicherung, nützlich für kurze URLs oder Token. PostgreSQL speichert binär (16 Bytes) unabhängig von der Formatierung.
5. Kann ich UUID als URL-Verkürzer verwenden?
Technisch ja, aber ineffizient. UUIDs haben 36 Zeichen (mit Bindestrichen) oder 32 ohne. Für URL-Verkürzer verwenden Sie kürzere Kodierungen: base62 (A-Za-z0-9) generiert 6-8 Zeichen IDs, ausreichend für Milliarden von URLs.
6. Funktioniert UUID in Offline-Systemen?
Ja! Das ist einer der Hauptvorteile. Offline-Clients (mobile Apps, IoT) generieren UUIDs lokal ohne Serververbindung. Bei der Synchronisierung gibt es keine ID-Konflikte. Ideal für CRDTs und Multi-Device-Sync.