Efektyvus CUID generatorius unikalių identifikatorių sistemoms
Generuokite atsparių susidūrimams unikalių identifikatorių (CUID) paskirstytoms sistemoms, duomenų bazėms ir žiniatinklio programėlėms. Akimirksniu kurkite plečiamus, rūšiuojamus ID.
CUID generatorius
Greitai ir lengvai sugeneruokite atsparų susidūrimams ID.
Dokumentacija
Kas yra CUID?
CUID (kolizijoms atsparus unikalus identifikatorius) yra trumpas raidžių ir skaitmenų derinys, naudojamas įrašui, failui ar įvykiui pažymėti, kad jokie du elementai neturėtų to paties pavadinimo. Šis įrankis generuoja CUID2, dabartinę formato versiją, naudodamas @paralleldrive/cuid2 biblioteką. Kiekvieną identifikatorių sudaro 25 simboliai, jame yra tik mažosios raidės ir skaitmenys, o jis sukuriamas visiškai naršyklėje — niekas nesiunčiama į serverį.
Kaip naudoti šį CUID generatorių
- Spustelėkite Generate New CUID, kad sukurtumėte identifikatorių.
- Spustelėkite Copy to Clipboard, kad jį nukopijuotumėte.
- Įklijuokite identifikatorių į duomenų bazę, failo pavadinimą arba programą.
- Dar kartą spustelėkite generavimo mygtuką, kad gautumėte kitą identifikatorių. Kolizijos tarp atskirų CUID2 reikšmių itin mažai tikėtinos, nors matematiškai jos nėra neįmanomos.
- Spustelėkite Reset, kad išvalytumėte rezultatą.
Sugeneruotas identifikatorius taip pat įrašomas į puslapio URL, todėl nuorodą į rezultatą galima bendrinti arba išsaugoti žymėse.
CUID2 struktūra ir formulė
CUID2 sudaromas taip:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2Maišos funkcija apdoroja keturis privačius įvesties duomenis: dabartinį laiką, konkrečios sesijos skaitiklį, pagrindinio kompiuterio piršto atspaudą ir atsitiktinę entropiją. Ji juos apdoroja naudodama SHA3-512, rezultatą perskaičiuoja į 36 bazę (skaitmenys 0–9 ir raidės a–z), tada pasilieka 24 šių simbolių. Atsitiktinė pradinė raidė užbaigtą identifikatorių pailgina iki 25 simbolių — tokio ilgio nustatytas šis įrankis.
Tik pirmasis simbolis yra atskiras: tai atsitiktinė raidė priekyje, užtikrinanti, kad kiekvienas identifikatorius prasidėtų raide, o ne skaitmeniu. Daugelyje sistemų, pavyzdžiui, SQL lentelių ir stulpelių pavadinimuose, reikalaujama, kad identifikatoriai prasidėtų raide, todėl CUID2 galima beveik visur saugiai naudoti kaip pavadinimą. Kiekvienas simbolis po pirmosios raidės yra vientisos, nepermatomos maišos dalis — atskirų sekcijų joje nėra.
Kadangi maišos funkcija veikia tik viena kryptimi, iš užbaigto identifikatoriaus neįmanoma atkurti nė vieno jos įvesties duomens. CUID2 nėra atkuriamos laiko žymos, skaitiklio ar piršto atspaudo. Tai sąmoningas privatumo ir saugumo sprendimas: vien iš identifikatoriaus neįmanoma nustatyti, kada ar kur jis buvo sukurtas.
Išspręstas pavyzdys
Generuojant identifikatorių šiuo įrankiu gali būti gauta:
1vcpuhcj51eomj1o31dnlqopu0
2Čia v yra atsitiktinė pradinė raidė, o cpuhcj51eomj1o31dnlqopu0 (24 simboliai) — maišos dalis. Šios dvi dalys atrodo skirtingai tik todėl, kad pirmasis simbolis visada yra raidė, o maišos dalyje gali būti įvairių raidžių ir skaitmenų.
Kodėl sistemos naudoja CUID2
- Nereikia koordinavimo. Kiekvienas kompiuteris gali savarankiškai sugeneruoti galiojantį identifikatorių, neprašydamas centrinio serverio ar duomenų bazės kitos reikšmės.
- Atsparumas kolizijoms. Dėl laiko, skaitiklio, pagrindinio kompiuterio piršto atspaudo ir atsitiktinės entropijos derinio tikimybė, kad du kompiuteriai sugeneruos tą patį identifikatorių, yra itin maža, net kai per sekundę sugeneruojama daug identifikatorių.
- Tinka URL. CUID2 sudaro tik mažosios raidės ir skaitmenys, todėl naudojant jį interneto adrese niekada nereikia kodavimo.
- Greitas ir privatus generavimas. Kadangi šis įrankis generatorių paleidžia naršyklėje, identifikatoriai sukuriami iškart ir niekada nepalieka įrenginio.
CUID2 identifikatorių negalima rikiuoti pagal sukūrimo laiką. Skirtingai nuo automatiškai didinamo duomenų bazės skaičiaus ar senesnio CUID (versijos 1) formato, CUID2 slepia laiko žymą maišoje, o ne saugo ją matomu pavidalu. Programos, kurioms reikia rikiuoti įrašus pagal sukūrimo tvarką, kartu su identifikatoriumi turėtų saugoti atskirą laiko žymos stulpelį.
CUID2, UUID ir automatiškai didinami identifikatoriai
| Savybė | CUID2 | UUID v4 | Automatiškai didinamas |
|---|---|---|---|
| Ilgis | 25 simboliai | 36 simboliai (su brūkšneliais) | Kinta (paprastai trumpas skaičius) |
| Simbolių rinkinys | Mažosios raidės ir skaitmenys | Šešioliktainiai skaitmenys ir brūkšneliai | Skaitmenys |
| Reikalingas centrinis koordinavimas | Ne | Ne | Taip (duomenų bazės numerių seka) |
| Galima rikiuoti pagal sukūrimo laiką | Ne | Ne | Taip |
| Tinka URL be kodavimo | Taip | Taip | Taip |
CUID2 ir UUID v4 sprendžia tą pačią problemą: identifikatorių generavimą be centrinio koordinavimo. CUID2 yra trumpesnis ir naudoja mažesnį simbolių rinkinį, todėl jį lengviau perskaityti ir įklijuoti į URL. UUID taip pat saugus interneto adrese, nes brūkšnelis URL yra leidžiamas simbolis, tačiau jis yra 11 simbolių ilgesnis.
Įprastas taikymas
- Pagrindiniai raktai paskirstytose duomenų bazėse, kuriose keli serveriai įterpia eilutes savarankiškai
- Užklausų arba sekimo identifikatoriai, naudojami vienam veiksmui sekti per kelias mikropaslaugas
- Įkeliamų failų pavadinimai, kad du failai niekada nepakeistų vienas kito
- Žiniatinklio programų sesijų arba prieigos raktų identifikatoriai
- Pranešimų identifikatoriai tokiose eilėse kaip „Kafka“ ar „RabbitMQ“
Trumpa istorija
Pradinį CUID formatą Ericas Elliottas išleido 2012 kaip UUID alternatyvą paskirstytoms programoms. CUID2, išleistas to paties „Paralleldrive“ projekto, buvo sukurtas pertvarkius formatą ir pagrindus jį kriptografine maiša; taip pat buvo pašalinta atkuriama laiko žyma bei skaitiklis, kuriuos atskleisdavo pradinė versija. Šis įrankis generuoja tik CUID2 identifikatorius.
Dažnai užduodami klausimai
Kuo skiriasi CUID (v1) ir CUID2? CUID v1 identifikatoriuje saugojo matomą laiko žymą ir skaitiklį, todėl identifikatorius buvo galima rikiuoti, tačiau taip pat buvo atskleidžiama, kada ir kiek identifikatorių buvo sukurta. CUID2 šiuos matomus laukus pakeičia vienkrypte maišos funkcija, todėl iš identifikatoriaus neįmanoma perskaityti jokios informacijos.
Ar naudojant šį įrankį sukurtus CUID galima rikiuoti pagal sukūrimo laiką? Ne. CUID2 nėra atkuriamos laiko žymos, todėl identifikatorių negalima surikiuoti pagal sukūrimo laiką vien pažvelgus į eilutę.
Koks yra sugeneruoto identifikatoriaus ilgis ir ar jį galima pakeisti? Šis įrankis visada generuoja 25 simbolių identifikatorius. Šiame įrankyje nėra galimybės pasirinkti kitokio ilgio.
Ar du skirtingi kompiuteriai gali tuo pačiu metu sugeneruoti tą patį CUID2? Teoriškai tai įmanoma, tačiau praktiškai itin mažai tikėtina. Kiekvienas identifikatorius apima konkrečiam pagrindiniam kompiuteriui būdingą piršto atspaudą ir atsitiktinę entropiją, todėl nepriklausomi kompiuteriai beveik neabejotinai niekada nesugeneruos tos pačios maišos.
Ar šis įrankis siunčia kokius nors duomenis į serverį? Ne. Identifikatorius sukuriamas naršyklėje veikiančiu „JavaScript“, naudojant vietinio sistemos laikrodžio duomenis ir naršyklės pateikiamus atsitiktinius duomenis. Niekas neperduodama.
Ar galiu naudoti CUID2 kaip duomenų bazės pirminį raktą?
Taip. CUID2 identifikatoriai gerai tinka paskirstytų duomenų bazių pirminiams raktams, nes bet kuris mazgas gali jį sugeneruoti nesitikrindamas su centrine seka. Pagal įterpimo laiką jie savaime nerikiuojami, todėl programoje, kuriai reikalinga tokia tvarka, reikėtų saugoti atskirą created_at stulpelį.