Przejdź do treści

Generator KSUID - Twórz sortowalne unikalne identyfikatory

Generuj K-Sortowalne Unikalne Identyfikatory (KSUID) online. Natychmiast twórz sortowalne czasowo, odporne na kolizje identyfikatory dla rozproszonych systemów i baz danych.

Generator KSUID

Kalkulator załadunku...
📚

Dokumentacja

Generator KSUID

KSUID (K-Sortable Unique Identifier, czyli sortowalny unikatowy identyfikator) to kod o długości 27 znaków, używany do oznaczania rekordów, takich jak wiersze bazy danych, wpisy dziennika lub żądania API. Łączy znacznik czasu z losowymi danymi, dzięki czemu identyfikatory utworzone później są zawsze sortowane za identyfikatorami utworzonymi wcześniej, mimo że każdy z nich pozostaje w praktyce unikatowy. To narzędzie generuje pojedynczy KSUID w przeglądarce i pozwala go skopiować.

Z czego składa się KSUID?

KSUID ma długość 20 bajtów i jest podzielony na dwie części:

  • Znacznik czasu (4 bajty): liczba sekund od ustalonego punktu początkowego zwanego epoką KSUID.
  • Losowy ładunek (16 bajtów): dane wygenerowane przez kryptograficzny generator liczb losowych przeglądarki.

Te 20 bajtów jest następnie konwertowanych na tekst za pomocą kodowania base62, systemu reprezentującego liczby przy użyciu 62 znaków: cyfr 0-9, wielkich liter A–Z oraz małych liter a–z. Wynik jest zawsze uzupełniany do dokładnie 27 znaków, na przykład 0qjBBlJIfbVLKwnJn4xpLGDr00e.

Ponieważ znacznik czasu znajduje się na początku, dwa KSUID-y utworzone w odstępie sekundy zwykle zostaną posortowane w tej samej kolejności co odpowiadające im czasy utworzenia, gdy porówna się je jako zwykły tekst. Ponieważ ostatnie 16 bajtów jest losowych, dwa KSUID-y utworzone w tej samej sekundzie niemal na pewno będą różne.

Epoka KSUID

Większość systemów komputerowych liczy czas w sekundach od 1 stycznia 1970 („epoki Uniksa”). KSUID-y używają innego punktu początkowego, czyli epoki KSUID: 1 400 000 000 sekund po epoce Uniksa, co odpowiada 13 maja 2014, 16:53:20 UTC.

Późniejszy punkt początkowy pozwala, aby 4-bajtowe pole znacznika czasu obejmowało więcej użytecznych lat, zanim zabraknie w nim miejsca. Licznik o rozmiarze 4 bajtów (32 bitów) może przechować najwyżej 4 294 967 295 sekund. Licząc od epoki KSUID, ten zakres czasu kończy się około 19 czerwca 2150.

Wzór KSUID

Ciąg KSUID powstaje w trzech krokach.

  1. Wyznacz wartość znacznika czasu:

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

  2. Wygeneruj 16 losowych bajtów, R, za pomocą kryptograficznie bezpiecznego generatora liczb losowych.

  3. Połącz 4-bajtowy znacznik czasu i 16 losowych bajtów w jeden blok o długości 20 bajtów, a następnie zakoduj ten blok w systemie base62, uzupełniając wynik do 27 znaków:

    KSUID = Base62( T ‖ R )

W tym wzorze ‖ oznacza „umieść jeden element za drugim”. Bajty znacznika czasu zawsze znajdują się na początku, dzięki czemu końcowy ciąg jest poprawnie sortowany według czasu.

Przykład obliczeniowy

Załóżmy, że część znacznika czasu KSUID ma wartość 100000000. Ponieważ epoka KSUID przypada 1 400 000 000 sekund po epoce Uniksa, ten znacznik czasu odpowiada 14 lipca 2017, 02:40:00 UTC.

Połączenie tego znacznika czasu z sekwencją 16 bajtów 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (użytą tutaj wyłącznie w celu zapewnienia powtarzalności przykładu; rzeczywisty generator używa losowych bajtów) daje w wyniku kodowania base62:

0qjBBlJIfbVLKwnJn4xpLGDr00e

Ten ciąg ma długość 27 znaków, składa się wyłącznie z cyfr i liter oraz może być bezpośrednio używany w adresie URL lub nazwie pliku.

