Zum Hauptinhalt springen

5.6. UUID Version 6 (UUID Version 6)

5.6. UUID Version 6

UUIDv6 ist eine feldkompatible Version von UUIDv1 (Abschnitt 5.1), neu angeordnet für verbesserte DB-Lokalität. Es wird erwartet, dass UUIDv6 hauptsächlich in Kontexten implementiert wird, in denen UUIDv1 verwendet wird. Systeme, die kein Legacy-UUIDv1 beinhalten, SOLLTEN stattdessen UUIDv7 (Abschnitt 5.7) verwenden.

Anstatt den Zeitstempel in die niedrigen, mittleren und hohen Abschnitte von UUIDv1 aufzuteilen, ändert UUIDv6 diese Sequenz so, dass Zeitstempel-Bytes vom signifikantesten zum am wenigsten signifikanten gespeichert werden. Das heißt, bei einem 60-Bit-Zeitstempelwert, wie für UUIDv1 in Abschnitt 5.1 angegeben, werden für UUIDv6 zuerst die ersten 48 signifikantesten Bits gespeichert, gefolgt vom 4-Bit-Versionsfeld (gleiche Position), gefolgt von den verbleibenden 12 Bits des ursprünglichen 60-Bit-Zeitstempels.

Die Clock-Sequence- und Node-Bits bleiben von ihrer Position in Abschnitt 5.1 unverändert.

Die Clock-Sequence- und Node-Bits SOLLTEN für jede neu generierte UUIDv6 auf einen pseudozufälligen Wert zurückgesetzt werden; Implementierungen KÖNNEN jedoch das alte Clock-Sequence- und MAC-Adress-Verhalten aus Abschnitt 5.1 beibehalten. Für weitere Informationen zur Verwendung von MAC-Adressen innerhalb von UUIDs siehe Abschnitt 8.

Das Format für die 16-Byte-, 128-Bit-UUIDv6 ist in Abbildung 10 dargestellt.

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| time_high |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| time_mid | ver | time_low |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var| clock_seq | node |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| node |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Abbildung 10: UUIDv6 Feld- und Bit-Layout

Felddefinitionen:

time_high: Die signifikantesten 32 Bits des 60-Bit-Startzeitstempels. Belegt Bits 0 bis 31 (Oktette 0-3).

time_mid: Die mittleren 16 Bits des 60-Bit-Startzeitstempels. Belegt Bits 32 bis 47 (Oktette 4-5).

ver: Das 4-Bit-Versionsfeld, wie in Abschnitt 4.2 definiert, auf 0b0110 (6) gesetzt. Belegt Bits 48 bis 51 von Oktett 6.

time_low: 12 Bits, die die am wenigsten signifikanten 12 Bits des 60-Bit-Startzeitstempels enthalten. Belegt Bits 52 bis 63 (Oktette 6-7).

var: Das 2-Bit-Variantenfeld, wie in Abschnitt 4.1 definiert, auf 0b10 gesetzt. Belegt Bits 64 und 65 von Oktett 8.

clock_seq: Die 14 Bits, die die Clock-Sequence enthalten. Belegt Bits 66 bis 79 (Oktette 8-9).

node: 48-Bit räumlich eindeutiger Identifikator. Belegt Bits 80 bis 127 (Oktette 10-15).

Bei UUIDv6 sind die Schritte zum Aufteilen des Zeitstempels in time_high und time_mid OPTIONAL, da die 48 Bits von time_high und time_mid in derselben Reihenfolge bleiben. Ein zusätzlicher Schritt zum Aufteilen der ersten 48 Bits des Zeitstempels in die signifikantesten 32 Bits und die am wenigsten signifikanten 16 Bits erweist sich als nützlich, wenn eine bestehende UUIDv1-Implementierung wiederverwendet wird.