Depuis 4D 20 R10, les UUID sont désormais générés directement par un algorithme interne au lieu de dépendre des fonctions du système, ce qui vous permet de mieux contrôler leur format et leur comportement. Avec cette mise à jour, vous pouvez désormais opter pour les UUIDs de la version 7, qui supportent le tri chronologique. Voyons ce que cela signifie pour vos applications.
Comprendre les versions d’UUID
Tous les UUID partagent le même format : 128 bits représentés par 32 caractères hexadécimaux (0-9 + A-F). Cependant, ils peuvent coder différents types d’informations. La RFC 9562 définit actuellement huit versions d’UUID. En interne, un UUID est stocké dans deux entiers de 64 bits, ce qui rend les comparaisons, les requêtes et les tris extrêmement efficaces sur les unités centrales de 64 bits. Les caractères hexadécimaux ne sont qu’un format d’affichage, qui n’est pas utilisé en interne.
Jusqu’à présent, 4D s’appuyait sur des fonctions système pour générer des UUID. Ces fonctions ne permettaient pas de choisir ou même de savoir quelle version était utilisée. En pratique, elles produisaient généralement des UUID de la version 4, complètement aléatoires.
La version 7 a été introduite lors de la récente évolution de la RFC. Elle intègre un timestamp, ce qui permet de trier les UUID en fonction de leur date de création. Vous avez été nombreux à demander la prise en charge de l’UUIDv7 dans le forum 4D Feature Request, et nous sommes heureux de vous l’offrir dans 4D 20 R10 !
La version 4 toujours par défaut
Pour assurer la cohérence et la compatibilité, 4D continue d’utiliser les UUIDs de la version 4 par défaut. Cependant, 4D ne s’appuie plus sur les fonctions système pour générer les UUIDs, mais les calcule désormais en interne. Cela permet d’éviter tout changement inattendu dû à de futures mises à jour du système.
Et si vous souhaitez profiter du tri chronologique de la version 7, vous pouvez désormais l’activer, que ce soit par le biais des paramètres ou du code.
Qu’est-ce qui fait la spécificité de la version 7 ?
Les UUID de la version 7 commencent par un timestamp Unix Epoch, ce qui permet de les trier chronologiquement. Ceci est particulièrement utile pendant le développement ou le débogage, lorsque vous souhaitez que les enregistrements nouvellement créés apparaissent en haut (ou en bas) d’une liste.
Comme la version 7 utilise une précision de l’ordre de la microseconde, elle offre une granularité plus fine que la commande traditionnelle Timestamp traditionnelle, qui est limitée aux millisecondes.
Remarque : si plusieurs enregistrements sont créés au cours de la même microseconde, ils partageront la même portion d’horodatage. Cependant, leurs UUID seront toujours uniques grâce à des octets aléatoires supplémentaires. Le tri de ces enregistrements spécifiques peut ne pas être significatif, mais le tri de ces enregistrements parmi d’autres reste efficient. Dans la pratique, la création d’un enregistrement prend généralement plus d’une microseconde, de sorte que ce cas de figure est rare.
Nouveau paramètre pour les UUIDs automatiques de la version 7
L’activation de la version 7 pour les UUIDs auto-générés est simple. Il suffit d’ouvrir la boîte de dialogue Paramètres de structure, d’aller à la page Base de données > Stockage des données et de sélectionner la version d’UUID souhaitée.

Une fois la version 7 activée, tous les UUID générés automatiquement, tels que ceux utilisés pour les clés primaires, suivront le nouveau format.
Les UUID existants dans votre base de données restent inchangés afin de préserver la cohérence. Et comme la différence entre les versions 4 et 7 est interne (et non structurelle), les deux formats peuvent coexister sans problème.
Générer des UUID de la version 7 en code
La commande Generate UUID a également été mise à jour pour prendre en charge la version 7. Il vous suffit de spécifier la version en tant que paramètre ! C’est très simple, non ?
Et si le paramètre est manquant, la version utilisée par défaut est toujours 4, pour que votre code reste cohérent.
var $uuid Text
$uuid :=Generate UUID // v4: 578BFEC987BD4C11AE8AB9CD3DC12DD0
$uuid :=Generate UUID(4) // v4: C2BE4B6723634DBE9F4387B1226A4B4F
$uuid :=Generate UUID(7) // v7: 0198C7A4E41A7B6CB39F460873165D30
$uuid :=Generate UUID(7) // v7: 0198C7A543557F89AA7D83563AB5C97E
Voici une comparaison rapide des résultats ci-dessus :
- Les UUID de la version 4 sont totalement aléatoires.
- Les UUID de la version 7 partagent un préfixe commun (timestamp), avec une partie aléatoire à la fin.
Nous espérons que cette nouvelle fonctionnalité vous donnera plus de flexibilité et de contrôle sur vos développements. Comme toujours, nous sommes à l’écoute de vos commentaires et nous faisons évoluer 4D pour répondre à vos besoins.
Bon codage !
