Ефикасни CUID генератор јединствених идентификатора у системима
Генеришите јединствене идентификаторе отпорне на колизију (CUID) за дистрибуиране системе, базе података и веб апликације. Брзо креирајте скалабилне, сортабилне ID-јеве.
Генератор CUID-а
Брзо и лако генеришите ID отпоран на колизије.
Dokumentacija
Шта је КУИД?
КУИД (јединствени идентификатор отпоран на колизије) је кратак низ слова и цифара који се користи за означавање записа, датотеке или догађаја, тако да ниједне две ставке немају исто име. Овај алат генерише CUID2, тренутну верзију формата, помоћу библиотеке @paralleldrive/cuid2. Сваки идентификатор има 25 знакова, садржи само мала слова и цифре и у потпуности се креира у прегледачу — ништа се не шаље серверу.
Како се користи овај генератор КУИД-а
- Кликните на Генериши нови КУИД да бисте креирали идентификатор.
- Кликните на Копирај у међуспремник да бисте га копирали.
- Налепите идентификатор у базу података, назив датотеке или апликацију.
- Кликните поново на „Генериши“ за други идентификатор. Колизије између одвојених вредности CUID2 изузетно су мало вероватне, мада нису математички немогуће.
- Кликните на Ресетуј да бисте обрисали резултат.
Генерисани идентификатор се такође чува у URL-у странице, па се веза до резултата може делити или сачувати у обележивачима.
Структура и формула CUID2
CUID2 се гради овако:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2Хеш-функција комбинује четири приватна улаза: тренутно време, бројач по сесији, отисак хоста и случајну ентропију. Те податке обрађује алгоритмом SHA3-512, претвара резултат у основу 36 (цифре 0–9 и слова a-z), а затим задржава 24 тих знакова. Случајно почетно слово доводи завршени идентификатор до 25 знакова, колико је подешен овај алат.
Само први знак стоји независно: случајно слово постављено на почетак, тако да сваки идентификатор почиње словом, а не цифром. Многи системи, као што су називи СКЛ табела и колона, захтевају да идентификатори почињу словом, па је CUID2 безбедан за употребу као назив готово било где. Сваки знак после тог првог слова део је једног непрекидног, непрозирног хеш-тела — оно нема одвојене одељке.
Пошто хеш функционише само у једном смеру, ниједан од његових улаза не може се извући из готовог идентификатора. CUID2 нема временску ознаку, бројач ни отисак који би се могли повратити. То је намерни избор у погледу приватности и безбедности: сам идентификатор не може открити када је или где је креиран.
Решен пример
Генерисање идентификатора овим алатом може дати:
1vcpuhcj51eomj1o31dnlqopu0
2Овде је v случајно почетно слово, а cpuhcj51eomj1o31dnlqopu0 (24 знака) представља хеш-тело. Та два дела изгледају различито само зато што је за први знак загарантовано да буде слово — хеш-тело може садржати комбинацију слова и цифара.
Зашто системи користе CUID2
- Није потребна координација. Свака машина може самостално да генерише важећи идентификатор, без захтева централном серверу или бази података за следећу вредност.
- Отпорност на колизије. Комбинација времена, бројача, отиска хоста и случајне ентропије чини изузетно мало вероватним да две машине произведу исти идентификатор, чак и када генеришу много идентификатора у секунди.
- Погодан за URL. CUID2 користи само мала слова и цифре, па га никада није потребно кодирати за употребу у веб-адреси.
- Брзо и приватно генерисање. Пошто овај алат покреће генератор у прегледачу, идентификатори се креирају тренутно и никада не напуштају уређај.
Идентификатори CUID2 не могу се сортирати према времену креирања. За разлику од аутоматски увећаваног броја у бази података или старијег формата КУИД-а (верзија 1), CUID2 скрива временску ознаку унутар хеша, уместо да је чува у видљивом облику. Апликације којима је потребно сортирање записа према редоследу креирања треба да чувају засебну колону са временском ознаком уз идентификатор.
CUID2 у односу на УУИД и идентификаторе са аутоматским увећавањем
| Особина | CUID2 | УУИД v4 | Аутоматско увећавање |
|---|---|---|---|
| Дужина | 25 знакова | 36 знакова (са цртицама) | Разликује се (обично кратак број) |
| Скуп знакова | Мала слова и цифре | Хексадекадне цифре и цртице | Цифре |
| Потребна је централна координација | Не | Не | Да (секвенца базе података) |
| Може се сортирати према времену креирања | Не | Не | Да |
| Погодан за URL без кодирања | Да | Да | Да |
CUID2 и УУИД v4 решавају исти проблем: генерисање идентификатора без централне координације. CUID2 је краћи и користи мањи скуп знакова, што олакшава читање и лепљење у URL. УУИД је такође безбедан у веб-адреси, јер цртица није резервисани знак у URL-овима, али је за 11 знакова дужи.
Уобичајене примене
- Примарни кључеви у дистрибуираним базама података, где више сервера независно убацује редове
- Идентификатори захтева или праћења који се користе за праћење једне радње кроз више микросервиса
- Називи датотека за отпремљене датотеке, тако да две датотеке никада не замене једна другу
- Идентификатори сесија или токена за веб-апликације
- Идентификатори порука у редовима као што су Кафка или РабитМК
Кратка историја
Оригинални формат КУИД објавио је Ерик Елиот 2012. године као алтернативу УУИД-овима за дистрибуиране апликације. CUID2, који је објавио исти пројекат Paralleldrive, редизајнирао је формат на основу криптографског хеша и уклонио временску ознаку и бројач који су се могли реконструисати и које је оригинална верзија откривала. Овај алат генерише само идентификаторе CUID2.
Најчешће постављана питања
Која је разлика између КУИД-а (v1) и CUID2? КУИД v1 је унутар идентификатора чувао видљиву временску ознаку и бројач, што је омогућавало сортирање идентификатора, али је откривало када и колико идентификатора је било креирано. CUID2 замењује та видљива поља једносмерним хешем, па се из идентификатора не могу прочитати никакве информације.
Могу ли се КУИД-ови из овог алата сортирати према времену креирања? Не. CUID2 нема временску ознаку која се може повратити, па се идентификатори не могу поређати према времену генерисања само на основу низа.
Колико је дугачак генерисани идентификатор и може ли се дужина променити? Овај алат увек генерише идентификаторе дужине 25 знакова. У овом алату не постоји опција за захтев друге дужине.
Могу ли две различите машине истовремено да генеришу исти CUID2? Теоријски је могуће, али је у пракси изузетно мало вероватно. Сваки идентификатор комбинује отисак специфичан за хост са случајном ентропијом, па је веома мало вероватно да ће независне машине икада произвести исти хеш.
Да ли овај алат шаље податке серверу? Не. Идентификатор генерише ЈаваСкрипт који се извршава у прегледачу, користећи локални системски сат и случајност коју обезбеђује прегледач. Ништа се не преноси.
Могу ли да користим CUID2 као примарни кључ базе података?
Да. Идентификатори CUID2 добро функционишу као примарни кључеви у дистрибуираним базама података, јер сваки чвор може да генерише један без провере са централном секвенцом. Они се природно не сортирају према времену уметања, па апликација којој је тај редослед потребан треба да чува засебну колону created_at.