Was ist ULID?
ULID (Universell Eindeutiger Lexikographisch Sortierbarer Identifikator) ist ein 128-Bit-Identifikatorformat, das entwickelt wurde, um die Einschränkungen von UUIDs zu überwinden. Es besteht aus:
- Zeitstempel: 48 Bits Unix-Zeit mit Millisekundenpräzision
- Zufallswert: 80 Bits kryptografisch sicherer Zufallsdaten
- Kodierung: Base32-Darstellung (26 Zeichen)
Formatbeispiel: 01ARZ3NDEKTSV4RRFFQ69G5FAV
Wie ULID funktioniert
- Generiert 48 Bits für den Zeitstempel (Unix-Zeit in Millisekunden)
- Generiert 80 Bits kryptografisch sicherer Zufallsdaten
- Kombiniert den Zeitstempel (höchstwertig) mit dem Zufallswert (niedrigstwertig)
- Kodiert den gesamten 128-Bit-Wert mit Crockfords Base32-Alphabet
- Das Ergebnis ist eine 26-Zeichen-Zeichenkette (die ersten 10 Zeichen sind der Zeitstempel, die letzten 16 der Zufallswert)
Vorteile & Überlegungen
Vorteile | Überlegungen |
---|---|
|
|
ULID-Struktur
Komponente | Bits | Zeichen | Beschreibung |
---|---|---|---|
Zeitstempel | 48 Bits | 10 Zeichen | Unix-Zeitstempel (ms) in Base32 kodiert |
Zufallswert | 80 Bits | 16 Zeichen | Zufallsbytes in Base32 kodiert |
ULID vs. UUID Vergleich
Eigenschaft | ULID | UUID v1 | UUID v4 | UUID v7 |
---|---|---|---|---|
Größe | 128 Bits | 128 Bits | 128 Bits | 128 Bits |
Zeichenkettenlänge | 26 Zeichen | 36 Zeichen | 36 Zeichen | 36 Zeichen |
Zeitbasiert | ✅ | ✅ | ❌ | ✅ |
Natürliche Sortierung | ✅ | ❌ | ❌ | ✅ |
URL-sicher | ✅ | ❌ | ❌ | ❌ |
MAC-Adress-Offenlegung | ❌ | ✅ | ❌ | ❌ |
Zufallskomponente | ✅ | ❌ | ✅ | ✅ |
Kanonischer Standard | ❌ | ✅ | ✅ | ⚠️ Entwurf |
Häufige Anwendungsfälle
- Datenbank-Primärschlüssel: Leistungsoptimierte Indizes
- Verteilte Systeme: Koordinationsfreie Generierung
- APIs: Saubere, URL-sichere Kennungen
- Zeitreihendaten: Native chronologische Sortierung
- Protokollsysteme: Sortierbare Ereigniskennungen
- Moderne Anwendungen: Wo UUID-Einschränkungen problematisch sind
Warum ULID wählen?
- Sortierbarkeit: Lexikografisch nach Erstellungszeit sortierbar
- URL-Sicherheit: Keine URL-Kodierung nötig (im Gegensatz zu UUIDs mit Bindestrichen)
- Kompaktheit: 26 Zeichen gegenüber 36 für UUID
- Unabhängigkeit von Groß-/Kleinschreibung: Reduziert Benutzereingabefehler
- Monotonie: Optionale monotone Sortierung innerhalb derselben Millisekunde
- Keine Sonderzeichen: Einfaches, rein alphanumerisches Format
Häufig gestellte Fragen
Wie vergleicht sich ULID mit UUID v7?
Beide verwenden Unix-Zeitstempel für die Sortierbarkeit und haben Zufallskomponenten. Die Hauptunterschiede sind die Kodierung (Base32 vs. Hex), das Format (26 Zeichen vs. 36) und die Standardisierung (UUID v7 ist in RFC-Entwurfsspezifikation).
Kann ich die Erstellungszeit aus einem ULID extrahieren?
Ja. Die ersten 10 Zeichen repräsentieren einen Unix-Zeitstempel mit Millisekundenpräzision, der dekodiert und in ein Standard-Datums-/Zeitformat umgewandelt werden kann.
Sind ULIDs mit UUID-Datenbankfeldern kompatibel?
Nein. ULIDs verwenden ein anderes Format und müssten als Zeichenketten oder Binärdaten statt in nativen UUID-Datenbanktypen gespeichert werden.
Was ist Monotonie bei ULIDs?
Einige ULID-Implementierungen bieten eine monotone Option, die die sequenzielle Sortierreihenfolge selbst innerhalb derselben Millisekunde gewährleistet, indem die Zufallskomponente für ULIDs, die im gleichen Zeitstempel erstellt wurden, inkrementiert wird.
Welchen Zeichensatz verwendet ULID?
ULID verwendet Crockfords Base32-Kodierung (0-9, A-Z ohne I, L, O, U), die entwickelt wurde, um Verwechslungen und Übertragungsfehler zu minimieren, wenn IDs manuell gelesen oder eingegeben werden.
Ressourcen
Crockfords Base32-Alphabet
Kodierungswert | Zeichen | Hinweise |
---|---|---|
0-9 | 0-9 | Dezimalziffern |
10-31 | A-Z | Ohne I, L, O, U für bessere Lesbarkeit |
Zeichen: 0123456789ABCDEFGHJKMNPQRSTVWXYZ
Diese Kodierung ist für die Dekodierung unabhängig von Groß-/Kleinschreibung (aber ULIDs werden normalerweise in Großbuchstaben generiert).