Pereiti prie turinio

KSUID Generatorius - Kurkite Rūšiuojamus Unikalius Identifikatorius

Generuokite K-Rūšiuojamus Unikalius Identifikatorius (KSUID) internetu. Akimirksniu sukurkite laiko atžvilgiu rūšiuojamus, susidūrimams atsparius ID paskirstytoms sistemoms ir duomenų bazėms.

KSUID generatorius

Įkrovimo skaičiuotuvas...
📚

Dokumentacija

KSUID generatorius

KSUID (K-Sortable Unique Identifier) yra 27 simbolių kodas, naudojamas tokiems įrašams kaip duomenų bazės eilutės, žurnalo įrašai ar API užklausos žymėti. Jis sujungia laiko žymą su atsitiktiniais duomenimis, todėl vėliau sukurti ID visada rikiuojami po anksčiau sukurtų ID, nors kiekvienas iš jų išlieka praktiškai unikalus. Šis įrankis naršyklėje sugeneruoja vieną KSUID ir leidžia naudotojui jį nukopijuoti.

Iš ko sudarytas KSUID?

KSUID ilgis yra 20 baitų; jis padalytas į dvi dalis:

  • Laiko žyma (4 baitai): sekundžių skaičius nuo nustatyto pradžios taško, vadinamo KSUID epocha.
  • Atsitiktinė duomenų dalis (16 baitų): naršyklės kriptografiškai saugaus atsitiktinių skaičių generatoriaus sukurti duomenys.

Tie 20 baitų duomenys tada konvertuojami į tekstą naudojant bazės 62 kodavimą — sistemą, kurioje skaičiams vaizduoti naudojami 62 simboliai: skaitmenys 0-9, didžiosios raidės A–Z ir mažosios raidės a–z. Rezultatas visada papildomas iki tiksliai 27 simbolių, pavyzdžiui, 0qjBBlJIfbVLKwnJn4xpLGDr00e.

Kadangi laiko žyma pateikiama pirmiausia, du KSUID, sukurti vienos sekundės intervalu ir palyginti kaip paprastą tekstą, paprastai išsirikiuoja ta pačia tvarka kaip ir jų sukūrimo laikas. Kadangi paskutiniai 16 baitų yra atsitiktiniai, du tą pačią sekundę sukurti KSUID beveik neabejotinai skirsis.

KSUID epocha

Dauguma kompiuterių sistemų laiką sekundėmis skaičiuoja nuo 1970 m. sausio 1 d. (vadinamosios „Unix“ epochos). KSUID naudoja kitą pradžios tašką — KSUID epochą: 1 400 000 000 sekundžių po „Unix“ epochos, t. y. 2014 m. gegužės 13 d., 16:53:20 UTC.

Pasirinkus vėlesnį pradžios tašką, 4 baitų laiko žymos laukelyje galima aprėpti daugiau naudingų metų, kol baigiasi jo talpa. 4 baitų (32 bitų) skaitiklyje gali būti daugiausia 4 294 967 295 sekundžių. Skaičiuojant nuo KSUID epochos, šis laikotarpis baigiasi maždaug 2150 m. birželio 19 d..

KSUID formulė

KSUID eilutė sudaroma trimis etapais.

  1. Raskite laiko žymos reikšmę:

    T = floor(current_unix_time_in_seconds) − 1,400,000,000

  2. Sugeneruokite 16 atsitiktinių baitų, R, naudodami kriptografiškai saugų atsitiktinių skaičių generatorių.

  3. Sujunkite 4 baitų laiko žymą ir 16 atsitiktinių baitų į vieną 20 baitų bloką, tada užkoduokite šį bloką naudodami 62 bazę, papildydami rezultatą iki 27 simbolių:

    KSUID = Base62( T ‖ R )

Čia ‖ reiškia „padėti vieną po kito“. Laiko žymos baitai visada pateikiami pirmiausia, todėl galutinė eilutė teisingai rikiuojama pagal laiką.

Išspręstas pavyzdys

Tarkime, KSUID laiko žymos dalis yra 100000000. Kadangi KSUID epocha yra 1 400 000 000 sekundžių po „Unix“ epochos, ši laiko žyma reiškia 2017 m. liepos 14 d., 02:40:00 UTC.

Susiejus šią laiko žymą su 16 baitų seka 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (čia naudojama tik tam, kad pavyzdį būtų galima pakartoti; tikras generatorius naudoja atsitiktinius baitus), koduojant baze 62 gaunama:

0qjBBlJIfbVLKwnJn4xpLGDr00e

Šią eilutę sudaro 27 simboliai, tik skaitmenys ir raidės, todėl ją galima tiesiogiai saugiai naudoti URL ar failo pavadinime.

