Zum Inhalt springen

KSUID-Generator - Erstellen Sie sortierbare eindeutige Bezeichner

Generieren Sie K-sortierbare eindeutige Bezeichner (KSUIDs) online. Erstellen Sie zeitsortierbare, kollisionsresistente IDs für verteilte Systeme und Datenbanken sofort.

KSUID-Generator

Ladekalkulator...
📚

Dokumentation

KSUID-Generator

Ein KSUID (K-Sortable Unique Identifier) ist ein Code mit 27 Zeichen, der zum Kennzeichnen von Datensätzen wie Datenbankzeilen, Protokolleinträgen oder API-Anfragen verwendet wird. Er kombiniert einen Zeitstempel mit Zufallsdaten. Daher werden später erstellte IDs immer nach früher erstellten IDs sortiert, obwohl jede einzelne weiterhin praktisch eindeutig ist. Dieses Tool erzeugt eine einzelne KSUID im Browser und ermöglicht das Kopieren.

Woraus besteht eine KSUID?

Eine KSUID ist 20 Byte lang und in zwei Teile aufgeteilt:

  • Zeitstempel (4 Byte): die Anzahl der Sekunden seit einem festen Startzeitpunkt, der als KSUID-Epoche bezeichnet wird.
  • Zufallsdaten (16 Byte): Daten, die vom kryptografischen Zufallszahlengenerator des Browsers erzeugt werden.

Diese 20 Byte werden anschließend mithilfe der Base62-Kodierung in Text umgewandelt, einem System, das Zahlen mit 62 Zeichen darstellt: den Ziffern 0-9, den Großbuchstaben A–Z und den Kleinbuchstaben a–z. Das Ergebnis wird immer auf genau 27 Zeichen aufgefüllt, zum Beispiel 0qjBBlJIfbVLKwnJn4xpLGDr00e.

Da der Zeitstempel an erster Stelle steht, werden zwei KSUIDs, die im Abstand von einer Sekunde erstellt wurden, beim Vergleich als reiner Text normalerweise in derselben Reihenfolge wie ihre Erstellungszeiten sortiert. Da die letzten 16 Byte zufällig sind, unterscheiden sich zwei in derselben Sekunde erstellte KSUIDs mit nahezu völliger Sicherheit.

KSUID-Epoche

Die meisten Computersysteme zählen die Zeit in Sekunden seit 1. Januar 1970 (der „Unix-Epoche“). KSUIDs verwenden einen anderen Startzeitpunkt, die KSUID-Epoche: 1.400.000.000 Sekunden nach der Unix-Epoche, also 13. Mai 2014 um 16:53:20 UTC.

Ein späterer Startzeitpunkt ermöglicht es dem 4-Byte-Zeitstempelfeld, mehr nutzbare Jahre abzudecken, bevor sein Wertebereich erschöpft ist. Ein Zähler mit 4 Byte (32 Bit) kann höchstens 4.294.967.295 Sekunden speichern. Von der KSUID-Epoche aus gerechnet ist dieser Zeitraum ungefähr am 19. Juni 2150 ausgeschöpft.

KSUID-Formel

Eine KSUID-Zeichenfolge wird in drei Schritten erstellt.

  1. Zeitstempelwert ermitteln:

    T = floor(current_unix_time_in_seconds) − 1,400,000,000

  2. 16 zufällige Byte, R, mithilfe eines kryptografisch sicheren Zufallszahlengenerators erzeugen.

  3. Den 4-Byte-Zeitstempel und die 16 zufälligen Byte zu einem Block mit 20 Byte verbinden und diesen Block in Base62 kodieren; das Ergebnis auf 27 Zeichen auffüllen:

    KSUID = Base62( T ‖ R )

Hier bedeutet ‖ „hintereinander anordnen“. Die Zeitstempel-Bytes stehen immer am Anfang, wodurch die fertige Zeichenfolge nach der Zeit korrekt sortiert wird.

Rechenbeispiel

Angenommen, der Zeitstempelanteil einer KSUID lautet 100000000. Da die KSUID-Epoche 1.400.000.000 Sekunden nach der Unix-Epoche liegt, entspricht dieser Zeitstempel 14. Juli 2017 um 02:40:00 UTC.

Kombiniert man diesen Zeitstempel mit der Bytefolge aus 16 Byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (hier nur verwendet, damit das Beispiel reproduzierbar bleibt; ein echter Generator verwendet stattdessen zufällige Bytes), ergibt die Base62-Kodierung:

0qjBBlJIfbVLKwnJn4xpLGDr00e

Diese Zeichenfolge ist 27 Zeichen lang, besteht ausschließlich aus Ziffern und Buchstaben und kann direkt in einer URL oder einem Dateinamen verwendet werden.

