Qu'est-ce que ULID ?
ULID (Identifiant Unique Lexicographiquement Triable Universel) est un format d'identifiant de 128 bits conçu pour surmonter les limitations des UUIDs. Il se compose de :
- Horodatage : 48 bits de temps Unix avec une précision en millisecondes
- Aléatoire : 80 bits de données aléatoires cryptographiquement sécurisées
- Encodage : Représentation en Base32 (26 caractères)
Exemple de format : 01ARZ3NDEKTSV4RRFFQ69G5FAV
Comment fonctionne ULID
- Génère 48 bits pour l'horodatage (temps Unix en millisecondes)
- Génère 80 bits de données aléatoires cryptographiquement sécurisées
- Combine l'horodatage (plus significatif) avec l'aléatoire (moins significatif)
- Encode la valeur complète de 128 bits en utilisant l'alphabet Base32 de Crockford
- Le résultat est une chaîne de 26 caractères (les 10 premiers caractères sont l'horodatage, les 16 derniers sont aléatoires)
Avantages et Considérations
Avantages | Considérations |
---|---|
|
|
Structure ULID
Composant | Bits | Caractères | Description |
---|---|---|---|
Horodatage | 48 bits | 10 caractères | Horodatage Unix (ms) encodé en Base32 |
Aléatoire | 80 bits | 16 caractères | Octets aléatoires encodés en Base32 |
Comparaison ULID vs. UUID
Fonctionnalité | ULID | UUID v1 | UUID v4 | UUID v7 |
---|---|---|---|---|
Taille | 128 bits | 128 bits | 128 bits | 128 bits |
Longueur de chaîne | 26 caractères | 36 caractères | 36 caractères | 36 caractères |
Basé sur le temps | ✅ | ✅ | ❌ | ✅ |
Tri naturel | ✅ | ❌ | ❌ | ✅ |
Sûr pour les URL | ✅ | ❌ | ❌ | ❌ |
Exposition de l'adresse MAC | ❌ | ✅ | ❌ | ❌ |
Composant aléatoire | ✅ | ❌ | ✅ | ✅ |
Standard canonique | ❌ | ✅ | ✅ | ⚠️ Brouillon |
Cas d'utilisation courants
- Clés primaires de base de données : Index optimisés pour les performances
- Systèmes distribués : Génération sans coordination
- APIs : Identifiants propres et sûrs pour les URL
- Données chronologiques : Tri chronologique natif
- Systèmes de journalisation : Identifiants d'événements triables
- Applications modernes : Où les limitations des UUID posent problème
Pourquoi choisir ULID ?
- Triabilité : Se trie lexicographiquement par heure de création
- Sécurité URL : Pas besoin d'encodage URL (contrairement aux UUID avec tirets)
- Compacité : 26 caractères contre 36 pour UUID
- Insensibilité à la casse : Réduit les erreurs de saisie utilisateur
- Monotonicité : Tri monotone optionnel dans la même milliseconde
- Pas de caractères spéciaux : Format simple, uniquement alphanumérique
Foire Aux Questions
Comment ULID se compare-t-il à UUID v7 ?
Les deux utilisent des horodatages Unix pour la triabilité et ont des composants aléatoires. Les différences principales sont l'encodage (Base32 vs hexadécimal), le format (26 caractères vs 36) et la standardisation (UUID v7 est en projet de spécification RFC).
Puis-je extraire l'heure de création d'un ULID ?
Oui. Les 10 premiers caractères représentent un horodatage Unix avec une précision en millisecondes qui peut être décodé et converti en un format de date et heure standard.
Les ULIDs sont-ils compatibles avec les champs UUID des bases de données ?
Non. Les ULIDs utilisent un format différent et devraient être stockés comme des chaînes ou des données binaires plutôt que dans des types UUID natifs des bases de données.
Qu'est-ce que la monotonicité dans les ULIDs ?
Certaines implémentations d'ULID offrent une option monotone qui assure un ordre de tri séquentiel même au sein de la même milliseconde en incrémentant le composant aléatoire pour les ULIDs créés au même horodatage.
Quel jeu de caractères ULID utilise-t-il ?
ULID utilise l'encodage Base32 de Crockford (0-9, A-Z excluant I, L, O, U) qui est conçu pour minimiser la confusion et les erreurs de transcription lorsque les identifiants sont lus ou saisis manuellement.
Ressources
Alphabet Base32 de Crockford
Valeur d'encodage | Caractère | Notes |
---|---|---|
0-9 | 0-9 | Chiffres décimaux |
10-31 | A-Z | Excluant I, L, O, U pour la lisibilité |
Caractères : 0123456789ABCDEFGHJKMNPQRSTVWXYZ
Cet encodage est insensible à la casse pour le décodage (mais les ULIDs sont généralement générés en majuscules).