Efektívny generátor CUID pre jedinečné identifikátory v systémoch
Generujte kolízne odolné jedinečné identifikátory (CUID) pre distribuované systémy, databázy a webové aplikácie. Vytvárajte škálovateľné, triediteľné ID okamžite.
Generátor CUID
Rýchlo a jednoducho vygenerujte ID odolné voči kolíziám.
Dokumentácia
Čo je CUID?
CUID (jedinečný identifikátor odolný voči kolíziám) je krátky reťazec písmen a číslic používaný na označenie záznamu, súboru alebo udalosti tak, aby žiadne dve položky nemali rovnaký názov. Tento nástroj generuje CUID2, aktuálnu verziu formátu, pomocou knižnice @paralleldrive/cuid2. Každý identifikátor má 25 znakov, obsahuje iba malé písmená a číslice a vytvára sa úplne v prehliadači — nič sa neposiela na server.
Ako používať tento generátor CUID
- Kliknutím na Generate New CUID vytvoríte identifikátor.
- Kliknutím na Copy to Clipboard ho skopírujete.
- Vložte identifikátor do databázy, názvu súboru alebo aplikácie.
- Ďalším kliknutím na tlačidlo generovania vytvoríte iný identifikátor. Kolízie medzi samostatnými hodnotami CUID2 sú mimoriadne nepravdepodobné, hoci z matematického hľadiska nie sú nemožné.
- Kliknutím na Reset vymažete výsledok.
Vygenerovaný identifikátor sa ukladá aj do URL stránky, takže odkaz na výsledok možno zdieľať alebo uložiť medzi záložky.
Štruktúra a vzorec CUID2
CUID2 sa vytvára takto:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2Hašovacia funkcia kombinuje štyri súkromné vstupy: aktuálny čas, počítadlo pre danú reláciu, odtlačok hostiteľského počítača a náhodnú entropiu. Spracuje ich algoritmom SHA3-512, výsledok prevedie do číselnej sústavy so základom 36 (číslice 0–9 a písmená a-z) a potom ponechá 24 týchto znakov. Náhodné úvodné písmeno doplní hotový identifikátor na 25 znakov, čo je dĺžka nastavená pre tento nástroj.
Samostatne má význam iba prvý znak: náhodné písmeno umiestnené na začiatku, aby každý identifikátor začínal písmenom, nie číslicou. Mnohé systémy, napríklad názvy tabuliek a stĺpcov SQL, vyžadujú, aby identifikátory začínali písmenom, takže CUID2 možno takmer kdekoľvek bezpečne použiť ako názov. Každý znak za prvým písmenom je súčasťou jedného súvislého, nepriehľadného tela hašu — nemá samostatné časti.
Keďže haš funguje iba jedným smerom, zo získaného identifikátora nemožno spätne získať žiadny z jeho vstupov. CUID2 neobsahuje obnoviteľnú časovú pečiatku, počítadlo ani odtlačok. Ide o zámerné rozhodnutie v prospech ochrany súkromia a bezpečnosti: samotný identifikátor nemôže odhaliť, kedy ani kde bol vytvorený.
Vyriešený príklad
Generovanie identifikátora pomocou tohto nástroja môže vytvoriť napríklad:
1vcpuhcj51eomj1o31dnlqopu0
2Tu v predstavuje náhodné úvodné písmeno a cpuhcj51eomj1o31dnlqopu0 (24 znakov) je telo hašu. Obe časti vyzerajú odlišne iba preto, že prvý znak je vždy písmeno — telo hašu môže obsahovať kombináciu písmen a číslic.
Prečo systémy používajú CUID2
- Nevyžaduje koordináciu. Každý počítač môže vytvoriť platný identifikátor samostatne, bez žiadosti centrálnemu serveru alebo databáze o ďalšiu hodnotu.
- Odolnosť voči kolíziám. Kombinácia času, počítadla, odtlačku hostiteľa a náhodnej entropie spôsobuje, že je mimoriadne nepravdepodobné, aby dva počítače vytvorili rovnaký identifikátor, dokonca aj pri generovaní mnohých identifikátorov za sekundu.
- Vhodné pre URL. CUID2 používa iba malé písmená a číslice, takže ho pri použití vo webovej adrese nikdy netreba kódovať.
- Rýchle a súkromné generovanie. Keďže tento nástroj spúšťa generátor v prehliadači, identifikátory sa vytvárajú okamžite a nikdy neopúšťajú zariadenie.
Identifikátory CUID2 nemožno zoradiť podľa času vytvorenia. Na rozdiel od automaticky zvyšovaného čísla v databáze alebo staršieho formátu CUID (verzia 1) CUID2 ukrýva časovú pečiatku v haši namiesto toho, aby ju uchovával priamo. Aplikácie, ktoré potrebujú zoradiť záznamy podľa poradia vytvorenia, by mali spolu s identifikátorom ukladať samostatný stĺpec s časovou pečiatkou.
CUID2 verzus UUID a automaticky zvyšované identifikátory
| Vlastnosť | CUID2 | UUID v4 | Automatické zvyšovanie |
|---|---|---|---|
| Dĺžka | 25 znakov | 36 znakov (s pomlčkami) | Mení sa (zvyčajne krátke číslo) |
| Množina znakov | Malé písmená a číslice | Šestnástkové číslice a pomlčky | Číslice |
| Vyžaduje centrálnu koordináciu | Nie | Nie | Áno (databázová sekvencia) |
| Zoraditeľné podľa času vytvorenia | Nie | Nie | Áno |
| Vhodné pre URL bez kódovania | Áno | Áno | Áno |
CUID2 a UUID v4 riešia rovnaký problém: generovanie identifikátorov bez centrálnej koordinácie. CUID2 je kratší a používa menšiu množinu znakov, vďaka čomu sa ľahšie číta a vkladá do URL. UUID je vo webovej adrese tiež bezpečný, pretože pomlčka je v URL nevyhradený znak, ale je o 11 znakov dlhší.
Bežné použitia
- Primárne kľúče v distribuovaných databázach, v ktorých viaceré servery nezávisle vkladajú riadky
- Identifikátory požiadaviek alebo sledovania používané na sledovanie jednej akcie naprieč viacerými mikroslužbami
- Názvy súborov pri nahrávaní, aby sa dva súbory nikdy navzájom neprepísali
- Identifikátory relácií alebo tokenov pre webové aplikácie
- Identifikátory správ vo frontoch, ako sú Kafka alebo RabbitMQ
Stručná história
Pôvodný formát CUID vydal Eric Elliott v roku 2012 ako alternatívu k UUID pre distribuované aplikácie. CUID2, ktorý vydal ten istý projekt Paralleldrive, prepracoval formát okolo kryptografického hašu a odstránil obnoviteľnú časovú pečiatku a počítadlo, ktoré pôvodná verzia odhaľovala. Tento nástroj generuje iba identifikátory CUID2.
Najčastejšie otázky
Aký je rozdiel medzi CUID (v1) a CUID2? CUID v1 uchovával v identifikátore viditeľnú časovú pečiatku a počítadlo, vďaka čomu bolo možné identifikátory zoradiť, no zároveň odhaľoval, kedy a koľko identifikátorov bolo vytvorených. CUID2 nahrádza tieto viditeľné polia jednosmerným hašom, takže z identifikátora nemožno spätne prečítať žiadne informácie.
Dajú sa CUID z tohto nástroja zoradiť podľa času vytvorenia? Nie. CUID2 nemá obnoviteľnú časovú pečiatku, takže identifikátory nemožno zoradiť podľa času ich vytvorenia iba na základe reťazca.
Aká je dĺžka vygenerovaného identifikátora a možno ju zmeniť? Tento nástroj vždy generuje identifikátory s dĺžkou 25 znakov. Nástroj neposkytuje možnosť vyžiadať si inú dĺžku.
Môžu dva rôzne počítače vytvoriť rovnaký CUID2 v rovnakom čase? Teoreticky je to možné, v praxi však mimoriadne nepravdepodobné. Každý identifikátor kombinuje odtlačok špecifický pre hostiteľa s náhodnou entropiou, takže je veľmi nepravdepodobné, aby nezávislé počítače niekedy vytvorili rovnaký haš.
Posiela tento nástroj údaje na server? Nie. Identifikátor vytvára JavaScript spustený v prehliadači pomocou lokálnych systémových hodín a náhodných údajov poskytovaných prehliadačom. Nič sa neprenáša.
Môžem použiť CUID2 ako primárny kľúč databázy?
Áno. Identifikátory CUID2 dobre fungujú ako primárne kľúče v distribuovaných databázach, pretože ich môže vytvoriť ktorýkoľvek uzol bez kontroly centrálnej sekvencie. Prirodzene sa nezoraďujú podľa času vloženia, takže aplikácia, ktorá toto poradie potrebuje, by mala uchovávať samostatný stĺpec created_at.