5.7. UUID Version 7 (UUID Versione 7)
5.7. UUID Version 7 (UUID Versione 7)
UUIDv7 presenta un campo di valore ordinato nel tempo derivato dalla fonte di timestamp Unix Epoch ampiamente implementata e ben nota, il numero di millisecondi dalla mezzanotte del 1 gennaio 1970 UTC, secondi intercalari esclusi. In generale, UUIDv7 ha caratteristiche di entropia migliorate rispetto a UUIDv1 (Sezione 5.1) o UUIDv6 (Sezione 5.6).
I valori UUIDv7 vengono creati allocando un timestamp Unix in millisecondi nei 48 bit più significativi e riempiendo i restanti 74 bit, escludendo i bit di versione e variante richiesti, con bit casuali per ogni nuovo UUIDv7 generato per fornire unicità secondo la Sezione 6.9. In alternativa, le implementazioni POSSONO riempire i 74 bit, congiuntamente, con una combinazione dei seguenti sottocampi, in questo ordine dal bit più significativo al meno significativo, per garantire ulteriore monotonicità entro un millisecondo:
-
Una frazione di timestamp sotto-millisecondo OPZIONALE (massimo 12 bit) secondo la Sezione 6.2 (Metodo 3).
-
Un contatore attentamente inizializzato OPZIONALE secondo la Sezione 6.2 (Metodo 1 o 2).
-
Dati casuali per ogni nuovo UUIDv7 generato per qualsiasi spazio rimanente.
Le implementazioni DOVREBBERO utilizzare UUIDv7 invece di UUIDv1 e UUIDv6 se possibile.
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figura 11: Layout dei campi e dei bit UUIDv7
Definizioni dei campi:
unix_ts_ms: Numero senza segno big-endian a 48 bit del timestamp Unix Epoch in millisecondi secondo la Sezione 6.1. Occupa i bit da 0 a 47 (ottetti 0-5).
ver: Il campo versione a 4 bit come definito dalla Sezione 4.2, impostato su 0b0111 (7). Occupa i bit da 48 a 51 dell'ottetto 6.
rand_a: 12 bit di dati pseudocasuali per fornire unicità secondo la Sezione 6.9 e/o costrutti opzionali per garantire ulteriore monotonicità secondo la Sezione 6.2. Occupa i bit da 52 a 63 (ottetti 6-7).
var: Il campo variante a 2 bit come definito dalla Sezione 4.1, impostato su 0b10. Occupa i bit 64 e 65 dell'ottetto 8.
rand_b: I 62 bit finali di dati pseudocasuali per fornire unicità secondo la Sezione 6.9 e/o un contatore opzionale per garantire ulteriore monotonicità secondo la Sezione 6.2. Occupa i bit da 66 a 127 (ottetti 8-15).