Was ist eine UUID und wann sollten Sie eine verwenden?
Öffnen Sie fast jede Datenbank, API oder App und Sie werden lange Zeichenfolgen wie 550e8400-e29b-41d4-a716-446655440000 finden. Das sind UUIDs, und sie lösen ein trügerisch kniffliges Problem: Wie generiert man eine eindeutige Kennung, ohne dass eine zentrale Behörde sie koordiniert? Hier erfahren Sie, wie sie funktionieren und wann Sie sie erreichen können.
Was eine UUID ist
UUID steht für Universally Unique Identifier – ein 128-Bit-Wert, der normalerweise als 32 Hexadezimalzeichen in fünf durch Bindestriche getrennten Gruppen angezeigt wird. Der Sinn liegt im Namen: Es ist so konzipiert, dass es räumlich und zeitlich eindeutig ist, sodass zwei Systeme an jedem Ort unabhängig voneinander UUIDs generieren können und niemals kollidieren.
Wie kann es ohne Koordination einzigartig sein?
Der häufigste Typ, Version 4, ist fast vollständig zufällig – 122 Zufallsbits. Die Anzahl der möglichen Werte ist so astronomisch groß (ungefähr 5 Undecillions), dass die Wahrscheinlichkeit, dass zwei zufällig generierte UUIDs übereinstimmen, praktisch Null ist, selbst über Milliarden von ihnen hinweg. Sie brauchen keinen zentralen Schalter; Allein der Zufall macht Kollisionen praktisch unmöglich. Generieren Sie sofort eine mit unserem UUID-Generator.
UUID vs. automatisch inkrementierende IDs
Herkömmliche Datenbanken verwenden sequentielle IDs (1, 2, 3…). Sie sind einfach und kompakt, haben aber Nachteile, die UUIDs vermeiden:
- Keine Koordination erforderlich: Mehrere Server können Datensätze offline erstellen und später ohne ID-Konflikte zusammenführen.
- Nicht erraten: Sequentielle IDs geben Informationen preis (ein Konkurrent kann sehen, dass Sie „Bestellnummer 1043“ haben) und sind leicht aufzuzählen; UUIDs sind es nicht.
- Überall generiert: Der Client kann die ID erstellen, bevor er mit dem Server kommuniziert.
Wann soll welches verwendet werden?
Verwenden Sie UUIDs für verteilte Systeme, öffentlich zugängliche Identifikatoren, das Zusammenführen von Daten aus mehreren Quellen oder überall dort, wo Sie nicht möchten, dass IDs erraten werden können. Bleiben Sie bei der automatischen Inkrementierung von Ganzzahlen, wenn Sie eine einzige Datenbank haben, kompakte Schlüssel wünschen und für Menschen lesbare IDs wertschätzen. Viele Systeme verwenden beides – einen internen Ganzzahlschlüssel und eine externe UUID.
Ein Hinweis zu den Kompromissen
UUIDs sind größer als Ganzzahlen (16 Byte gegenüber 4–8), was sich geringfügig auf die Speicher- und Indexleistung im großen Maßstab auswirkt. Bei den meisten Anwendungen ist der Unterschied vernachlässigbar und die Vorteile überwiegen, aber es lohnt sich zu wissen.
Die UUID-Versionen, denen Sie tatsächlich begegnen werden
Nicht alle UUIDs sind zufällig. Version 4 (zufällig) ist bei weitem die häufigste und wird von den meisten Tools zum „Generieren einer UUID“ erzeugt. Version 1 bettet einen Zeitstempel und eine Maschinenkennung ein, wodurch die Sortierung möglich ist, jedoch Informationen verloren gehen können. Die neuere Version 7 ist zeitlich geordnet und zufällig – immer beliebter, da sie chronologisch sortiert und dennoch nicht erraten werden kann, was die Datenbankleistung verbessert. Für die meisten Anforderungen ist Version 4 die sichere Standardeinstellung. Greifen Sie zu Version 7, wenn Sie eine datenbankfreundliche Bestellung wünschen.
UUIDs und Datenbankleistung
Ein echter Kompromiss: Zufällige v4-UUIDs als Primärschlüssel können die Schreibleistung der Datenbank beeinträchtigen, da jede Einfügung an einer zufälligen Stelle im Index landet, anstatt wie eine sequentielle Ganzzahl sauber am Ende angehängt zu werden. Im kleinen Maßstab ist dies irrelevant, aber bei Millionen von Zeilen ist es wichtig – genau aus diesem Grund gibt es zeitlich geordnete v7-UUIDs. Ein gängiges Muster ist ein interner Auto-Inkrementierungsschlüssel für die Leistung plus eine externe UUID für öffentlich zugängliche IDs.
Sind Kollisionen jemals möglich?
Praktisch nein. Die Anzahl der zufälligen v4-UUIDs ist so groß (2¹²²), dass man jahrelang Milliarden pro Sekunde erzeugen könnte, ohne mit einem Zusammenstoß zu rechnen – die Wahrscheinlichkeit ist vergleichbar mit einem Meteoriteneinschlag. Bei normaler Verwendung müssen Sie nicht nach Duplikaten suchen. Diese Kollisionsresistenz ohne zentrale Koordination ist der Grund dafür, dass UUIDs in verteilten Systemen so nützlich sind.
Fazit
Eine UUID ist eine 128-Bit-Kennung, die eindeutig genug ist, um überall ohne Koordination generiert zu werden. Greifen Sie darauf zu, wenn Sie verteilte, nicht zu erratende oder vom Kunden generierte IDs benötigen. Behalten Sie einfache Ganzzahlen bei, wenn Sie eine Datenbank haben und kompakte, lesbare Schlüssel benötigen. Weitere praktische Entwicklungsdienstprogramme finden Sie in unserem Entwickler-Toolkit.