Jak korzystać z generatora KSUID

  1. Otwórz stronę generatora KSUID.
  2. Wybierz przycisk „Generate KSUID”.
  3. Narzędzie tworzy jeden nowy KSUID na podstawie bieżącego czasu i nowych losowych bajtów, a następnie wyświetla go na stronie.
  4. Wybierz przycisk „Copy KSUID”, aby skopiować wartość do schowka.
  5. Wybierz opcję „Reset”, aby wyczyścić wynik. Przycisk Reset pojawia się dopiero po wygenerowaniu KSUID-u.

Każde kliknięcie „Generate KSUID” tworzy dokładnie jeden identyfikator. Aby utworzyć kilka KSUID-ów, kliknij przycisk ponownie dla każdego z nich; narzędzie nie ma trybu wsadowego ani funkcji eksportu do pliku.

Generator korzysta z interfejsu Web Crypto API wbudowanego w nowoczesne przeglądarki. Jeśli ten interfejs jest niedostępny, narzędzie wyświetla błąd zamiast tworzyć identyfikator, ponieważ generator liczb losowych, który nie jest kryptograficznie bezpieczny, może tworzyć identyfikatory łatwiejsze do odgadnięcia lub prowadzące do kolizji.

KSUID a UUID

UUID (Universally Unique Identifier, czyli uniwersalny unikatowy identyfikator) to popularny alternatywny format identyfikatora. Najczęściej używana wersja, UUID v4, ma długość 36 znaków i składa się niemal wyłącznie z losowych bitów, więc dwa UUID-y nie wskazują, który z nich utworzono wcześniej.

KSUID różni się od niego na trzy sposoby:

  • Sortowanie według czasu. Początkowe bajty znacznika czasu sprawiają, że zwykłe sortowanie alfabetyczne ciągów KSUID sortuje je również według czasu utworzenia.
  • Mniejsza długość. KSUID ma 27 znaków, podczas gdy standardowy UUID ma ich 36.
  • Brak separatorów. UUID jest zwykle zapisywany z łącznikami (xxxxxxxx-xxxx-...), natomiast KSUID ich nie zawiera.

Oba formaty można generować niezależnie na różnych komputerach bez kontaktowania się z centralnym serwerem, dzięki czemu oba unikają wąskiego gardła w postaci licznika automatycznie zwiększanego we współdzielonej bazie danych.

Często zadawane pytania

Co oznacza skrót KSUID? K-Sortable Unique Identifier. Litera „K” odnosi się do tego, że identyfikator można sortować („kind of sortable”, czyli „w pewnym sensie sortowalny”, zgodnie z pierwotnymi notatkami projektowymi firmy Segment, która stworzyła ten format).

Jak długa jest wartość KSUID? 27 znaków, zakodowanych w systemie base62 (cyfry 0-9, wielkie litery, małe litery).

Czym jest epoka KSUID? 13 maja 2014, 16:53:20 UTC, czyli 1 400 000 000 sekund po standardowej epoce Uniksa przypadającej na 1 stycznia 1970.

Czy może dojść do kolizji dwóch KSUID-ów? Jest to niezwykle mało prawdopodobne. Każdy KSUID zawiera 16 losowych bajtów (128 bitów) wygenerowanych przez kryptograficznie bezpieczny generator liczb losowych. Nawet wygenerowanie wielu KSUID-ów w tej samej sekundzie pozostawia astronomicznie małe prawdopodobieństwo przypadkowego uzyskania dwóch identycznych wartości.

Czy można odzyskać czas utworzenia na podstawie KSUID-u? Tak. Pierwsze 4 bajty zdekodowanej wartości zawierają znacznik czasu. Dodanie tej liczby sekund do epoki KSUID daje pierwotny czas utworzenia.

Czy to narzędzie obsługuje jednoczesne generowanie wielu KSUID-ów? Nie. Narzędzie generuje jeden KSUID po każdym kliknięciu przycisku „Generate KSUID”. Nie ma pola do podania liczby, niestandardowego pola znacznika czasu ani funkcji eksportu lub pobierania.

Czy KSUID można bezpiecznie umieścić w adresie URL? Tak. Kodowanie base62 używa wyłącznie cyfr i liter, więc KSUID nie wymaga dodatkowego kodowania, aby umieścić go w adresie URL, nazwie pliku lub kluczu bazy danych.

Piśmiennictwo

  1. Repozytorium KSUID firmy Segment w serwisie GitHub: https://github.com/segmentio/ksuid
  2. "Generating good unique identifiers" autorstwa Petera Bourgona: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html