Wat is ULID?
ULID (Universally Unique Lexicographically Sortable Identifier) is een 128-bits identificatieformaat ontworpen om beperkingen van UUID's te overwinnen. Het bestaat uit:
- Timestamp: 48 bits millisecondeprecisie Unix-tijd
- Randomness: 80 bits cryptografisch veilige willekeurige data
- Encoding: Base32-weergave (26 tekens)
Formaatvoorbeeld: 01ARZ3NDEKTSV4RRFFQ69G5FAV
Hoe ULID werkt
- Genereer 48 bits voor tijdstempel (Unix-tijd in milliseconden)
- Genereer 80 bits cryptografisch veilige willekeurige data
- Combineer tijdstempel (meest significant) met willekeurigheid (minst significant)
- Codeer de volledige 128-bits waarde met Crockford's Base32-alfabet
- Resultaat is een string van 26 tekens (de eerste 10 tekens zijn tijdstempel, de laatste 16 zijn willekeurigheid)
Voordelen & Overwegingen
Advantages | Considerations |
---|---|
|
|
ULID-structuur
Component | Bits | Characters | Description |
---|---|---|---|
Timestamp | 48 bits | 10 tekens | Unix-timestamp (ms) gecodeerd in Base32 |
Randomness | 80 bits | 16 tekens | Willekeurige bytes gecodeerd in Base32 |
ULID versus UUID vergelijking
Feature | ULID | UUID v1 | UUID v4 | UUID v7 |
---|---|---|---|---|
Size | 128 bits | 128 bits | 128 bits | 128 bits |
Stringlengte | 26 tekens | 36 tekens | 36 tekens | 36 tekens |
Time-based | ✅ | ✅ | ❌ | ✅ |
Natuurlijke sortering | ✅ | ❌ | ❌ | ✅ |
URL veilig | ✅ | ❌ | ❌ | ❌ |
MAC-adresblootstelling | ❌ | ✅ | ❌ | ❌ |
Willekeurige component | ✅ | ❌ | ✅ | ✅ |
Canonieke standaard | ❌ | ✅ | ✅ | ⚠️ Concept |
Veelvoorkomende gebruikssituaties
- Primaire sleutels in databases: Prestatie-geoptimaliseerde indexen
- Gedistribueerde systemen: Coördinatie-vrije generatie
- APIs: Schone, URL-veilige identificaties
- Tijdreeksgegevens: Natuurlijke chronologische ordening
- Logsystemen: Sorteerbare gebeurtenisidentificaties
- Moderne applicaties: Waar UUID-beperkingen problematisch zijn
Waarom kiezen voor ULID?
- Sortability: Lexicografisch gesorteerd op creatietijd
- URL-veiligheid: Geen URL-codering nodig (in tegenstelling tot UUID's met streepjes)
- Compactness: 26 tekens versus 36 voor UUID
- Hoofdletterongevoeligheid: Vermindert invoerfouten door gebruikers
- Monotonicity: Optionele monotone sortering binnen dezelfde milliseconde
- Geen speciale tekens: Eenvoudig, alleen alfanumeriek formaat
Veelgestelde vragen
Hoe verhoudt ULID zich tot UUID v7?
Beide gebruiken Unix-timestamps voor sorteervriendelijkheid en hebben willekeurige componenten. De belangrijkste verschillen zijn codering (Base32 vs hex), formaat (26 tekens vs 36), en standaardisatie (UUID v7 is in concept RFC-specificatie).
Kan ik de creatietijd uit een ULID halen?
Ja. De eerste 10 tekens vertegenwoordigen een millisecondeprecisie Unix-timestamp die kan worden gedecodeerd en omgezet naar een standaard datum/tijd.
Zijn ULID's compatibel met UUID-databasevelden?
Nee. ULID's gebruiken een ander formaat en moeten worden opgeslagen als strings of binaire data in plaats van in native UUID-databasetypen.
Wat is monotonie in ULID's?
Sommige ULID-implementaties bieden een monotone optie die een sequentiële sorteervolgorde garandeert, zelfs binnen dezelfde milliseconde, door de willekeurige component te verhogen voor ULID's die in dezelfde tijdstempel zijn gemaakt.
Welke tekenset gebruikt ULID?
ULID gebruikt Crockford's Base32-codering (0-9, A-Z exclusief I, L, O, U) die is ontworpen om verwarring en transcriptiefouten te minimaliseren wanneer ID's handmatig worden gelezen of ingevoerd.
Resources
Crockford's Base32-alfabet
Codering waarde | Character | Notes |
---|---|---|
0-9 | 0-9 | Decimale cijfers |
10-31 | A-Z | Exclusief I, L, O, U voor leesbaarheid |
Tekens: 0123456789ABCDEFGHJKMNPQRSTVWXYZ
Deze codering is hoofdletterongevoelig voor decodering (maar ULID's worden meestal in hoofdletters gegenereerd).