UUID v4 vs v7: zufällige oder zeitlich sortierte IDs
UUID v4 vs v7: Anleitung
UUID v4 vs v7 (und GUID vs UUID): Was du nehmen solltest | We.Inc
Wie sich UUID v7 laut RFC 9562 von v4 unterscheidet, warum zeitlich sortierte IDs gut zu Datenbankschlüsseln passen, was eine GUID ist, und ein Browser-Tool, das v4- und v7-IDs erzeugt und den Zeitstempel einer v7 dekodiert.
Beide sind 128-Bit-Kennungen, geschrieben als 36 Zeichen. Eine v4-UUID besteht aus 122 Zufallsbits, neue Werte landen also irgendwo in einem sortierten Index. Eine v7-UUID beginnt mit einem 48-Bit-Unix-Zeitstempel in Millisekunden, gefolgt von Zufallsbits, daher sortieren sich die Werte ungefähr nach Erstellungszeit. RFC 9562 empfiehlt v7 gegenüber den älteren zeitbasierten Versionen v1 und v6.
v4 und v7 im Vergleich
UUID v4
UUID v7
Gebildet aus
122 Zufallsbits
48-Bit-Zeitstempel in Millisekunden plus 74 Zufallsbits
Sortierreihenfolge
Zufällig
Ungefähr nach Erstellungszeit
Verrät Erstellungszeit
Nein
Ja, auf die Millisekunde genau
In Browser eingebaut
crypto.randomUUID()
Nein, nutze ein paar Zeilen Code oder eine Bibliothek
Geeignet für
Tokens, öffentliche IDs, alles, was keine Zeitangaben verraten darf
Primärschlüssel in Datenbanken, Logs, Event-IDs
Die Wahl der UUID-Version ist vor allem eine Datenbankfrage. Zufällige v4-Schlüssel verteilen Einfügungen über den ganzen Index, während v7-Schlüssel der Reihe nach ankommen, so wie eine Auto-Increment-Zahl, ohne dass ein zentraler Zähler nötig ist. Erzeuge unten beide Arten und füge dann eine beliebige UUID ein, um ihre Version und bei v7 den Zeitpunkt ihrer Erstellung zu sehen.
Klicke auf einen Erzeugen-Button, um in deinem Browser eine neue v4- oder v7-UUID zu erstellen.
Kopiere sie oder füge eine beliebige UUID in das Dekodierfeld ein.
Der Decoder liest die Versionsziffer und die Variant-Bits und wandelt bei v7 die ersten 48 Bits in Datum und Uhrzeit um.
Erzeuge mehrere v7-Werte hintereinander und achte darauf, wie wenig sich ihre ersten Zeichen ändern.
Speichere UUIDs in einer nativen uuid-Spalte, wenn deine Datenbank eine hat. Sechzehn Bytes sind bei Größe und Vergleichen besser als ein String mit 36 Zeichen.
Verwende v7 nicht, wenn die Erstellungszeit sensibel ist, etwa bei Tokens zum Zurücksetzen von Passwörtern. Jeder, der die ID hat, kann ablesen, wann sie erstellt wurde.
crypto.randomUUID() funktioniert nur auf sicheren Seiten (HTTPS oder localhost). Über einfaches HTTP ist es nicht verfügbar.
Zwei v7-IDs aus derselben Millisekunde werden nach ihren Zufallsbits sortiert, nicht danach, welche zuerst kam, außer deine Bibliothek nutzt die optionalen Zählermethoden, die der RFC beschreibt.
Häufige Fragen
Was ist der Unterschied zwischen einer GUID und einer UUID?
In der Praxis keiner, der zählt. RFC 9562 definiert UUIDs und merkt an, dass sie auch als GUIDs bekannt sind, Globally Unique Identifiers, so der Name in Microsoft-Tools. Eine von .NET oder SQL Server erzeugte GUID ist eine UUID im selben Format mit 36 Zeichen.
Ist UUID v7 ein offizieller Standard?
Ja. RFC 9562, veröffentlicht 2024, definiert die Versionen 6, 7 und 8 neben den älteren und ersetzt RFC 4122, das Dokument, das UUIDs zuvor beschrieb.
Ist UUID v7 eindeutig genug?
Pro Millisekunde stehen 74 Zufallsbits zur Verfügung, was für fast jedes System reicht. Für Kollisionen bräuchte es enorm viele IDs, die in genau derselben Millisekunde erstellt werden.
Kann ich die Erstellungszeit aus einer v7-UUID zurückgewinnen?
Ja. Die ersten 12 Hex-Ziffern sind die Unix-Zeit in Millisekunden. Füge eine UUID in den Decoder oben ein, um sie als Datum zu sehen, oder parse diese Ziffern selbst als Hexadezimalzahl.
Sollte ich bestehende v4-Schlüssel auf v7 umstellen?
Meistens nicht. Beides sind gültige UUIDs und können in derselben Spalte stehen, also können neue Zeilen v7 nutzen, während alte Zeilen ihre v4-Werte behalten. Primärschlüssel umzuschreiben heißt, jeden Fremdschlüssel umzuschreiben, der auf sie zeigt.
Warum die Reihenfolge für Datenbanken wichtig ist
Die meisten Datenbanken halten Primärschlüssel in einem B-Baum. Ist jeder neue Schlüssel größer als der letzte, landen Einfügungen am Ende des Baums, und kürzlich geschriebene Seiten bleiben im Speicher. Zufällige Schlüssel erzwingen Schreibvorgänge in Seiten überall im Baum, was mit wachsender Tabelle mehr Page Splits und mehr Lesezugriffe auf die Festplatte bedeutet.
RFC 9562 nennt dieses Lokalitätsproblem als einen der Gründe für die zeitlich sortierten Versionen, und v7 ist die Version, die es für neue Systeme empfiehlt.
Den Aufbau lesen
In der Textform ist die 13. Hex-Ziffer (die erste der dritten Gruppe) die Version, eine v7-UUID hat dort also immer eine 7 und eine v4 eine 4. Die erste Ziffer der vierten Gruppe ist bei der Standardvariante 8, 9, a oder b.
Bei v7 sind die 12 Ziffern vor der Version der Zeitstempel. Alles nach der Versionsziffer ist zufällig, abgesehen von den zwei Variant-Bits.
Alle acht UUID-Versionen
UUID-Versionen in RFC 9562
Version
Gebildet aus
Hinweise
Gregorianische Zeit plus eine Node-ID, oft die MAC-Adresse
Veraltet, besser v7
DCE-Security-Version, nicht in RFC 9562 spezifiziert
Selten
Namensbasiert, MD5-Hash aus einem Namespace und einem Namen
Gleiche Eingabe, gleiche UUID
Zufällige oder pseudozufällige Bits
Der übliche Standard
Namensbasiert, SHA-1-Hash aus einem Namespace und einem Namen
Besser als v3
Zeitstempel von v1 umsortiert, damit Werte nach Zeit sortiert sind
Für neue Systeme besser v7
Unix-Epoch-Zeit in Millisekunden plus Zufallsbits
Sortierbare Schlüssel
Eigenes Layout, von der Implementierung gewählt
Experimentelle oder herstellerspezifische Formate
Code zum Kopieren
UUID v4 im Browser oder in Node
In aktuelle Browser auf sicheren Seiten und ab Node 19 über das globale crypto-Objekt eingebaut. Gibt einen String mit 36 Zeichen zurück.
UUID v7 ohne Bibliothek
Schreibt die aktuelle Zeit in die ersten sechs Bytes und setzt dann die Versions- und Variant-Bits. Der Rest bleibt zufällig.
Die Zeit aus einer v7-UUID lesen
Die ersten 12 Hex-Ziffern sind Millisekunden seit 1970, ihr Parsen ergibt also ein Date.
Erzeugen und dekodieren
v4 erzeugen
v7 erzeugen
Erzeugt
Klicke auf einen Button, um eine UUID zu erstellen. Sie entsteht in deinem Browser und wird nirgendwohin gesendet.
UUID zum Dekodieren einfügen
Version: {v}
RFC 9562 (die Standardvariante)
Nicht die Variante aus RFC 9562
Erstellt: {v} (UTC)
Diese Version enthält keinen Unix-Zeitstempel.
Das ist keine UUID. Erwartet werden 32 Hex-Ziffern in Gruppen von 8-4-4-4-12.