Pāriet uz saturu

Efektīvs CUID ģenerators unikāliem identifikatoriem sistēmās

Ģenerēt sadursmju izturīgus unikālus identifikatorus (CUID) sadalītām sistēmām, datubāzēm un tīmekļa lietojumprogrammām. Momentāli izveidojiet mērogojamus, kārtojamus ID.

CUID ģenerators

Ātri un viegli ģenerēt sadursmes izturīgu ID.

Noklikšķiniet uz “Ģenerēt jaunu CUID”, lai izveidotu identifikatoru.
Ielādes kalkulators...
📚

Dokumentācija

Kas ir CUID?

CUID (pret sadursmēm izturīgs unikāls identifikators) ir īsa burtu un ciparu virkne, ko izmanto ieraksta, faila vai notikuma apzīmēšanai, lai diviem elementiem nebūtu vienāds nosaukums. Šis rīks ģenerē CUID2, pašreizējo formāta versiju, izmantojot bibliotēku @paralleldrive/cuid2. Katrs identifikators ir 25 rakstzīmes garš, satur tikai mazos burtus un ciparus un tiek izveidots pilnībā pārlūkprogrammā — nekas netiek nosūtīts serverim.

Kā izmantot šo CUID ģeneratoru

  1. Noklikšķiniet uz Generate New CUID, lai izveidotu identifikatoru.
  2. Noklikšķiniet uz Copy to Clipboard, lai to kopētu.
  3. Ielīmējiet identifikatoru datubāzē, faila nosaukumā vai lietotnē.
  4. Lai iegūtu citu identifikatoru, vēlreiz noklikšķiniet uz ģenerēšanas pogas. Sadursmes starp atsevišķām CUID2 vērtībām ir ārkārtīgi maz ticamas, lai gan matemātiski nav neiespējamas.
  5. Noklikšķiniet uz Reset, lai notīrītu rezultātu.

Ģenerētais identifikators tiek saglabāts arī lapas URL, tāpēc saiti uz rezultātu var kopīgot vai pievienot grāmatzīmēm.

CUID2 struktūra un formula

CUID2 tiek veidots šādi:

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

Jaucējfunkcija apvieno četrus privātus ievaddatus: pašreizējo laiku, sesijas skaitītāju, resursdatora pirkstu nospiedumu un nejaušu entropiju. Tā apstrādā tos ar SHA3-512, pārvērš rezultātu par bāzi 36 (cipari 0–9 un burti a–z), pēc tam saglabā 24 no šīm rakstzīmēm. Nejaušais sākuma burts nodrošina, ka gatavais identifikators ir 25 rakstzīmes garš — tāds ir šī rīka iestatītais garums.

Atsevišķi pastāv tikai pirmā rakstzīme: nejaušs burts sākumā, lai katrs identifikators sāktos ar burtu, nevis ciparu. Daudzās sistēmās, piemēram, SQL tabulu un kolonnu nosaukumos, identifikatoriem jāsākas ar burtu, tāpēc CUID2 gandrīz jebkur var droši izmantot kā nosaukumu. Katra rakstzīme pēc pirmā burta ir daļa no viena nepārtraukta, necaurskatāma jaucējkoda — tai nav atsevišķu sadaļu.

Tā kā jaucējfunkcija darbojas tikai vienā virzienā, nevienu tās ievaddatu nevar atgūt no gatavā identifikatora. CUID2 nesatur atgūstamu laikspiedolu, skaitītāju vai pirkstu nospiedumu. Tā ir apzināta privātuma un drošības izvēle: tikai pēc identifikatora nevar noteikt, kad vai kur tas izveidots.

Aprēķina piemērs

Ģenerējot identifikatoru ar šo rīku, var tikt iegūts:

1vcpuhcj51eomj1o31dnlqopu0
2

Šeit v ir nejaušais sākuma burts, bet cpuhcj51eomj1o31dnlqopu0 (24 rakstzīmes) ir jaucējkoda pamatdaļa. Abas daļas izskatās atšķirīgas tikai tāpēc, ka pirmajai rakstzīmei noteikti jābūt burtam — jaucējkoda pamatdaļa var saturēt gan burtus, gan ciparus.

Kāpēc sistēmas izmanto CUID2

  • Koordinācija nav nepieciešama. Jebkurš dators var patstāvīgi ģenerēt derīgu identifikatoru, nelūdzot centrālajam serverim vai datubāzei nākamo vērtību.
  • Izturība pret sadursmēm. Laika, skaitītāja, resursdatora pirkstu nospieduma un nejaušas entropijas apvienojums padara ārkārtīgi maz ticamu, ka divi datori izveidos vienādu identifikatoru, pat ģenerējot daudzus identifikatorus sekundē.
  • Piemērots URL. CUID2 izmanto tikai mazos burtus un ciparus, tāpēc izmantošanai tīmekļa adresē tas nekad nav jākodē.
  • Ātra un privāta ģenerēšana. Tā kā šis rīks ģeneratoru darbina pārlūkprogrammā, identifikatori tiek izveidoti uzreiz un nekad neatstāj ierīci.

