5.6. UUID Version 6 (UUID versione 6)
5.6. UUID Version 6
UUIDv6 è una versione compatibile a livello di campo con UUIDv1 (sezione 5.1), riordinata per una migliore località del database. È previsto che UUIDv6 sarà implementato principalmente in contesti in cui viene utilizzato UUIDv1. I sistemi che non coinvolgono UUIDv1 legacy DOVREBBERO utilizzare UUIDv7 (sezione 5.7) invece.
Invece di dividere il timestamp nelle sezioni bassa, media e alta da UUIDv1, UUIDv6 cambia questa sequenza in modo che i byte del timestamp siano memorizzati dal più significativo al meno significativo. Cioè, dato un valore di timestamp di 60 bit come specificato per UUIDv1 nella sezione 5.1, per UUIDv6 i primi 48 bit più significativi vengono memorizzati per primi, seguiti dal campo versione di 4 bit (stessa posizione), seguito dai restanti 12 bit del timestamp originale di 60 bit.
I bit della sequenza di clock e del nodo rimangono invariati dalla loro posizione nella sezione 5.1.
I bit della sequenza di clock e del nodo DOVREBBERO essere reimpostati a un valore pseudocasuale per ogni nuovo UUIDv6 generato; tuttavia, le implementazioni POSSONO scegliere di mantenere il vecchio comportamento della sequenza di clock e dell'indirizzo MAC dalla sezione 5.1. Per ulteriori informazioni sull'utilizzo degli indirizzi MAC all'interno degli UUID, vedere la sezione 8.
Il formato per l'UUIDv6 di 16 byte e 128 bit è mostrato nella figura 10.
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figura 10: Layout dei campi e dei bit UUIDv6
Definizioni dei campi:
time_high: I 32 bit più significativi del timestamp iniziale di 60 bit. Occupa i bit da 0 a 31 (ottetti 0-3).
time_mid: I 16 bit centrali del timestamp iniziale di 60 bit. Occupa i bit da 32 a 47 (ottetti 4-5).
ver: Il campo versione di 4 bit come definito dalla sezione 4.2, impostato a 0b0110 (6). Occupa i bit da 48 a 51 dell'ottetto 6.
time_low: 12 bit che conterranno i 12 bit meno significativi del timestamp iniziale di 60 bit. Occupa i bit da 52 a 63 (ottetti 6-7).
var: Il campo variante di 2 bit come definito dalla sezione 4.1, impostato a 0b10. Occupa i bit 64 e 65 dell'ottetto 8.
clock_seq: I 14 bit contenenti la sequenza di clock. Occupa i bit da 66 a 79 (ottetti 8-9).
node: Identificatore spazialmente univoco di 48 bit. Occupa i bit da 80 a 127 (ottetti 10-15).
Con UUIDv6, i passaggi per dividere il timestamp in time_high e time_mid sono OPZIONALI poiché i 48 bit di time_high e time_mid rimarranno nello stesso ordine. Un passaggio aggiuntivo di divisione dei primi 48 bit del timestamp nei 32 bit più significativi e nei 16 bit meno significativi si rivela utile quando si riutilizza un'implementazione UUIDv1 esistente.