Kaip naudoti KSUID generatoriaus įrankį

  1. Atidarykite KSUID generatoriaus puslapį.
  2. Pasirinkite mygtuką „Generate KSUID“.
  3. Įrankis, naudodamas dabartinį laiką ir naujus atsitiktinius baitus, sukuria vieną naują KSUID ir parodo jį puslapyje.
  4. Pasirinkite mygtuką „Copy KSUID“, kad nukopijuotumėte reikšmę į iškarpinę.
  5. Pasirinkite „Reset“, kad išvalytumėte rezultatą. Mygtukas „Reset“ rodomas tik sugeneravus KSUID.

Kiekvieną kartą spustelėjus mygtuką „Generate KSUID“, sukuriamas tiksliai vienas identifikatorius. Norėdami sukurti kelis KSUID, dar kartą spustelėkite mygtuką kiekvienam naujam identifikatoriui; įrankyje nėra paketinio režimo ar failo eksporto funkcijos.

Generatorius naudoja šiuolaikinėse naršyklėse integruotą „Web Crypto“ API. Jei ši API nepasiekiama, įrankis parodo klaidą, o ne sukuria ID, nes kriptografiškai nesaugus atsitiktinių skaičių generatorius galėtų sukurti lengviau atspėjamus arba sutampančius identifikatorius.

KSUID palyginimas su UUID

UUID (Universally Unique Identifier) yra įprastas alternatyvus identifikatoriaus formatas. Plačiausiai naudojama versija, UUID v4, yra 36 simbolių ilgio ir beveik visiškai sudaryta iš atsitiktinių bitų, todėl du UUID neatskleidžia, kuris iš jų buvo sukurtas pirmas.

KSUID skiriasi trimis aspektais:

  • Rikiuojamas pagal laiką. Dėl pradžioje esančių laiko žymos baitų paprastas KSUID eilučių rikiavimas abėcėlės tvarka taip pat surikiuoja jas pagal sukūrimo laiką.
  • Trumpesnis. KSUID sudaro 27 simboliai, o standartinį UUID — 36 simboliai.
  • Be skirtukų. UUID paprastai rašomas su brūkšneliais (xxxxxxxx-xxxx-...), o KSUID jų neturi.

Abu formatai gali būti nepriklausomai sugeneruoti skirtinguose kompiuteriuose, nesikreipiant į centrinį serverį, todėl abiem atvejais išvengiama automatiškai didėjančio skaitiklio bendroje duomenų bazėje sukeliamo našumo trukdžio.

Dažnai užduodami klausimai

Ką reiškia KSUID? K-Sortable Unique Identifier. „K“ reiškia, kad jis rikiuojamas („tam tikra prasme rikiuojamas“ — taip teigiama pirminėse „Segment“, formatą sukūrusios įmonės, projektavimo pastabose).

Koks yra KSUID ilgis? 27 simboliai, užkoduoti naudojant 62 bazę (skaitmenys 0-9, didžiosios ir mažosios raidės).

Kas yra KSUID epocha? 2014 m. gegužės 13 d., 16:53:20 UTC, tai yra 1 400 000 000 sekundžių po standartinės „Unix“ epochos 1970 m. sausio 1 d..

Ar du KSUID gali sutapti? Tai ypač mažai tikėtina. Kiekviename KSUID yra 16 atsitiktinių baitų (128 bitų), sugeneruotų naudojant kriptografiškai saugų atsitiktinių skaičių generatorių. Net tą pačią sekundę sugeneravus daug KSUID, tikimybė, kad du atsitiktinai sutaps, išlieka astronomiškai maža.

Ar iš KSUID galima atkurti sukūrimo laiką? Taip. Pirmieji 4 dekoduotos reikšmės baitai yra laiko žyma. Pridėjus tą sekundžių skaičių prie KSUID epochos, gaunamas pradinis sukūrimo laikas.

Ar šis įrankis leidžia vienu metu sugeneruoti daug KSUID? Ne. Įrankis sugeneruoja vieną KSUID kiekvieną kartą spustelėjus mygtuką „Generate KSUID“. Jame nėra kiekio įvesties, pasirinktinio laiko žymos lauko ar eksporto ir atsisiuntimo funkcijos.

Ar KSUID saugu naudoti URL? Taip. Koduojant baze 62 naudojami tik skaitmenys ir raidės, todėl norint įterpti KSUID į URL, failo pavadinimą ar duomenų bazės raktą nereikia papildomo kodavimo.

Šaltiniai

  1. „Segment“ KSUID „GitHub“ saugykla: https://github.com/segmentio/ksuid
  2. "Generating good unique identifiers", autorius Peteris Bourgonas: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html