Efektivní generátor CUID pro jedinečné identifikátory v systémech
Generujte kolizně odolné jedinečné identifikátory (CUID) pro distribuované systémy, databáze a webové aplikace. Okamžitě vytvářejte škálovatelná, seřaditelná ID.
Generátor CUID
Rychle a snadno vygenerujte ID odolné vůči kolizím.
Dokumentace
Co je CUID?
CUID (jedinečný identifikátor odolný vůči kolizím) je krátký řetězec písmen a číslic používaný k označení záznamu, souboru nebo události tak, aby žádné dvě položky neměly stejný název. Tento nástroj generuje CUID2, aktuální verzi tohoto formátu, pomocí knihovny @paralleldrive/cuid2. Každé ID má 25 znaků, obsahuje pouze malá písmena a číslice a vytváří se výhradně v prohlížeči — na server se nic neodesílá.
Jak používat generátor CUID
- Kliknutím na Generate New CUID vytvoříte ID.
- Kliknutím na Copy to Clipboard jej zkopírujete.
- Vložte ID do databáze, názvu souboru nebo aplikace.
- Pro další ID klikněte znovu na tlačítko generování. Kolize mezi samostatnými hodnotami CUID2 jsou mimořádně nepravděpodobné, i když matematicky nejsou nemožné.
- Kliknutím na Reset výsledek vymažete.
Vygenerované ID se ukládá také do adresy URL stránky, takže odkaz na výsledek lze sdílet nebo uložit do záložek.
Struktura a vzorec CUID2
CUID2 se vytváří takto:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2Hašovací funkce kombinuje čtyři neveřejné vstupy: aktuální čas, počítadlo pro danou relaci, otisk hostitelského počítače a náhodnou entropii. Zpracuje je pomocí SHA3-512, převede výsledek do soustavy se základem 36 (číslice 0–9 a písmena a–z) a poté ponechá 24 těchto znaků. Náhodné úvodní písmeno prodlouží výsledné ID na 25 znaků, což je délka nastavená pro tento nástroj.
Samostatně stojí pouze první znak: náhodné písmeno umístěné na začátku, aby každé ID začínalo písmenem, nikoli číslicí. Mnoho systémů, například názvy tabulek a sloupců SQL, vyžaduje, aby identifikátory začínaly písmenem, takže CUID2 lze téměř kdekoli bezpečně použít jako název. Každý znak po tomto prvním písmenu je součástí jediného souvislého neprůhledného těla hashe — nemá žádné samostatné části.
Protože hash funguje pouze jedním směrem, nelze z výsledného ID zpětně získat žádný z jeho vstupů. CUID2 nemá obnovitelný časový údaj, počítadlo ani otisk. Jde o záměrnou volbu pro ochranu soukromí a bezpečnost: samotné ID nemůže prozradit, kdy ani kde bylo vytvořeno.
Příklad výpočtu
Generování ID pomocí tohoto nástroje může vytvořit například:
1vcpuhcj51eomj1o31dnlqopu0
2Zde v představuje náhodné úvodní písmeno a cpuhcj51eomj1o31dnlqopu0 (24 znaků) je tělo hashe. Obě části vypadají odlišně pouze proto, že u prvního znaku je zaručeno písmeno — tělo hashe může obsahovat kombinaci písmen a číslic.
Proč systémy používají CUID2
- Není nutná koordinace. Každý počítač může platné ID vytvořit samostatně, aniž by si od centrálního serveru nebo databáze vyžádal další hodnotu.
- Odolnost vůči kolizím. Kombinace času, počítadla, otisku hostitele a náhodné entropie mimořádně snižuje pravděpodobnost, že dva počítače vytvoří stejné ID, i když generují mnoho ID za sekundu.
- Vhodné pro URL. CUID2 používá pouze malá písmena a číslice, takže při použití ve webové adrese nikdy nevyžaduje kódování.
- Rychlé a soukromé generování. Protože tento nástroj spouští generátor v prohlížeči, ID se vytvářejí okamžitě a nikdy neopouštějí zařízení.
ID CUID2 nelze řadit podle času vytvoření. Na rozdíl od automaticky inkrementovaného čísla v databázi nebo staršího formátu CUID (verze 1) skrývá CUID2 časový údaj uvnitř hashe, místo aby jej ukládal viditelně. Aplikace, které potřebují řadit záznamy podle pořadí vytvoření, by měly vedle ID ukládat samostatný sloupec s časovým údajem.
CUID2 versus UUID versus automaticky inkrementovaná ID
| Vlastnost | CUID2 | UUID v4 | Automatické inkrementování |
|---|---|---|---|
| Délka | 25 znaků | 36 znaků (s pomlčkami) | Liší se (obvykle krátké číslo) |
| Množina znaků | Malá písmena a číslice | Šestnáctkové číslice a pomlčky | Počet číslic |
| Vyžaduje centrální koordinaci | Ne | Ne | Ano (databázová sekvence) |
| Řaditelné podle času vytvoření | Ne | Ne | Ano |
| Vhodné pro URL bez kódování | Ano | Ano | Ano |
CUID2 a UUID v4 řeší stejný problém: generování ID bez centrální koordinace. CUID2 je kratší a používá menší množinu znaků, takže se snadněji čte a vkládá do URL. UUID je bezpečné i ve webové adrese, protože pomlčka je v URL znakem bez nutnosti kódování, ale je o 11 znaků delší.
Běžná použití
- Primární klíče v distribuovaných databázích, do kterých více serverů vkládá řádky samostatně
- ID požadavků nebo trasování používaná ke sledování jedné akce napříč několika mikroslužbami
- Názvy souborů při nahrávání, aby se dva soubory nikdy navzájem nepřepsaly
- ID relací nebo tokenů pro webové aplikace
- ID zpráv ve frontách, jako jsou Kafka nebo RabbitMQ
Stručná historie
Původní formát CUID vydal Eric Elliott v roce 2012 jako alternativu k UUID pro distribuované aplikace. CUID2, publikovaný stejným projektem Paralleldrive, přepracoval formát s využitím kryptografického hashe a odstranil obnovitelný časový údaj a počítadlo, které původní verze zpřístupňovala. Tento nástroj generuje pouze ID CUID2.
Často kladené otázky
Jaký je rozdíl mezi CUID (v1) a CUID2? CUID v1 ukládal uvnitř ID viditelný časový údaj a počítadlo, díky čemuž bylo možné ID řadit, ale zároveň prozrazoval, kdy a kolik ID bylo vytvořeno. CUID2 nahrazuje tato viditelná pole jednosměrným hashem, takže z ID nelze zpětně přečíst žádné informace.
Lze CUID vytvořená tímto nástrojem řadit podle času vytvoření? Ne. CUID2 nemá obnovitelný časový údaj, takže ID nelze seřadit podle toho, kdy byla vytvořena, pouze na základě samotného řetězce.
Jak dlouhé je vygenerované ID a lze jeho délku změnit? Tento nástroj vždy generuje ID o délce 25 znaků. V tomto nástroji není možnost vyžádat si jinou délku.
Mohou dva různé počítače vytvořit ve stejnou dobu stejné CUID2? Teoreticky je to možné, v praxi však mimořádně nepravděpodobné. Každé ID kombinuje otisk specifický pro hostitele s náhodnou entropií, takže nezávislé počítače téměř jistě nikdy nevytvoří stejný hash.
Odesílá tento nástroj nějaká data na server? Ne. ID vytváří JavaScript spuštěný v prohlížeči pomocí lokálních systémových hodin a náhodných hodnot poskytovaných prohlížečem. Nic se nepřenáší.
Lze CUID2 použít jako primární klíč databáze?
Ano. ID CUID2 dobře fungují jako primární klíče v distribuovaných databázích, protože je každý uzel může vytvořit bez ověřování u centrální sekvence. Nejsou přirozeně řaditelná podle času vložení, takže aplikace, která toto pořadí potřebuje, by měla uchovávat samostatný sloupec created_at.