5.7. UUID Version 7 (UUID Version 7)
5.7. UUID Version 7 (UUID Version 7)
UUIDv7 verfügt über ein zeitlich geordnetes Wertfeld, das von der weit verbreiteten und bekannten Unix-Epoch-Zeitstempelquelle abgeleitet ist, der Anzahl der Millisekunden seit Mitternacht des 1. Januar 1970 UTC, Schaltsekunden ausgeschlossen. Im Allgemeinen hat UUIDv7 verbesserte Entropie-Eigenschaften gegenüber UUIDv1 (Abschnitt 5.1) oder UUIDv6 (Abschnitt 5.6).
UUIDv7-Werte werden erstellt, indem ein Unix-Zeitstempel in Millisekunden in den signifikantesten 48 Bits zugewiesen wird und die verbleibenden 74 Bits, mit Ausnahme der erforderlichen Versions- und Variantenbits, mit Zufallsbits für jede neu generierte UUIDv7 gefüllt werden, um Eindeutigkeit gemäß Abschnitt 6.9 bereitzustellen. Alternativ KÖNNEN Implementierungen die 74 Bits gemeinsam mit einer Kombination der folgenden Unterfelder füllen, in dieser Reihenfolge vom signifikantesten Bit zum am wenigsten signifikanten, um zusätzliche Monotonie innerhalb einer Millisekunde zu garantieren:
-
Einen OPTIONALEN Submillisekunden-Zeitstempelbruch (maximal 12 Bits) gemäß Abschnitt 6.2 (Methode 3).
-
Einen OPTIONALEN sorgfältig initialisierten Zähler gemäß Abschnitt 6.2 (Methode 1 oder 2).
-
Zufallsdaten für jede neu generierte UUIDv7 für jeden verbleibenden Platz.
Implementierungen SOLLTEN UUIDv7 anstelle von UUIDv1 und UUIDv6 verwenden, wenn möglich.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unix_ts_ms |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unix_ts_ms | ver | rand_a |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var| rand_b |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| rand_b |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Abbildung 11: UUIDv7-Feld- und Bit-Layout
Felddefinitionen:
unix_ts_ms: 48-Bit-Big-Endian-Vorzeichenlose Zahl des Unix-Epoch-Zeitstempels in Millisekunden gemäß Abschnitt 6.1. Belegt Bits 0 bis 47 (Oktette 0-5).
ver: Das 4-Bit-Versionsfeld wie in Abschnitt 4.2 definiert, auf 0b0111 (7) gesetzt. Belegt Bits 48 bis 51 von Oktett 6.
rand_a: 12 Bits pseudozufälliger Daten zur Bereitstellung von Eindeutigkeit gemäß Abschnitt 6.9 und/oder optionale Konstrukte zur Garantie zusätzlicher Monotonie gemäß Abschnitt 6.2. 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.
rand_b: Die letzten 62 Bits pseudozufälliger Daten zur Bereitstellung von Eindeutigkeit gemäß Abschnitt 6.9 und/oder ein optionaler Zähler zur Garantie zusätzlicher Monotonie gemäß Abschnitt 6.2. Belegt Bits 66 bis 127 (Oktette 8-15).