RunToolz iconRunToolz
Welcome to RunToolz!
UUIDDatenbankenAPI-Design

UUIDs: Wenn Auto-Increment nicht ausreicht

Warum eindeutige Identifikatoren wichtig sind und wann du sie statt sequenzieller IDs verwenden solltest.

RunToolz Team15. Januar 20263 min read

Deine Datenbank verwendet auto-inkrementierende IDs. 1, 2, 3, 4... Einfach.

Dann führst du zwei Datenbanken zusammen. Oder exponierst IDs in URLs. Oder jemand findet heraus, dass er Daten anderer Nutzer erraten kann, indem er die ID in der URL inkrementiert.

Sequenzielle IDs haben Probleme. UUIDs lösen einige davon.

Was ist eine UUID?

Universally Unique Identifier. Eine 128-Bit-Zahl, typischerweise als 32 Hex-Zeichen mit Bindestrichen angezeigt:

550e8400-e29b-41d4-a716-446655440000

Die Mathematik hinter UUID-Generierung macht Kollisionen astronomisch unwahrscheinlich. Du kannst UUIDs auf verschiedenen Maschinen, zu verschiedenen Zeiten, ohne Koordination generieren, und sie kollidieren nicht.

Möchten Sie es selbst ausprobieren?UUID generieren

Warum nicht einfach Auto-Increment verwenden?

Sicherheit. Sequenzielle IDs leaken Informationen. Wenn deine Nutzer-ID 15847 ist, wissen Angreifer, dass es mindestens 15846 andere Nutzer gibt. Sie können Ressourcen durch Probieren sequenzieller IDs aufzählen.

Verteilte Systeme. Mehrere Server, die IDs generieren, brauchen Koordination, um Duplikate zu vermeiden. UUIDs brauchen keine Koordination.

Daten zusammenführen. Datenbanken mit sequenziellen IDs zu kombinieren ist ein Albtraum. UUIDs führen sich sauber zusammen.

Offline-Erstellung. Mobile Apps können Datensätze offline mit UUIDs erstellen. Kein Warten auf eine vom Server zugewiesene ID nötig.

UUID-Versionen

Nicht alle UUIDs werden gleich erstellt.

Version 1: Basiert auf Timestamp und MAC-Adresse. Eindeutig, aber verrät wann und wo es erstellt wurde.

Version 4: Zufällig. Am häufigsten. Kein Informations-Leak.

Version 7: Timestamp-basiert, aber sortierbar. Neuere Datenbanken profitieren davon.

Für die meisten Anwendungen ist Version 4 (zufällig) die richtige Wahl.

Die Kompromisse

UUIDs sind nicht kostenlos.

Größe. 128 Bits vs. 32 Bits für einen Integer. Größere Indizes, mehr Speicher.

Lesbarkeit. user/15 ist einfacher zu merken als user/550e8400-e29b-41d4-a716-446655440000.

Performance. Zufällige UUIDs verursachen Index-Fragmentierung in einigen Datenbanken. UUID v7 adressiert das.

Debugging. Logs nach einer UUID zu durchsuchen ist mühsam verglichen mit einfachen Zahlen.

Wann was verwenden

Verwende Auto-Increment wenn:

  • Nur intern, nie Nutzern exponiert
  • Einfache Anwendungen, einzelne Datenbank
  • Menschliche Lesbarkeit wichtig ist

Verwende UUIDs wenn:

  • IDs in URLs oder APIs erscheinen
  • Mehrere Systeme Datensätze erstellen
  • Security through Obscurity hilft
  • Daten zusammenführen möglich ist

Praktische Tipps

Verwende UUIDs nicht als Primärschlüssel in MySQL. Verwende sie stattdessen als sekundäre eindeutige Spalte. MySQLs geclusterte Indizes performen schlecht mit zufälligen UUIDs.

Erwäge UUID v7. Wenn deine Datenbank es unterstützt, geben Timestamp-sortierbare UUIDs dir das Beste aus beiden Welten.

Entferne Bindestriche für URLs. 550e8400e29b41d4a716446655440000 ist immer noch eine gültige UUID und kürzer in URLs.


UUIDs lösen echte Probleme, die sequenzielle IDs nicht können. Aber sie sind nicht immer die richtige Wahl. Wähle basierend auf deinen tatsächlichen Anforderungen, nicht weil UUIDs professioneller klingen.