Was ist UUID v6?
UUID v6 ist in RFC 9562 definiert und behebt genau einen Mangel von v1: die fehlende Sortierbarkeit. Es verwendet dieselben Felder und denselben gregorianischen Zeitstempel, ordnet ihn aber höchstwertig zuerst an.
Das Ergebnis lässt sich als Zeichenkette sortieren und ergibt dabei die chronologische Reihenfolge - ohne die Bezeichner zu dekodieren.
Der entscheidende Unterschied zu v1
Bei v1 steht time_low vorn, also der Teil des Zeitstempels, der sich am schnellsten ändert. Zwei kurz hintereinander erzeugte v1-UUIDs unterscheiden sich damit bereits in den ersten Zeichen und sortieren praktisch zufällig.
v6 dreht das um: die oberen 48 Bit des Zeitstempels stehen zuerst, die unteren zwölf danach. Aufeinanderfolgende Werte teilen damit einen gemeinsamen Präfix - genau die Eigenschaft, die B-Baum-Indizes belohnen.
Der innere Aufbau
Die Felder heißen time_high (32 Bit), time_mid (16 Bit) und time_low_and_version (12 Bit Zeitstempel plus 4 Bit Version). Danach folgen wie bei v1 14 Bit Taktsequenz, 2 Bit Variante und 48 Bit Knotenkennung.
Auch hier gilt: dieser Generator setzt eine zufällige Knotenkennung ein und gibt keine MAC-Adresse preis.
Wann v6 die richtige Wahl ist
v6 ist vor allem ein Migrationspfad. Wenn ein bestehendes System v1 erzeugt und unter Index-Fragmentierung leidet, lässt sich auf v6 wechseln, ohne Felder, Datentypen oder die Semantik der Knotenkennung anzurühren.
Beginnen Sie dagegen auf einem leeren Blatt, hat v7 die klaren Vorteile: Unix-Epochenbeginn statt gregorianischem Versatz, 62 Bit Zufall statt 48 Bit Knotenkennung und breitere Bibliotheksunterstützung.
Datenbankleistung
Weil neue Werte immer am rechten Rand des Index landen, verhält sich v6 beim Einfügen fast wie ein aufsteigender Zähler: wenige Seitenteilungen, hohe Füllrate, warmer Cache. Gegenüber v1 oder v4 als Primärschlüssel ist der Unterschied in großen Tabellen deutlich messbar.
Umwandlung zwischen v1 und v6
Die Umwandlung ist reine Bitverschiebung und in beide Richtungen verlustfrei: Zeitstempel aus den drei v1-Feldern zusammensetzen, neu aufteilen, Versionsziffer anpassen. Taktsequenz und Knotenkennung werden unverändert übernommen. Damit lässt sich ein bestehender Datenbestand nachträglich sortierbar machen.