Un UUID est un identifiant de 128 bits que l’on peut générer n’importe où, sans registre central, tout en ayant confiance en son unicité pratique. Les UUID ne sont toutefois pas tous construits de la même façon. Ce guide présente les cinq versions que vous rencontrerez, explique pourquoi la v7 gagne du terrain pour les clés de base de données, comment les UUID à espace de noms restent déterministes et à quel point une collision est improbable.

v4 et v7 : aléatoire ou ordonnée par heure

La version 4 repose sur 122 bits entièrement aléatoires ; c’est l’UUID le plus simple et le plus largement pris en charge. Sa faiblesse apparaît à grande échelle : les valeurs n’étant pas ordonnées, l’insertion de clés v4 dans un index de base de données disperse les écritures dans tout l’arbre B, provoquant des divisions de pages et des défauts de cache.

La version 7 résout ce problème en plaçant un horodatage Unix en millisecondes sur 48 bits dans les bits de poids fort. Elle conserve suffisamment d’aléatoire pour garantir l’unicité, mais les UUID consécutifs partagent un préfixe ; les nouvelles lignes sont donc ajoutées à proximité. Les index restent compacts et les insertions rapides, ce qui fait de la v7 un choix de plus en plus courant pour les nouvelles clés primaires.

UUID à espace de noms (v5 et v3)

Les versions 5 et 3 sont déterministes. On leur fournit un UUID d’espace de noms et un nom ; les octets sont concaténés puis hachés (SHA-1 pour v5, MD5 pour v3), et un UUID est extrait du condensat. Les mêmes entrées produisent toujours le même UUID, ce qui est idéal pour dériver un identifiant stable d’une donnée existante, comme une URL ou un chemin de fichier.

Préférez v5 à v3 : SHA-1 est plus robuste que MD5, et v3 sert surtout à assurer la compatibilité avec les anciens systèmes. La RFC 4122 fournit quatre espaces de noms standard (DNS, URL, OID, X.500) ; vous pouvez définir le vôtre en fournissant n’importe quel UUID comme espace de noms.

Quelle est la probabilité d’une collision ?

Avec 122 bits aléatoires, la version 4 offre environ 5.3 × 1036 valeurs possibles. Selon l’approximation du paradoxe des anniversaires, il faudrait générer environ 2.71 × 1018 (2.71 quintillions) d’UUID pour atteindre une probabilité de collision de 50 % — soit environ un milliard d’UUID par seconde pendant 85 ans.

La v7 comporte moins de bits aléatoires (74), mais ceux-ci sont associés à une seule milliseconde. Le risque pratique de collision ne devient donc pertinent que si des volumes énormes sont générés pendant la même milliseconde sur la même machine. Pour presque toutes les applications, les deux versions peuvent être considérées comme sans collision.