Прескочи към съдържанието

Генератор на KSUID - Създаване на сортируеми уникални идентификатори

Генерирайте К-сортируеми уникални идентификатори (KSUID) онлайн. Създавайте времево сортируеми, устойчиви на сблъсъци идентификатори за разпределени системи и бази данни мигновено.

Генератор на KSUID

Калкулатор за зареждане...
📚

Документация

Генератор на KSUID

KSUID (K-Sortable Unique Identifier, уникален идентификатор, подреждаем по ключ) е код от 27 знака, използван за обозначаване на записи като редове в база данни, записи в журнал или заявки към API. Той съчетава времеви печат със случайни данни, така че идентификаторите, създадени по-късно, винаги се подреждат след идентификаторите, създадени по-рано, въпреки че всеки от тях остава практически уникален. Този инструмент генерира един KSUID в браузъра и позволява на потребителя да го копира.

От какво се състои KSUID?

KSUID е дълъг 20 байта, разделени на две части:

  • Времеви печат (4 байта): броят секунди от фиксирана начална точка, наречена епоха на KSUID.
  • Случайно съдържание (16 байта): данни, създадени от криптографския генератор на случайни числа на браузъра.

След това тези 20 байта се преобразуват в текст чрез кодиране base62 — система, която представя числата с 62 знака: цифрите 0-9, главните букви A–Z и малките букви a–z. Резултатът винаги се допълва до точно 27 знака, например 0qjBBlJIfbVLKwnJn4xpLGDr00e.

Тъй като времевият печат е в началото, два KSUID идентификатора, създадени през интервал от една секунда, обикновено се подреждат в същия ред като времето на създаването им, когато се сравняват като обикновен текст. Тъй като последните 16 байта са случайни, два KSUID идентификатора, създадени в една и съща секунда, почти сигурно са различни.

Епоха на KSUID

Повечето компютърни системи отчитат времето в секунди от 1 януари 1970 г. („епохата на Unix“). KSUID използва различна начална точка — епохата на KSUID: 1 400 000 000 секунди след епохата на Unix, което е 13 май 2014 г., 16:53:20 UTC.

По-късната начална точка позволява на полето за времевия печат от 4 байта да обхване повече полезни години, преди да се запълни. Брояч от 4 байта (32 бита) може да съхранява най-много 4 294 967 295 секунди. От началото на епохата на KSUID този период изтича около 19 юни 2150 г..

Формула за KSUID

Низът KSUID се създава в три стъпки.

  1. Намира се стойността на времевия печат:

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

  2. Генерират се 16 случайни байта, R, чрез криптографски защитен генератор на случайни числа.

  3. Времевият печат от 4 байта и 16-те случайни байта се обединяват в един блок от 20 байта, след което блокът се кодира в base62 и резултатът се допълва до 27 знака:

    KSUID = Base62( T ‖ R )

Тук ‖ означава „поставяне един след друг“. Байтовете на времевия печат винаги са първи и именно това осигурява правилното подреждане на крайния низ по време.

Пример с решение

Да приемем, че частта с времевия печат на KSUID е 100000000. Тъй като епохата на KSUID е 1 400 000 000 секунди след епохата на Unix, този времеви печат съответства на 14 юли 2017 г., 02:40:00 UTC.

Към този времеви печат се добавя последователността от 16 байта 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (използвана тук само за възпроизводимост на примера; реалният генератор използва случайни байтове), а кодирането в base62 дава:

0qjBBlJIfbVLKwnJn4xpLGDr00e

Този низ е дълъг 27 знака, състои се само от цифри и букви и може безопасно да се използва директно в URL адрес или име на файл.

Как се използва инструментът за генериране на KSUID

  1. Отворете страницата на генератора на KSUID.
  2. Изберете бутона „Генериране на KSUID“.
  3. Инструментът създава един нов KSUID, като използва текущото време и нови случайни байтове, и го показва на страницата.
  4. Изберете бутона „Копиране на KSUID“, за да копирате стойността в клипборда.
  5. Изберете „Нулиране“, за да изчистите резултата. Бутонът „Нулиране“ се появява само след генериране на KSUID.

Всяко натискане на „Генериране на KSUID“ създава точно един идентификатор. За да създадете няколко KSUID идентификатора, натискайте бутона отново за всеки нов идентификатор; инструментът няма вграден режим за пакетно генериране или експортиране във файл.

Генераторът използва Web Crypto API, вграден в съвременните браузъри. Ако този API не е наличен, инструментът показва грешка, вместо да създаде идентификатор, тъй като генератор на случайни числа, който не е криптографски защитен, може да създаде идентификатори, които се отгатват по-лесно или съвпадат.

KSUID в сравнение с UUID

UUID (Universally Unique Identifier, универсален уникален идентификатор) е често използван алтернативен формат на идентификатор. Най-използваната версия, UUID v4, е дълга 36 знака и почти изцяло се състои от случайни битове, така че два UUID идентификатора не дават представа кой е създаден пръв.

KSUID се различава по три начина:

  • Сортиране по време. Водещите му байтове с времевия печат означават, че обикновеното азбучно подреждане на низове KSUID ги подрежда и по време на създаване.
  • По-кратък. KSUID е дълъг 27 знака в сравнение с 36 знака за стандартен UUID.
  • Без разделители. UUID обикновено се записва с тирета (xxxxxxxx-xxxx-...), а KSUID няма такива.

И двата формата могат да се генерират независимо на различни компютри, без проверка чрез централен сървър, така че и двата избягват тесното място, създадено от автоматично увеличаващ се брояч в споделена база данни.

Често задавани въпроси

Какво означава KSUID? K-Sortable Unique Identifier — уникален идентификатор, подредим по ключ. „K“ се отнася до факта, че идентификаторът може да се подрежда („донякъде подредим“ според оригиналните проектни бележки на Segment, компанията, създала формата).

Колко дълъг е KSUID? 27 знака, кодирани чрез base62 (цифрите 0-9, главни и малки букви).

Какво представлява епохата на KSUID? 13 май 2014 г., 16:53:20 UTC, което е 1 400 000 000 секунди след стандартната Unix епоха от 1 януари 1970 г..

Могат ли два KSUID идентификатора да съвпаднат? Това е изключително малко вероятно. Всеки KSUID включва 16 случайни байта (128 бита), генерирани чрез криптографски защитен генератор на случайни числа. Дори генерирането на много KSUID идентификатори в една и съща секунда оставя астрономически малка вероятност два от тях да съвпаднат случайно.

Мога ли да възстановя времето на създаване от KSUID? Да. Първите 4 байта на декодираната стойност са времевият печат. Като се добави този брой секунди към епохата на KSUID, се получава първоначалното време на създаване.

Поддържа ли този инструмент едновременното генериране на много KSUID идентификатори? Не. Инструментът генерира по един KSUID при всяко натискане на бутона „Генериране на KSUID“. Няма поле за брой, поле за персонализиран времеви печат или функция за експортиране/изтегляне.

Безопасно ли е KSUID да се поставя в URL адрес? Да. Кодирането base62 използва само цифри и букви, така че KSUID не се нуждае от допълнително екраниране, за да се използва в URL адрес, име на файл или ключ в база данни.

Източници

  1. GitHub хранилището на Segment за KSUID: https://github.com/segmentio/ksuid
  2. "Generating good unique identifiers" от Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html