Générateur de ULID

Générez en masse des ULID, des identifiants triables par ordre chronologique qui font office d'alternative aux UUID.

Astuces d'utilisation

  • Les 10 premiers caractères d'un ULID encodent un horodatage (l'instant de création), tandis que les 16 restants sont aléatoires. Sauf si deux ULID sont générés dans la même milliseconde, un simple tri en tant que chaînes de caractères suffit à retrouver l'ordre de création.
  • Utiliser un UUID v4 entièrement aléatoire comme clé primaire de base de données tend à fragmenter les index B-tree, car les nouvelles lignes sont insérées à des positions aléatoires. Comme les ULID sont triés approximativement par ordre chronologique, les nouvelles lignes s'ajoutent plutôt vers la fin de l'index, ce qui atténue ce problème.
  • Un ULID est représenté par 26 caractères en Base32 de Crockford (l'alphabet de 32 caractères `0`-`9` et `A`-`Z` dont on retire les lettres I, L, O et U, faciles à confondre), ce qui le rend plus court qu'un UUID (36 caractères avec les tirets) et sûr à utiliser dans des environnements insensibles à la casse.
  • Pour comparer les formats avec Nano ID et UUID v4, consultez le tableau comparatif disponible sur notre outil jumeau, la page du générateur de Nano ID.

Questions fréquentes

Un ULID (Universally Unique Lexicographically Sortable Identifier) est une spécification d'identifiants qui, comme un UUID, sont uniques à l'échelle mondiale, mais qui intègrent en plus une information sur l'instant de création — si bien qu'un simple tri de chaînes de caractères les place dans l'ordre chronologique.

La principale différence est de savoir si l'identifiant peut être trié selon son instant de création. Un UUID v4 est une valeur de 128 bits entièrement aléatoire, donc impossible à trier par ordre de création, alors que les 48 premiers bits d'un ULID forment un horodatage en millisecondes, si bien qu'une simple comparaison de chaînes révèle l'ordre de création. Il existe aussi une différence de format : un ULID compte 26 caractères en Base32, tandis qu'un UUID compte 36 caractères hexadécimaux, tirets compris.

Utiliser une valeur entièrement aléatoire comme UUID v4 en tant que clé primaire fait que les nouvelles lignes s'insèrent à des positions aléatoires dans l'index, ce qui peut fragmenter l'index B-tree et réduire l'efficacité du cache. Comme les ULID sont triés approximativement par ordre chronologique, les nouvelles lignes ont tendance à s'ajouter près de la fin de l'index, ce qui atténuerait ce problème.

Les 10 premiers caractères forment un horodatage de 48 bits en millisecondes (capable de représenter des dates jusqu'à environ l'an 10889), et les 16 caractères restants sont 80 bits de valeurs aléatoires. Au total, cela fait 128 bits — autant qu'un UUID —, mais avec une information temporelle intégrée, ce qui constitue la particularité de l'ULID.
ツールくん

Anecdote — comment l'ULID a introduit l'ordre chronologique dans le monde des identifiants

La spécification ULID a été publiée en 2016 par Alizain Feerasta. À l'époque, l'UUID était déjà le moyen standard de générer des identifiants uniques dans les systèmes distribués, mais son caractère entièrement aléatoire — qui rendait tout tri impossible — était perçu comme gênant pour l'efficacité des index de bases de données et pour l'analyse chronologique des journaux (logs). C'est précisément pour résoudre ce problème que l'ULID a été créé.

En réalité, l'UUID possède lui aussi des variantes basées sur le temps : la version 1 (adresse MAC plus horodatage) et la version 7 (normalisée en 2024, combinant horodatage et valeurs aléatoires). L'ULID, en revanche, est une spécification indépendante, distincte de la norme UUID (RFC 4122), qui se distingue par une conception plus simple et une représentation compacte en Base32.

Aujourd'hui, des bibliothèques d'implémentation de l'ULID existent dans presque tous les langages de programmation majeurs, et il est largement adopté partout où préserver l'ordre de création importe : identifiants d'événements dans les systèmes distribués, identifiants de trace dans les journaux, ou encore clés primaires de bases de données. Sa philosophie de conception recoupe largement celle de l'UUID v7, apparu à la même époque, et les deux coexistent comme deux approches différentes d'un même objectif : un identifiant triable proche de l'UUID.