5.6. UUID Version 6 (UUID version 6)
5.6. UUID Version 6
UUIDv6 est une version compatible au niveau des champs avec UUIDv1 (section 5.1), réorganisée pour une meilleure localité de base de données. Il est attendu que UUIDv6 sera principalement implémenté dans des contextes où UUIDv1 est utilisé. Les systèmes qui n'impliquent pas l'héritage UUIDv1 DEVRAIENT utiliser UUIDv7 (section 5.7) à la place.
Au lieu de diviser l'horodatage en sections basse, moyenne et haute de UUIDv1, UUIDv6 modifie cette séquence de sorte que les octets d'horodatage sont stockés du plus au moins significatif. C'est-à-dire, étant donné une valeur d'horodatage de 60 bits comme spécifié pour UUIDv1 dans la section 5.1, pour UUIDv6, les 48 premiers bits les plus significatifs sont stockés en premier, suivis du champ de version de 4 bits (même position), suivis des 12 bits restants de l'horodatage original de 60 bits.
Les bits de séquence d'horloge et de nœud restent inchangés par rapport à leur position dans la section 5.1.
Les bits de séquence d'horloge et de nœud DEVRAIENT être réinitialisés à une valeur pseudoaléatoire pour chaque nouvel UUIDv6 généré; cependant, les implémentations PEUVENT choisir de conserver l'ancien comportement de séquence d'horloge et d'adresse MAC de la section 5.1. Pour plus d'informations sur l'utilisation des adresses MAC dans les UUID, voir la section 8.
Le format pour l'UUIDv6 de 16 octets et 128 bits est illustré dans la figure 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 10: UUIDv6 Field and Bit Layout (Disposition des champs et des bits UUIDv6)
Définitions des champs:
time_high: Les 32 bits les plus significatifs de l'horodatage de départ de 60 bits. Occupe les bits 0 à 31 (octets 0-3).
time_mid: Les 16 bits moyens de l'horodatage de départ de 60 bits. Occupe les bits 32 à 47 (octets 4-5).
ver: Le champ de version de 4 bits tel que défini par la section 4.2, défini sur 0b0110 (6). Occupe les bits 48 à 51 de l'octet 6.
time_low: 12 bits qui contiendront les 12 bits les moins significatifs de l'horodatage de départ de 60 bits. Occupe les bits 52 à 63 (octets 6-7).
var: Le champ de variante de 2 bits tel que défini par la section 4.1, défini sur 0b10. Occupe les bits 64 et 65 de l'octet 8.
clock_seq: Les 14 bits contenant la séquence d'horloge. Occupe les bits 66 à 79 (octets 8-9).
node: Identifiant spatialement unique de 48 bits. Occupe les bits 80 à 127 (octets 10-15).
Avec UUIDv6, les étapes pour diviser l'horodatage en time_high et time_mid sont OPTIONNELLES puisque les 48 bits de time_high et time_mid resteront dans le même ordre. Une étape supplémentaire de division des 48 premiers bits de l'horodatage en 32 bits les plus significatifs et 16 bits les moins significatifs s'avère utile lors de la réutilisation d'une implémentation UUIDv1 existante.