UUID v4 vs v7 : identifiants aléatoires ou ordonnés dans le temps
Guide UUID v4 vs v7
UUID v4 vs v7 (et GUID vs UUID) : lequel choisir | We.Inc
En quoi UUID v7 diffère de v4 selon la RFC 9562, pourquoi les identifiants ordonnés dans le temps conviennent aux clés de base de données, ce qu'est un GUID, et un outil dans le navigateur pour créer des ID v4 et v7 et décoder le timestamp d'un v7.
Les deux sont des identifiants de 128 bits écrits sur 36 caractères. Un UUID v4 contient 122 bits aléatoires : les nouvelles valeurs atterrissent donc n'importe où dans un index trié. Un UUID v7 commence par un timestamp Unix de 48 bits en millisecondes suivi de bits aléatoires : les valeurs se trient donc à peu près par date de création. La RFC 9562 recommande v7 plutôt que les anciennes versions temporelles v1 et v6.
v4 et v7 comparés
UUID v4
UUID v7
Composé de
122 bits aléatoires
Timestamp de 48 bits en millisecondes plus 74 bits aléatoires
Ordre de tri
Aléatoire
À peu près par date de création
Révèle la date de création
Non
Oui, à la milliseconde près
Intégré aux navigateurs
crypto.randomUUID()
Non, utilisez quelques lignes de code ou une bibliothèque
Idéal pour
Jetons, ID publics, tout ce qui ne doit pas trahir de date
Clés primaires de base de données, logs, ID d'événements
Choisir une version d'UUID est surtout une question de base de données. Les clés v4 aléatoires dispersent les insertions dans tout l'index, alors que les clés v7 arrivent dans l'ordre, comme le ferait un nombre auto-incrémenté, sans compteur central. Générez les deux types ci-dessous, puis collez n'importe quel UUID pour voir sa version et, pour un v7, le moment de sa création.
Appuyez sur un bouton de génération pour créer un nouvel UUID v4 ou v7 dans votre navigateur.
Copiez-le, ou collez n'importe quel UUID dans la zone du décodeur.
Le décodeur lit le chiffre de version et les bits de variante, et pour un v7 convertit les 48 premiers bits en date et heure.
Générez plusieurs valeurs v7 d'affilée et remarquez que leurs premiers caractères changent à peine.
Stockez les UUID dans une colonne uuid native si votre base de données en propose une. Seize octets valent mieux qu'une chaîne de 36 caractères en taille comme en comparaisons.
N'utilisez pas v7 quand la date de création est sensible, par exemple pour des jetons de réinitialisation de mot de passe. Quiconque possède l'ID peut lire quand il a été créé.
crypto.randomUUID() ne fonctionne que sur des pages sécurisées (HTTPS ou localhost). En HTTP simple, il n'est pas disponible.
Deux ID v7 créés dans la même milliseconde sont ordonnés par leurs bits aléatoires, et non par ordre d'arrivée, sauf si votre bibliothèque utilise les méthodes de compteur facultatives décrites par la RFC.
Questions fréquentes
Quelle est la différence entre un GUID et un UUID ?
Aucune qui compte en pratique. La RFC 9562 définit les UUID et précise qu'on les appelle aussi GUID, Globally Unique Identifiers, le nom utilisé par les outils Microsoft. Un GUID généré par .NET ou SQL Server est un UUID au même format de 36 caractères.
UUID v7 est-il une norme officielle ?
Oui. La RFC 9562, publiée en 2024, définit les versions 6, 7 et 8 aux côtés des anciennes et rend obsolète la RFC 4122, le document qui décrivait les UUID auparavant.
UUID v7 est-il suffisamment unique ?
Chaque milliseconde dispose de 74 bits aléatoires, ce qui suffit largement pour presque tous les systèmes. Une collision exigerait un nombre énorme d'ID créés exactement dans la même milliseconde.
Peut-on retrouver la date de création à partir d'un UUID v7 ?
Oui. Les 12 premiers chiffres hexadécimaux sont le temps Unix en millisecondes. Collez-en un dans le décodeur ci-dessus pour le voir sous forme de date, ou lisez vous-même ces chiffres comme un nombre hexadécimal.
Faut-il passer les clés v4 existantes en v7 ?
En général, non. Les deux sont des UUID valides et peuvent cohabiter dans la même colonne : les nouvelles lignes peuvent utiliser v7 tandis que les anciennes gardent leurs valeurs v4. Réécrire des clés primaires implique de réécrire chaque clé étrangère qui pointe vers elles.
Pourquoi l'ordre compte pour les bases de données
La plupart des bases de données conservent les clés primaires dans un B-tree. Quand chaque nouvelle clé est plus grande que la précédente, les insertions vont à la fin de l'arbre et les pages récemment écrites restent en mémoire. Des clés aléatoires forcent des écritures dans des pages réparties dans tout l'arbre, ce qui entraîne plus de divisions de pages et plus de lectures disque à mesure que la table grossit.
La RFC 9562 cite ce problème de localité parmi les raisons d'ajouter des versions ordonnées dans le temps, et v7 est celle qu'elle recommande pour les nouveaux systèmes.
Lire la structure
Dans la forme texte, le 13e chiffre hexadécimal (le premier du troisième groupe) indique la version : un UUID v7 a donc toujours un 7 à cet endroit et un v4 un 4. Le premier chiffre du quatrième groupe vaut 8, 9, a ou b pour la variante standard.
Pour un v7, les 12 chiffres avant la version forment le timestamp. Tout ce qui suit le chiffre de version, à part les deux bits de variante, est aléatoire.
Les huit versions d'UUID
Versions d'UUID dans la RFC 9562
Version
Construite à partir de
Remarques
Temps grégorien plus un identifiant de nœud, souvent l'adresse MAC
Ancienne ; préférez v7
Version DCE Security, non spécifiée par la RFC 9562
Rare
Basée sur un nom, hash MD5 d'un espace de noms et d'un nom
Même entrée, même UUID
Bits aléatoires ou pseudo-aléatoires
Le choix par défaut courant
Basée sur un nom, hash SHA-1 d'un espace de noms et d'un nom
Préférée à v3
Timestamp de v1 réordonné pour que les valeurs se trient par date
Préférez v7 pour les nouveaux systèmes
Temps Unix Epoch en millisecondes plus des bits aléatoires
Clés triables
Structure personnalisée choisie par l'implémentation
Formats expérimentaux ou propriétaires
Code à copier
UUID v4 dans le navigateur ou Node
Intégré aux navigateurs récents sur les pages sécurisées et à Node 19 et versions ultérieures via l'objet global crypto. Renvoie une chaîne de 36 caractères.
UUID v7 sans bibliothèque
Écrit l'heure actuelle dans les six premiers octets, puis définit les bits de version et de variante. Le reste reste aléatoire.
Lire la date d'un UUID v7
Les 12 premiers chiffres hexadécimaux sont des millisecondes depuis 1970 : les analyser donne une Date.
Générer et décoder
Générer un v4
Générer un v7
Généré
Appuyez sur un bouton pour créer un UUID. Il est créé dans votre navigateur et n'est envoyé nulle part.
Collez un UUID à décoder
Version : {v}
RFC 9562 (la variante standard)
Pas la variante RFC 9562
Créé le : {v} (UTC)
Cette version ne contient pas de timestamp Unix.
Ce n'est pas un UUID. Attendu : 32 chiffres hexadécimaux en groupes de 8-4-4-4-12.