KSUID Generator
KSUID Generator
Увод
KSUID (K-Sortable Unique IDentifier) је формат јединственог идентификатора који нуди неколико предности у односу на традиционалне UUID (Universally Unique Identifier) и друге системе идентификатора. Овај алат вам омогућава да брзо и лако генеришете KSUID-ове.
Шта је KSUID?
KSUID је идентификатор дужине 20 бајтова који се састоји од:
- 32-битног временског жига (4 бајта)
- 16 бајтова случајности
Када се представи као низ, KSUID је кодирана у base62 и дуга је 27 карактера.
Структура KSUID-а
Структура KSUID-а може се разложити на следећи начин:
-
Временски жиг (4 бајта): Ово представља број секунди од Unix епохе (1. јануар 1970. у 00:00 UTC). Временски жиг омогућава KSUID-овима да буду приближно сортирани по времену генерисања.
-
Случајна компонента (16 бајтова): Ово је криптографски сигурна случајна бројка која осигурава јединственост чак и када се више KSUID-ова генерише у истој секунди.
-
Base62 кодирање: Комбинованих 20 бајтова (временски жиг + случајна компонента) се затим кодира користећи base62 (A-Z, a-z, 0-9) да би се произвео коначни низ од 27 карактера.
KSUID формула
KSUID се може математички представити као:
Где:
- је 32-битни временски жиг
- је 128-битна случајна компонента
- означава конкатенацију
Временски жиг се израчунава као:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
Где је KSUID_epoch 1400000000 (2014-05-13T16:53:20Z).
Дијаграм структуре KSUID-а
Користи KSUID-ова
KSUID-ови су посебно корисни у следећим сценаријима:
-
Дистрибуирани системи: Када вам су потребни јединствени идентификатори преко више сервера или услуга без координације.
-
Времено-сортирани подаци: Када желите да сортирате податке по времену креирања без чувања одвојеног временског жига.
-
Кључеви базе података: Као примарни кључеви у базама података, посебно у дистрибуираним базама података где аутоматски инкрементални цели бројеви нису прикладни.
-
Идентификатори безбедни за URL: За креирање кратких, јединствених, идентификатора безбедних за URL за ресурсе у веб апликацијама.
-
Корелација логова: Да се корелишу лог записи преко различитих услуга у архитектури микросервиса.
Предности KSUID-ова
KSUID-ови нуде неколико предности у односу на друге системе идентификатора:
-
Сортирање: За разлику од UUID-ова, KSUID-ови могу бити хронолошки сортирани, што је корисно за индексирање база података и анализу логова.
-
Нема потребе за координацијом: За разлику од аутоматски инкременталних ID-ова, KSUID-ови се могу генерисати независно од различитих сервера без ризика од колизије.
-
Компактна репрезентација: На 27 карактера, KSUID-ови су компактнији од UUID-ова када се представљају као низови.
-
Уграђени временски жиг: Уграђени временски жиг омогућава сортирање и филтрирање на основу времена без потребе за одвојеним временским жигом.
-
Безбедно за URL: Base62 кодирање чини KSUID-ове безбедним за употребу у URL-овима без додатног кодирања.
-
Смањена вероватноћа колизије: 16-битна случајна компонента чини колизије изузетно маловероватним, чак и при високим стопама генерације.
Како користити овај генератор
- Унесите било које додатне параметре ако је потребно (нпр. прилагођени временски жиг).
- Кликните на дугме "Генериши KSUID" да бисте креирали нови KSUID.
- Генерисани KSUID ће бити приказан у излазном пољу.
- Можете генерисати више KSUID-ова понављањем корака 1-3.
- Користите дугме "Копирај" поред сваког KSUID-а да бисте га копирали у ваш клипборд.
- Опционално, користите функцију "Извези" да бисте преузели списак генерисаних KSUID-ова.
Запамтите да је сваки KSUID јединствен и да се треба користити само једном. Генеришите нови KSUID сваки пут када вам је потребан јединствени идентификатор.
Примери кода
Ево примера генерисања KSUID-ова на различитим програмским језицима:
## Python
import ksuid
new_id = ksuid.ksuid()
print(f"Генерисани KSUID: {new_id}")
Референце
- Segment-ова KSUID GitHub репозиторија: https://github.com/segmentio/ksuid
- "Генерисање добрих јединствених идентификатора" од Питера Боргона: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- KSUID спецификација: https://github.com/segmentio/ksuid/blob/master/README.md