CUID2 identifikatorus nevar kārtot pēc izveides laika. Atšķirībā no datubāzes automātiski palielināma numura vai vecākā CUID (versijas 1) formāta, CUID2 laikspiedolu slēpj jaucējkodā, nevis glabā redzamā veidā. Lietotnēm, kurām ieraksti jākārto pēc izveides secības, kopā ar identifikatoru jāglabā atsevišķa laikspiedola kolonna.

CUID2 un UUID pret automātiski palielināmiem identifikatoriem

FunkcijaCUID2UUID v4Automātiska numerācija
Garums25 rakstzīmes36 rakstzīmes (ar defisēm)Mainīgs (parasti īss skaitlis)
Rakstzīmju kopaMazie burti un cipariHeksadecimālie cipari un defisesCipari
Nepieciešama centrāla koordinācijaNēNēJā (datubāzes secība)
Kārtojams pēc izveides laikaNēNēJā
Piemērots URL bez kodēšanasJāJāJā

CUID2 un UUID v4 atrisina vienu un to pašu problēmu: identifikatoru ģenerēšanu bez centrālas koordinācijas. CUID2 ir īsāks un izmanto mazāku rakstzīmju kopu, tāpēc to ir vieglāk izlasīt un ielīmēt URL. UUID ir droši izmantojams arī tīmekļa adresē, jo defise URL ir atļauta rakstzīme, taču tas ir par 11 rakstzīmēm garāks.

Biežākie lietojumi

  • Primārās atslēgas sadalītās datubāzēs, kur vairākos serveros rindas tiek ievietotas neatkarīgi
  • Pieprasījumu vai izsekošanas identifikatori, ar kuriem vienai darbībai seko vairākos mikropakalpojumos
  • Augšupielādējamo failu nosaukumi, lai divi faili nekad nepārrakstītu viens otru
  • Tīmekļa lietotņu sesiju vai pilnvaru identifikatori
  • Ziņojumu identifikatori rindās, piemēram, Kafka vai RabbitMQ

Īsa vēsture

Sākotnējo CUID formātu Ēriks Eliots publicēja 2012. gadā kā UUID alternatīvu sadalītām lietotnēm. CUID2, ko publicēja tas pats Paralleldrive projekts, pārveidoja formātu, izmantojot kriptogrāfisku jaucējfunkciju, un noņēma atgūstamo laikspiedolu un skaitītāju, ko atklāja sākotnējā versija. Šis rīks ģenerē tikai CUID2 identifikatorus.

Biežāk uzdotie jautājumi

Kāda ir atšķirība starp CUID (v1) un CUID2? CUID v1 identifikatorā glabāja redzamu laikspiedolu un skaitītāju, tāpēc identifikatorus varēja kārtot, taču vienlaikus tika atklāts, kad un cik identifikatoru bija izveidots. CUID2 aizstāj šos redzamos laukus ar vienvirziena jaucējkodu, tāpēc no identifikatora nevar nolasīt nekādu informāciju.

Vai ar šo rīku ģenerētos CUID var kārtot pēc izveides laika? Nē. CUID2 nesatur atgūstamu laikspiedolu, tāpēc identifikatorus nevar sakārtot pēc ģenerēšanas laika, tikai aplūkojot virkni.

Cik garš ir ģenerētais identifikators, un vai garumu var mainīt? Šis rīks vienmēr ģenerē identifikatorus ar 25 rakstzīmēm. Šajā rīkā nav iespējas pieprasīt citu garumu.

Vai divi dažādi datori vienlaikus var ģenerēt vienādu CUID2? Teorētiski tas ir iespējams, taču praksē ārkārtīgi maz ticams. Katrā identifikatorā tiek apvienots resursdatoram raksturīgs pirkstu nospiedums ar nejaušu entropiju, tāpēc neatkarīgi datori gandrīz noteikti nekad neizveidos vienādu jaucējkodu.

Vai šis rīks nosūta datus serverim? Nē. Identifikatoru ģenerē pārlūkprogrammā darbināms JavaScript, izmantojot vietējās sistēmas pulksteni un pārlūkprogrammas nodrošināto nejaušību. Nekas netiek nosūtīts.

Vai CUID2 var izmantot kā datubāzes primāro atslēgu? Jā. CUID2 identifikatori labi darbojas kā primārās atslēgas sadalītās datubāzēs, jo jebkurš mezgls var tādu ģenerēt, nepārbaudot centrālo secību. Pēc ievietošanas laika tos nevar dabiski kārtot, tāpēc lietotnei, kurai šāda secība ir vajadzīga, jāglabā atsevišķa created_at kolonna.