Was ist eine UUID?
Eine UUID (Universally Unique Identifier) ist ein 128-Bit-Bezeichner, der ohne zentrale Koordination über Raum und Zeit einzigartig sein soll. Das Ergebnis ist eine 36-Zeichen-Zeichenkette im Format:
550e8400-e29b-41d4-a716-446655440000
Sie kodiert 32 Hexadezimalziffern in fünf Gruppen, getrennt durch Bindestriche: 8-4-4-4-12.
UUID-Versionen Erklärt
UUID v1 — Zeitbasiert + MAC-Adresse
Kombiniert den aktuellen Zeitstempel mit der MAC-Adresse der Netzwerkschnittstelle. Problem: Gibt die MAC-Adresse und den genauen Erstellungszeitpunkt preis — ein Datenschutzproblem.
UUID v4 — Zufällig (am häufigsten verwendet)
Füllt 122 Bits mit kryptografisch sicheren Zufallsdaten. Kein Zustand, kein Netzwerk, keine Koordination erforderlich. Die Standardwahl für die meisten Anwendungsfälle.
UUID v5 — Namespace + SHA-1
Deterministisch: gleicher Namespace + Name = immer gleiche UUID. Bevorzugen Sie v5 gegenüber v3 (MD5 ist veraltet).
UUID v7 — Zeitgeordnet (neuer Standard)
Verwendet einen Unix-Millisekunden-Zeitstempel in den höchstwertigen Bits. UUIDs sind sortierbar und verbessern die B-Baum-Indexleistung in Datenbanken erheblich.
Warum UUIDs Verwenden?
- Keine zentrale Koordination: Jeder Client oder Microservice kann unabhängig eine UUID generieren.
- Sicherheit durch Opazität: Sequentielle Integer-IDs verraten Ihr Datenvolumen. UUIDs enthüllen nichts.
- Datenbank-Zusammenführung: UUID-verschlüsselte Tabellen lassen sich ohne Konflikte zusammenführen.
- Offline-Generierung: Mobile Apps können offline Datensätze erstellen und später synchronisieren.
- Branchenstandard: Integrierte Unterstützung in jeder großen Datenbank und jedem Framework.
Wann KEINE UUIDs Verwenden?
- Speicher-Overhead: Verwenden Sie
BINARY(16)in MySQL oder den nativenuuid-Typ in PostgreSQL stattVARCHAR(36). - URL-Slugs: Zu lang und nicht einprägsam. Verwenden Sie lesbare Slugs für benutzerorientierte URLs.
- Index-Fragmentierung mit v4: Für schreibintensive Tabellen verwenden Sie UUID v7 oder ULID.
VARCHAR(36) in hochvolumigen Tabellen. Verwenden Sie BINARY(16) mit UUID_TO_BIN(uuid, 1).
UUIDs im Code Generieren
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();
Best Practices
- Als Binary speichern:
BINARY(16)oder nativeruuid-Typ. - v4 für die meisten Fälle verwenden.
- v7 für Datenbank-Primärschlüssel verwenden.
- v1 in datenschutzsensiblen Kontexten vermeiden.
- UUID-Format bei der Eingabe validieren.
- Immer Kleinschreibung verwenden.
Häufig Gestellte Fragen
Können zwei UUIDs jemals gleich sein?
Theoretisch ja. Die Kollisionswahrscheinlichkeit beträgt ca. 1 zu 5,3×1036. In der Praxis werden Sie in keinem realen System auf eine Kollision stoßen.
v4 oder v7 für Datenbank-Primärschlüssel?
v7 für Primärschlüssel. v4 fügt an zufälligen Positionen in B-Baum-Indizes ein. v7 garantiert Einfügungen am Ende des Index.
Sind UUIDs Groß-/Kleinschreibungsempfindlich?
Nein. Die Spezifikation ist Groß-/Kleinschreibungsunempfindlich. Konventionell immer Kleinbuchstaben verwenden.