5.7. UUID Version 7
5.7. UUID Version 7
UUIDv7 présente un champ de valeur ordonné dans le temps dérivé de la source d'horodatage Unix Epoch largement implémentée et bien connue, le nombre de millisecondes depuis minuit le 1er janvier 1970 UTC, secondes intercalaires exclues. En général, UUIDv7 a des caractéristiques d'entropie améliorées par rapport à UUIDv1 (Section 5.1) ou UUIDv6 (Section 5.6).
Les valeurs UUIDv7 sont créées en allouant un horodatage Unix en millisecondes dans les 48 bits les plus significatifs et en remplissant les 74 bits restants, à l'exclusion des bits de version et de variante requis, avec des bits aléatoires pour chaque nouveau UUIDv7 généré afin de fournir l'unicité conformément à la Section 6.9. Alternativement, les implémentations PEUVENT remplir les 74 bits, conjointement, avec une combinaison des sous-champs suivants, dans cet ordre du bit le plus significatif au moins significatif, pour garantir une monotonie supplémentaire dans une milliseconde:
-
Une fraction d'horodatage sous-milliseconde OPTIONNELLE (12 bits au maximum) conformément à la Section 6.2 (Méthode 3).
-
Un compteur soigneusement initialisé OPTIONNEL conformément à la Section 6.2 (Méthode 1 ou 2).
-
Des données aléatoires pour chaque nouveau UUIDv7 généré pour tout espace restant.
Les implémentations DEVRAIENT utiliser UUIDv7 au lieu de UUIDv1 et UUIDv6 si possible.
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 11: Disposition des champs et des bits UUIDv7
Définitions des champs:
unix_ts_ms: Nombre non signé big-endian de 48 bits de l'horodatage Unix Epoch en millisecondes conformément à la Section 6.1. Occupe les bits 0 à 47 (octets 0-5).
ver: Le champ de version de 4 bits tel que défini par la Section 4.2, défini sur 0b0111 (7). Occupe les bits 48 à 51 de l'octet 6.
rand_a: 12 bits de données pseudoaléatoires pour fournir l'unicité conformément à la Section 6.9 et/ou des constructions optionnelles pour garantir une monotonie supplémentaire conformément à la Section 6.2. 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.
rand_b: Les 62 bits finaux de données pseudoaléatoires pour fournir l'unicité conformément à la Section 6.9 et/ou un compteur optionnel pour garantir une monotonie supplémentaire conformément à la Section 6.2. Occupe les bits 66 à 127 (octets 8-15).