UUID-Leitfaden: Versionen, Formate und Best Practices
UUIDs (Universally Unique Identifiers) sind 128-Bit-Identifikatoren, die so konzipiert sind, dass sie ĂŒber Raum und Zeit hinweg eindeutig sind â ohne eine zentrale AutoritĂ€t. Sie sind die Standardwahl fĂŒr verteilte Systeme, in denen das unabhĂ€ngige Generieren von IDs â ohne Koordination â unerlĂ€sslich ist.
UUID-Format
Eine UUID ist eine 128-Bit-Zahl, dargestellt als 32 Hexadezimalziffern in fĂŒnf Gruppen, getrennt durch Bindestriche:
550e8400-e29b-41d4-a716-446655440000
^^^^^^^^ ^^^^ ^^^^ ^^^^ ^^^^^^^^^^^^
time-low mid hi clk node
+ver +var
- Gesamt: 128 Bit (16 Bytes)
- ZeichenkettenlÀnge: 36 Zeichen (32 Hex + 4 Bindestriche)
- Version: Kodiert im 13. Zeichen (das âhi"-Nibble)
- Variante: Kodiert im 17. Zeichen
Generieren Sie UUIDs sofort mit unserem UUID-Generator.
UUID-Versionen
UUID v1: Zeitbasiert
Generiert aus dem aktuellen Zeitstempel und der MAC-Adresse des Rechners.
// Struktur: Zeitstempel (60 Bit) + Taktsequenz (14 Bit) + Knoten (48 Bit)
6ba7b810-9dad-11d1-80b4-00c04fd430c8
Vorteile: NatĂŒrlich nach Erstellungszeit sortierbar, garantierte Eindeutigkeit pro Maschine. Nachteile: Gibt MAC-Adresse preis (Datenschutzbedenken), kann Erstellungszeit verraten. Verwenden wenn: Sie Zeitreihenfolge benötigen und sich in einer kontrollierten Umgebung befinden.
UUID v4: ZufÀllig
Generiert aus kryptografisch sicheren Zufallszahlen. Dies ist die am hÀufigsten verwendete Version.
// 122 zufĂ€llige Bits (6 Bits reserviert fĂŒr Version und Variante)
f47ac10b-58cc-4372-a567-0e02b2c3d479
Vorteile: Einfach, keine Informationspreisgabe, keine Koordination erforderlich. Nachteile: Nicht sortierbar, etwas schlechtere Datenbank-Indexleistung als sequentielle IDs. Verwenden wenn: Allgemeiner Einsatz â dies ist die Standardwahl fĂŒr die meisten Anwendungen.
UUID v7: Zeitgeordnet ZufÀllig (Neuer Standard)
Die neueste Version (RFC 9562, 2024), die einen Unix-Zeitstempel mit Zufallsdaten kombiniert.
// Struktur: Zeitstempel (48 Bit) + Zufall (74 Bit)
018e7b50-4a00-7000-8000-000000000001
Vorteile: NatĂŒrlich zeitsortiert, hervorragende Datenbank-Indexleistung, keine Informationspreisgabe ĂŒber Millisekunden-PrĂ€zision hinaus. Nachteile: Neuer, einige Bibliotheken unterstĂŒtzen es möglicherweise noch nicht. Verwenden wenn: Sie eindeutige IDs benötigen, die chronologisch sortieren â ideal fĂŒr Datenbank-PrimĂ€rschlĂŒssel.
Weitere Versionen
- UUID v3: MD5-Hash eines Namensraums und Namens. Deterministisch.
- UUID v5: SHA-1-Hash eines Namensraums und Namens. Deterministisch und gegenĂŒber v3 bevorzugt.
- UUID v6: Umgeordnete v1 fĂŒr bessere Sortierbarkeit. Von v7 abgelöst.
- Nil UUID: Alles Nullen (
00000000-0000-0000-0000-000000000000). Wird als Sentinel-Wert verwendet.
Kollisionswahrscheinlichkeit
Wie wahrscheinlich ist es, dass zwei zufÀllig generierte UUIDs (v4) kollidieren? Mit 122 zufÀlligen Bits:
- Nach Generierung von 1 Milliarde UUIDs: Wahrscheinlichkeit â 1 zu 10^18
- FĂŒr eine 50%ige Kollisionswahrscheinlichkeit: benötigen Sie etwa 2,7 Ă 10^18 UUIDs
- Bei 1 Milliarde UUIDs pro Sekunde: wĂŒrde es etwa 86 Jahre dauern
FĂŒr alle praktischen Zwecke werden UUID-v4-Kollisionen nicht auftreten. Ein Hardwareausfall ist weitaus wahrscheinlicher.
UUID vs. andere ID-Formate
| Format | LĂ€nge | Sortierbar | Eindeutig | URL-sicher |
|---|---|---|---|---|
| UUID v4 | 36 Zeichen | Nein | Ja | Ja |
| UUID v7 | 36 Zeichen | Ja | Ja | Ja |
| ULID | 26 Zeichen | Ja | Ja | Ja |
| nanoid | 21 Zeichen | Nein | Wahrscheinlich | Ja |
| Auto-Increment | Variabel | Ja | Pro Tabelle | Ja |
| Snowflake ID | 18-19 Zeichen | Ja | Pro System | Ja |
ULID (Universally Unique Lexicographically Sortable Identifier)
ULIDs sind eine kompakte Alternative: 48-Bit-Zeitstempel + 80-Bit-Zufall, kodiert als 26 Crockford Base32 Zeichen. Sie sortieren lexikografisch nach Erstellungszeit.
Wann Auto-Increment-IDs verwenden
Sequentielle IDs sind einfacher und effizienter fĂŒr Einzeldatenbank-Anwendungen. Verwenden Sie UUIDs, wenn Sie:
- IDs benötigen, die von mehreren Systemen unabhÀngig generiert werden
- IDs, die externen Benutzern nicht die EinfĂŒgereihenfolge verraten
- Merge-freundliche IDs fĂŒr verteilte Datenbanken
Datenbank-LeistungsĂŒberlegungen
ZufĂ€llige UUIDs (v4) verursachen B-Tree-Index-Fragmentierung, weil EinfĂŒgungen an zufĂ€lligen Positionen erfolgen. Dies kann die Schreibleistung bei groĂen Tabellen um das 2-5-fache im Vergleich zu sequentiellen IDs verschlechtern.
Lösungen:
- UUID v7 verwenden: Zeitgeordnete UUIDs werden sequentiell eingefĂŒgt, entsprechend der Auto-Increment-Leistung
- Als BinÀr speichern:
BINARY(16)stattCHAR(36)verwenden, um 55% Speicher zu sparen - ULID verwenden: Sortierbar und kompakter als UUIDs
-- PostgreSQL: nativer UUID-Typ (16 Bytes, effizient)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
-- MySQL: als BINARY(16) speichern fĂŒr Leistung
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
UUIDs generieren
Kommandozeile
# macOS/Linux
uuidgen
# Python Einzeiler
python3 -c "import uuid; print(uuid.uuid4())"
JavaScript
// Eingebaut (Node.js 19+, moderne Browser)
crypto.randomUUID();
// FĂŒr UUID v7 (mit uuid-Paket)
import { v7 } from 'uuid';
const id = v7();
Python
import uuid
uuid.uuid4() # ZufÀllig
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com') # Namensbasiert
FĂŒr schnelle Generierung ohne Code erstellt unser UUID-Generator sofort v4-UUIDs in Ihrem Browser.
FAQ
Sollte ich UUID oder Auto-Increment-Ganzzahl fĂŒr meinen Datenbank-PrimĂ€rschlĂŒssel verwenden?
FĂŒr Einzeldatenbank-Anwendungen sind Auto-Increment-Ganzzahlen einfacher und schneller. FĂŒr verteilte Systeme, Microservices oder wenn Sie IDs clientseitig vor dem DatenbankeinfĂŒgen generieren mĂŒssen, sind UUIDs (vorzugsweise v7) die bessere Wahl. Wenn Sie PostgreSQL verwenden, macht die native UUID-UnterstĂŒtzung den Leistungsunterschied vernachlĂ€ssigbar.
Können UUIDs als Sicherheitstokens verwendet werden?
UUID v4 verwendet 122 Bit ZufĂ€lligkeit aus einer kryptografischen Quelle, was gute Entropie bietet. FĂŒr Sicherheitstokens (API-SchlĂŒssel, Sitzungs-IDs) ist es jedoch besser, zweckgebundene Token-Formate mit zusĂ€tzlichen Eigenschaften wie PrĂŒfsummen, Ablaufitkodierung oder PrĂ€fix-Identifikation zu verwenden. UUIDs sind fĂŒr IdentitĂ€t, nicht fĂŒr Authentifizierung.
Verwandte Ressourcen
- UUID-Generator â UUIDs sofort online generieren
- Hash-Algorithmen im Vergleich â Die Hash-Funktionen hinter UUID v3 und v5 verstehen
- JSON API Design Patterns â UUIDs effektiv in API-Antworten verwenden