Ефективен генератор на CUID за уникални идентификатори в системи
Генериране на уникални идентификатори (CUID), устойчиви на колизии, за разпределени системи, бази данни и уеб приложения. Създавайте мащабируеми, сортируеми ID-та мигновено.
CUID Генератор
Генерирайте ID, устойчиво на сблъсъци, бързо и лесно.
Документация
Какво представлява CUID?
CUID (уникален идентификатор, устойчив на колизии) е кратък низ от букви и цифри, използван за обозначаване на запис, файл или събитие, така че никои два елемента да не споделят едно и също име. Този инструмент генерира CUID2, текущата версия на формата, като използва библиотеката @paralleldrive/cuid2. Всеки идентификатор е с дължина 25 знака, съдържа само малки букви и цифри и се създава изцяло в браузъра — нищо не се изпраща към сървър.
Как се използва този генератор на CUID
- Натиснете Generate New CUID, за да създадете идентификатор.
- Натиснете Copy to Clipboard, за да го копирате.
- Поставете идентификатора в база данни, име на файл или приложение.
- Щракнете отново върху „Генериране“, за да получите друг идентификатор. Колизиите между отделни стойности CUID2 са изключително малко вероятни, макар и математически възможни.
- Натиснете Reset, за да изчистите резултата.
Генерираният идентификатор се съхранява и в 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 знака — дължината, за която е настроен този инструмент.
Само първият знак е самостоятелен: случайна буква, поставена отпред, така че всеки идентификатор да започва с буква, а не с цифра. Много системи, например имената на таблици и колони в SQL, изискват идентификаторите да започват с буква, затова CUID2 може безопасно да се използва като име почти навсякъде. Всеки знак след първата буква е част от едно непрекъснато, непрозрачно тяло на хеша — то няма отделни секции.
Тъй като хешът работи само в едната посока, нито една от входните му стойности не може да бъде извлечена обратно от готовия идентификатор. CUID2 няма възстановим времеви печат, брояч или отпечатък. Това е умишлен избор за поверителност и сигурност: само идентификаторът не може да разкрие кога или къде е създаден.
Решен пример
Генерирането на идентификатор с този инструмент може да даде:
1vcpuhcj51eomj1o31dnlqopu0
2Тук v е случайна начална буква, а cpuhcj51eomj1o31dnlqopu0 (24 знака) е тялото на хеша. Двете части изглеждат различно само защото първият знак задължително е буква — тялото на хеша може да съдържа смес от букви и цифри.
Защо системите използват CUID2
- Не е необходима координация. Всяка машина може самостоятелно да генерира валиден идентификатор, без да иска следващата стойност от централен сървър или база данни.
- Устойчивост на колизии. Комбинацията от време, брояч, отпечатък на хост машината и случайна ентропия прави изключително малко вероятно две машини да създадат един и същ идентификатор, дори когато генерират много идентификатори в секунда.
- Подходящ за URL адреси. CUID2 използва само малки букви и цифри, така че никога не е необходимо кодиране при употреба в уеб адрес.
- Бързо и поверително генериране. Тъй като този инструмент стартира генератора в браузъра, идентификаторите се създават незабавно и никога не напускат устройството.
Идентификаторите CUID2 не могат да се подреждат по време на създаване. За разлика от автоматично увеличаващо се число в база данни или от по-стария формат CUID (версия 1), CUID2 скрива времевия си печат в хеша, вместо да го съхранява в четим вид. Приложенията, които трябва да сортират записите по ред на създаване, следва да съхраняват отделна колона с времеви печат заедно с идентификатора.
CUID2 срещу UUID и идентификатори с автоматично увеличаване
| Характеристика | CUID2 | UUID v4 | Автоматично увеличаване |
|---|---|---|---|
| Дължина | 25 знака | 36 знака (с тирета) | Варира (обикновено кратко число) |
| Набор от знаци | Малки букви и цифри | Шестнадесетични цифри и тирета | Цифри |
| Изисква централна координация | Не | Не | Да (последователност в база данни) |
| Може да се сортира по време на създаване | Не | Не | Да |
| Подходящ за URL адреси без кодиране | Да | Да | Да |
CUID2 и UUID v4 решават един и същ проблем: генериране на идентификатори без централна координация. CUID2 е по-кратък и използва по-малък набор от знаци, което улеснява четенето и поставянето му в URL адрес. UUID също е безопасен за използване в уеб адрес, тъй като тирето е незапазен знак в URL адресите, но е с 11 знака по-дълъг.
Обичайни приложения
- Първични ключове в разпределени бази данни, където множество сървъри вмъкват редове независимо един от друг
- Идентификатори на заявки или за проследяване, с които се проследява едно действие през няколко микросървиса
- Имена на файлове за качени файлове, така че два файла никога да не презаписват един друг
- Идентификатори на сесии или токени за уеб приложения
- Идентификатори на съобщения в опашки като Kafka или RabbitMQ
Кратка история
Оригиналният формат CUID е публикуван от Eric Elliott през 2012 като алтернатива на UUID за разпределени приложения. CUID2, публикуван от същия проект Paralleldrive, преработва формата около криптографски хеш и премахва възстановимия времеви печат и брояч, които оригиналната версия разкриваше. Този инструмент генерира само идентификатори CUID2.
Често задавани въпроси
Каква е разликата между CUID (v1) и CUID2? CUID v1 съхраняваше видим времеви печат и брояч в идентификатора, което позволяваше идентификаторите да се сортират, но също така разкриваше кога и колко идентификатора са били създадени. CUID2 заменя тези видими полета с еднопосочен хеш, така че информацията не може да бъде прочетена обратно от идентификатора.
Могат ли CUID идентификаторите от този инструмент да се сортират по време на създаване? Не. CUID2 няма възстановим времеви печат, така че идентификаторите не могат да бъдат подредени според момента на генериране само чрез преглед на низа.
Каква е дължината на генерирания идентификатор и може ли тя да бъде променена? Този инструмент винаги генерира идентификатори с дължина 25 знака. В него няма опция за заявяване на различна дължина.
Могат ли две различни машини да генерират един и същ CUID2 едновременно? На теория е възможно, но на практика е изключително малко вероятно. Всеки идентификатор комбинира специфичен за хоста отпечатък със случайна ентропия, така че е много малко вероятно независими машини някога да създадат един и същ хеш.
Изпраща ли този инструмент данни към сървър? Не. Идентификаторът се генерира от JavaScript, изпълняван в браузъра, като се използват местният системен часовник и генераторът на случайни числа, предоставен от браузъра. Нищо не се предава.
Мога ли да използвам CUID2 като първичен ключ в база данни?
Да. Идентификаторите CUID2 работят добре като първични ключове в разпределени бази данни, тъй като всеки възел може да генерира такъв, без да проверява централна последователност. Те не се сортират естествено по време на вмъкване, затова приложение, което се нуждае от този ред, следва да съхранява отделна колона created_at.