Verwendung des KSUID-Generator-Tools

  1. Die KSUID-Generatorseite öffnen.
  2. Die Schaltfläche „Generate KSUID“ auswählen.
  3. Das Tool erstellt mithilfe der aktuellen Zeit und neuer Zufalls-Bytes eine KSUID und zeigt sie auf der Seite an.
  4. Die Schaltfläche „Copy KSUID“ auswählen, um den Wert in die Zwischenablage zu kopieren.
  5. „Reset“ auswählen, um das Ergebnis zu löschen. Die Schaltfläche „Reset“ wird erst angezeigt, nachdem eine KSUID erzeugt wurde.

Jeder Klick auf „Generate KSUID“ erzeugt genau eine Kennung. Um mehrere KSUIDs zu erstellen, muss die Schaltfläche für jede weitere KSUID erneut angeklickt werden; das Tool verfügt weder über einen Stapelmodus noch über einen Dateiexport.

Der Generator verwendet die in modernen Browsern integrierte Web Crypto API. Ist diese API nicht verfügbar, zeigt das Tool einen Fehler an, statt eine ID zu erzeugen, da ein nicht kryptografisch sicherer Zufallszahlengenerator Kennungen erzeugen könnte, die leichter zu erraten sind oder miteinander kollidieren.

KSUID im Vergleich zur UUID

Eine UUID (Universally Unique Identifier) ist ein verbreitetes alternatives Kennungsformat. Die am häufigsten verwendete Version, UUID v4, ist 36 Zeichen lang und besteht fast vollständig aus zufälligen Bits. Daher geben zwei UUIDs keinen Hinweis darauf, welche zuerst erstellt wurde.

Eine KSUID unterscheidet sich in drei Punkten:

  • Nach Zeit sortierbar. Die vorangestellten Zeitstempel-Bytes bewirken, dass eine einfache alphabetische Sortierung von KSUID-Zeichenfolgen sie ebenfalls nach ihrer Erstellungszeit sortiert.
  • Kürzer. Eine KSUID ist 27 Zeichen lang, eine Standard-UUID dagegen 36 Zeichen.
  • Keine Trennzeichen. Eine UUID wird normalerweise mit Bindestrichen geschrieben (xxxxxxxx-xxxx-...); eine KSUID enthält keine.

Beide Formate können unabhängig voneinander auf verschiedenen Computern erzeugt werden, ohne einen zentralen Server abzufragen. Dadurch vermeiden beide den Engpass eines automatisch inkrementierten Zählers in einer gemeinsam genutzten Datenbank.

Häufig gestellte Fragen

Wofür steht KSUID? K-Sortable Unique Identifier. Das „K“ bezieht sich darauf, dass die Kennung sortierbar ist („kind of sortable“ in den ursprünglichen Entwurfsnotizen von Segment, dem Unternehmen, das das Format entwickelt hat).

Wie lang ist eine KSUID? 27 Zeichen, die mit Base62 codiert sind (Ziffern 0-9, Großbuchstaben und Kleinbuchstaben).

Was ist die KSUID-Epoche? 13. Mai 2014 um 16:53:20 UTC; das entspricht 1.400.000.000 Sekunden nach der Standard-Unix-Epoche am 1. Januar 1970.

Können zwei KSUIDs kollidieren? Das ist äußerst unwahrscheinlich. Jede KSUID enthält 16 zufällige Byte (128 Bit), die mit einem kryptografisch sicheren Zufallszahlengenerator erzeugt werden. Selbst die Erzeugung vieler KSUIDs in derselben Sekunde lässt nur eine astronomisch geringe Wahrscheinlichkeit, dass zwei zufällig übereinstimmen.

Kann ich die Erstellungszeit aus einer KSUID ermitteln? Ja. Die ersten 4 Byte des dekodierten Werts enthalten den Zeitstempel. Addiert man diese Anzahl von Sekunden zur KSUID-Epoche, erhält man die ursprüngliche Erstellungszeit.

Unterstützt dieses Tool die gleichzeitige Erzeugung vieler KSUIDs? Nein. Das Tool erzeugt bei jedem Klick auf die Schaltfläche „Generate KSUID“ eine KSUID. Es gibt weder ein Mengenfeld noch ein Feld für einen benutzerdefinierten Zeitstempel oder eine Export-/Download-Funktion.

Kann eine KSUID sicher in einer URL verwendet werden? Ja. Die Base62-Kodierung verwendet ausschließlich Ziffern und Buchstaben. Daher ist für eine KSUID kein zusätzliches Escaping erforderlich, wenn sie in einer URL, einem Dateinamen oder einem Datenbankschlüssel vorkommt.

Referenzen

  1. KSUID-GitHub-Repository von Segment: https://github.com/segmentio/ksuid
  2. "Generating good unique identifiers" von Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html