Welche Art soll ich nehmen?
| UUID v4 | UUID v7 | ULID | |
|---|---|---|---|
| Inhalt | 122 Zufallsbits | 48-Bit-ms-Zeitstempel + 74 Zufallsbits | 48-Bit-ms-Zeitstempel + 80 Zufallsbits |
| Nach Zeit sortierbar | Nein | Ja | Ja |
| Textform | 8-4-4-4-12 Hex | 8-4-4-4-12 Hex | 26 Zeichen Crockford-Base32 |
| Standard | RFC 4122 / 9562 | RFC 9562 (2024) | Community-Spezifikation |
| Datenbankeignung | Schlecht als Primärschlüssel: zufällige Inserts fragmentieren B-Baum-Indizes | Gut: neue Zeilen landen am Ende des Index | Gut, braucht aber eine 128-Bit-Spalte oder 26-Zeichen-String |
Für ein neues System ist UUID v7 die vernünftige Vorgabe: Es ist eine Standard-UUID, jede Datenbank und Sprache akzeptiert sie, und sie hält Indizes kompakt. Nehmen Sie v4, wenn die ID nicht verraten darf, wann sie erzeugt wurde. ULID ist eine gute Wahl, wo die kürzere, URL-freundliche Textform zählt und das Ökosystem sie bereits nutzt.
Die Bits lesen
In xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx ist die Stelle M die Version (4 oder 7), und die ersten Bits von N sind die Variante (8, 9, a oder b bei Standard-UUIDs). Bei einer v7 sind die ersten 12 Hex-Stellen die Unix-Zeit in Millisekunden; bei einer v1 ist die Zeit über drei Felder verstreut, und die letzten 12 Stellen sind meist die MAC-Adresse des erzeugenden Rechners. Der Inspektor dekodiert all das.
Kollisionen
Eine v4-UUID hat 2¹²² Möglichkeiten. Für eine 50-prozentige Chance auf eine einzige Kollision müssten Sie etwa 2,7 × 10¹⁸ davon erzeugen, grob eine Milliarde pro Sekunde über 85 Jahre. In der Praxis ist das Risiko eine schlechte Zufallsquelle, nicht die Mathematik; deshalb nutzt diese Seite crypto.getRandomValues und nicht Math.random.
Fragen
Was ist der Unterschied zwischen UUID und GUID?
Praktisch keiner. GUID ist Microsofts Name für dieselbe 128-Bit-Kennung. Windows-Werkzeuge schreiben sie oft in Großbuchstaben mit geschweiften Klammern, was die Formatoption hier nachbildet.
Sind diese UUIDs wirklich zufällig?
Die Zufallsbits stammen aus dem kryptografisch sicheren Generator des Browsers (WebCrypto), derselben Quelle wie für Schlüssel. Sie werden nicht aus Ihrer Uhr oder etwas Vorhersagbarem abgeleitet, außer dass v7 und ULID absichtlich die aktuelle Zeit enthalten.
Lässt sich eine UUID auf mich zurückführen?
Eine v4 nicht. Eine v7 oder ULID verrät, wann sie erzeugt wurde. Eine v1 kann die MAC-Adresse des erzeugenden Rechners enthalten, weshalb v1 aus der Mode kam.
Soll ich eine UUID als Primärschlüssel in der Datenbank verwenden?
Ja, wenn IDs von Clients oder über Dienste hinweg erzeugt werden müssen, aber bevorzugt v7, damit Inserts sequentiell sind. Speichern Sie sie in einer nativen 16-Byte-UUID-Spalte (PostgreSQL uuid, MySQL BINARY(16)) statt als 36-Zeichen-String.
Was ist die Nil-UUID?
00000000-0000-0000-0000-000000000000, definiert als Platzhalter für „kein Wert“. RFC 9562 definiert außerdem eine Max-UUID aus lauter Einsen.