ULID Generator
Universally Unique Lexicographically Sortable Identifiers — wie UUIDs, aber zeitlich geordnet und datenbankfreundlicher.
Auf „Generieren" klicken
- Zeitzeichen (1–10)
- Zufallszeichen (11–26)
- UTC
- Unix ms
Was ist eine ULID?
Eine ULID (Universally Unique Lexicographically Sortable Identifier) ist ein 128-Bit-Bezeichner, kodiert als 26-stelliger Crockford-Base32-String. Die ersten 10 Zeichen kodieren einen 48-Bit-Millisekunden-Zeitstempel, die letzten 16 Zeichen enthalten 80 zufällige Bits. ULIDs sind dadurch von Natur aus nach Erstellungszeit sortierbar.
ULID vs. UUID
Im Gegensatz zu UUID v4 sind ULIDs lexikografisch nach Erstellungszeit sortierbar — neuere IDs sortieren immer nach älteren. Das verbessert die B-Tree-Index-Performance in Datenbanken erheblich. ULIDs nutzen außerdem eine kompaktere Base32-Kodierung ohne Bindestriche.
Monotoner Modus
Im monotonen Modus sind ULIDs, die in derselben Millisekunde generiert werden, garantiert in aufsteigender Reihenfolge — der Zufallsteil wird um 1 inkrementiert. Dieser Modus ist kritisch für verteilte Systeme, in denen mehrere IDs innerhalb eines einzelnen Zeitstempels eine strikte Reihenfolge einhalten müssen.
Häufige Fragen
Alles Wichtige über ULIDs
Eine ULID ist ein 128-Bit-Bezeichner, kodiert als 26-stelliger Crockford-Base32-String (z.B. 01ARZ3NDEKTSV4RRFFQ69G5FAV). Die ersten 10 Zeichen stellen einen 48-Bit-Zeitstempel in Millisekunden seit dem Unix-Epoch dar (gültig bis zum Jahr 10889). Die verbleibenden 16 Zeichen sind 80 Bit kryptografisch zufällige Daten. Das ergibt über 1,208 × 10^24 mögliche Werte pro Millisekunde.
Beide sind 128-Bit-Eindeutiger-Bezeichner, aber mit wesentlichen Unterschieden. ULIDs sind lexikografisch nach Generierungszeit sortierbar, was die Datenbankindex-Performance erheblich verbessert. Sie verwenden Crockford-Base32 (keine Bindestriche, Groß-/Kleinschreibungsunabhängig) – 26 Zeichen statt 36 bei UUIDs. UUIDs haben eine leicht höhere Entropie pro Zeichen, sind aber standardmäßig nicht sortierbar. Für die meisten Datenbankszenarien sind ULIDs die bessere Wahl.
Im normalen Modus können ULIDs in derselben Millisekunde möglicherweise nicht korrekt sortieren, da sie unabhängige Zufallsteile haben. Der monotone Modus löst das: Der Zufallsteil wird für jede ULID, die in derselben Millisekunde generiert wird, um 1 inkrementiert und garantiert so eine strikt aufsteigende Reihenfolge. Verwende den monotonen Modus, wenn absolute Sortiergarantien für die Hochdurchsatz-ID-Generierung benötigt werden.
Ja. Die ersten 10 Zeichen einer ULID kodieren einen 48-Bit-Unix-Zeitstempel in Millisekunden. Zum Dekodieren wird jedes Zeichen mit Crockford-Base32 (Alphabet: 0123456789ABCDEFGHJKMNPQRSTVWXYZ) interpretiert und positionell zur Basis 32 multipliziert. Der ULID-Decoder in diesem Tool macht das automatisch und zeigt den genauen Erstellungszeitpunkt in UTC und Lokalzeit an.
Ja, ULIDs sind eine ausgezeichnete Wahl für Primärschlüssel. Ihre lexikografische Sortierbarkeit bedeutet, dass sequenzielle Einfügungen die B-Tree-Lokalität beibehalten – im Gegensatz zu zufälligen UUID v4, die Seitenfragmentierung und Performance-Probleme verursachen. Viele Produktionssysteme verwenden ULIDs als Primärschlüssel in PostgreSQL, MySQL und anderen Datenbanken. Der 80-Bit-Zufallsteil macht Kollisionen selbst bei sehr hohen Generierungsraten praktisch unmöglich.