KSUID Генератор - Креирајте Сортабилне Јединствене Идентификаторе
Генеришите К-Сортабилне Јединствене Идентификаторе (KSUID) онлајн. Брзо креирајте временски сортабилне, отпорне на колизију ID-јеве за дистрибуиране системе и базе података.
KSUID генератор
Dokumentacija
Генератор KSUID идентификатора
KSUID (јединствени идентификатор који се може сортирати по K-у) је код од 27 знакова који се користи за означавање записа као што су редови у бази података, уноси у дневнику или API захтеви. Комбинује временску ознаку са случајним подацима, па се идентификатори направљени касније увек сортирају после идентификатора направљених раније, иако је сваки од њих практично јединствен. Овај алат у прегледачу генерише један KSUID и омогућава кориснику да га копира.
Од чега се састоји KSUID?
KSUID има дужину од 20 бајтова и подељен је на два дела:
- Временска ознака (4 бајта): број секунди од фиксне почетне тачке која се назива KSUID епоха.
- Случајни подаци (16 бајтова): подаци које генерише криптографски генератор случајних бројева у прегледачу.
Тих 20 бајтова се затим претвара у текст помоћу кодирања base62, система који бројеве представља помоћу 62 знакова: цифара 0-9, великих слова A-Z и малих слова a-z. Резултат се увек допуњава до тачно 27 знакова, на пример 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Пошто временска ознака долази прва, два КСУИД идентификатора направљена у размаку од једне секунде обично ће се, при поређењу као обичан текст, сортирати истим редоследом као и време њиховог настанка. Пошто је последњих 16 бајтова насумично, готово је сигурно да ће се два КСУИД идентификатора направљена у истој секунди разликовати.
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 стринг се формира у три корака.
-
Одређивање вредности временске ознаке:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Генерисање 16 случајних бајтова,
R, помоћу криптографски безбедног генератора случајних бројева. -
Спојите временску ознаку од 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-а
- Отворите страницу генератора KSUID-а.
- Изаберите дугме „Генериши KSUID“.
- Алат прави један нови KSUID користећи тренутно време и свеже случајне бајтове, а затим га приказује на страници.
- Изаберите дугме „Копирај KSUID“ да бисте копирали вредност у међуспремник.
- Изаберите „Ресетуј“ да бисте обрисали резултат. Дугме „Ресетуј“ појављује се тек након генерисања KSUID-а.
Сваки клик на „Генериши KSUID“ производи тачно један идентификатор. Да бисте направили више KSUID идентификатора, кликните на дугме за сваки нови идентификатор; алат нема уграђену групну обраду ни извоз у датотеку.
Генератор се ослања на Web Crypto API уграђен у савремене прегледаче. Ако тај API није доступан, алат приказује грешку уместо да направи идентификатор, јер генератор случајних бројева који није криптографски безбедан може да произведе идентификаторе које је лакше погодити или код којих може доћи до судара.
KSUID у поређењу са UUID-ом
UUID (универзално јединствени идентификатор) је уобичајен алтернативни формат идентификатора. Најраспрострањенија верзија, UUID v4, има 36 знакова и готово се у потпуности састоји од случајних битова, па два UUID идентификатора не откривају који је од њих први направљен.
KSUID се разликује на три начина:
- Сортирање по времену. Почетни бајтови временске ознаке значе да се обично азбучно сортирање KSUID ниски истовремено врши и по времену настанка.
- Краћи је. KSUID има 27 знакова, у поређењу са 36 знакова код стандардног UUID-а.
- Нема сепаратора. UUID се обично пише са цртицама (
xxxxxxxx-xxxx-...), док их KSUID нема.
Оба формата могу се независно генерисати на различитим рачунарима без провере код централног сервера, па оба избегавају уско грло бројача са аутоматским увећавањем у дељеној бази података.
Најчешће постављана питања
Шта значи KSUID? K-Sortable Unique Identifier, односно јединствени идентификатор који се може сортирати по K-у. Слово „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-у, називу датотеке или кључу базе података.
Референце
- KSUID GitHub репозиторијум компаније Segment: https://github.com/segmentio/ksuid
- "Generating good unique identifiers", аутор Питер Бургон: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html