Pāriet uz saturu

KSUID ģenerators - Izveidojiet šķirojamus unikālus identifikatorus

Ģenerējiet K-šķirojamus unikālus identifikatorus (KSUID) tiešsaistē. Momentāli izveidojiet laika ziņā šķirojamus, sadursmju izturīgus ID izkliedētām sistēmām un datubāzēm.

KSUID ģenerators

Ielādes kalkulators...
📚

Dokumentācija

KSUID ģenerators

KSUID (K-Sortable Unique Identifier — kārtojams unikāls identifikators) ir 27 rakstzīmju kods, ko izmanto tādu ierakstu kā datubāzes rindu, žurnāla ierakstu vai API pieprasījumu apzīmēšanai. Tas apvieno laika zīmogu ar nejaušiem datiem, tāpēc vēlāk izveidotie ID vienmēr tiek kārtoti aiz agrāk izveidotajiem ID, lai gan katrs no tiem joprojām ir praktiski unikāls. Šis rīks pārlūkprogrammā ģenerē vienu KSUID un ļauj lietotājam to kopēt.

No kā sastāv KSUID?

KSUID garums ir 20 baiti, kas sadalīti divās daļās:

  • Laika zīmogs (4 baiti): sekunžu skaits kopš fiksēta sākumpunkta, ko sauc par KSUID laikmetu.
  • Nejaušā daļa (16 baiti): dati, ko ģenerē pārlūkprogrammas kriptogrāfiski drošs nejaušo skaitļu ģenerators.

Pēc tam šie 20 baiti tiek pārvērsti tekstā, izmantojot bāzes 62 kodējumu — sistēmu, kas skaitļu attēlošanai izmanto 62 rakstzīmes: ciparus 0-9, lielos burtus A–Z un mazos burtus a–z. Rezultāts vienmēr tiek papildināts līdz tieši 27 rakstzīmēm, piemēram, 0qjBBlJIfbVLKwnJn4xpLGDr00e.

Tā kā laika zīmogs atrodas sākumā, divi ar vienas sekundes atstarpi izveidoti KSUID, salīdzinot kā parastu tekstu, parasti tiek sakārtoti tādā pašā secībā kā to izveides laiki. Tā kā pēdējie 16 baiti ir nejauši, divi vienā sekundē izveidoti KSUID gandrīz noteikti atšķirsies.

KSUID laikmets

Lielākā daļa datorsistēmu laiku skaita sekundēs kopš datuma 1970. gada 1. janvāris (Unix laikmeta). KSUID izmanto citu sākumpunktu — KSUID laikmetu: 1 400 000 000 sekundes pēc Unix laikmeta, kas ir 2014. gada 13. maijs plkst. 16:53:20 pēc UTC.

Vēlāks sākumpunkts ļauj 4 baitu laika zīmoga laukam aptvert vairāk praktiski izmantojamu gadu, pirms tajā beidzas vieta. 4 baitu (32 bitu) skaitītājs var glabāt ne vairāk kā 4 294 967 295 sekundes. Skaitot no KSUID laikmeta, šis laika posms beidzas aptuveni datumā 2150. gada 19. jūnijs.

KSUID formula

KSUID virkne tiek izveidota trīs soļos.

  1. Nosaka laika zīmoga vērtību:

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

  2. Ģenerē 16 nejaušus baitus, R, izmantojot kriptogrāfiski drošu nejaušo skaitļu ģeneratoru.

  3. Apvieno 4 baitu laika zīmogu un 16 nejaušos baitus vienā 20 baitu blokā, pēc tam kodē šo bloku bāzes 62 kodējumā, papildinot rezultātu līdz 27 rakstzīmēm:

    KSUID = Base62( T ‖ R )

Šeit ‖ nozīmē “novietot vienu aiz otra”. Laika zīmoga baiti vienmēr atrodas sākumā, un tieši tāpēc galīgā virkne tiek pareizi kārtota pēc laika.

Aprēķina piemērs

Pieņemsim, ka KSUID laika zīmoga daļa ir 100000000. Tā kā KSUID laikmets ir 1 400 000 000 sekundes pēc Unix laikmeta, šis laika zīmogs apzīmē 2017. gada 14. jūlijs plkst. 02:40:00 pēc UTC.

Savienojot šo laika zīmogu ar 16 baitu virkni 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (šeit izmantota tikai tādēļ, lai piemēru varētu atkārtot; īsts ģenerators izmanto nejaušus baitus), bāzes 62 kodējums iegūst:

0qjBBlJIfbVLKwnJn4xpLGDr00e

Šī virkne ir 27 rakstzīmes gara, sastāv tikai no cipariem un burtiem un ir droši tieši izmantojama URL vai faila nosaukumā.

Kā izmantot KSUID ģeneratora rīku

  1. Atveriet KSUID ģeneratora lapu.
  2. Izvēlieties pogu “Ģenerēt KSUID”.
  3. Rīks, izmantojot pašreizējo laiku un jaunus nejaušus baitus, izveido vienu KSUID un parāda to lapā.
  4. Noklikšķiniet uz pogas “Kopēt KSUID”, lai kopētu vērtību starpliktuvē.
  5. Izvēlieties “Atiestatīt”, lai notīrītu rezultātu. Poga “Atiestatīt” tiek parādīta tikai pēc KSUID ģenerēšanas.

Katrs klikšķis uz “Ģenerēt KSUID” izveido tieši vienu identifikatoru. Lai izveidotu vairākus KSUID, noklikšķiniet uz pogas vēlreiz par katru jauno identifikatoru; rīkā nav iebūvēta pakešu režīma vai faila eksporta.

Ģenerators izmanto mūsdienu pārlūkprogrammās iebūvēto Web Crypto API. Ja šī API nav pieejama, rīks ID vietā parāda kļūdu, jo kriptogrāfiski nedrošs nejaušo skaitļu ģenerators varētu radīt identifikatorus, kurus būtu vieglāk uzminēt vai kuri varētu sakrist.

KSUID salīdzinājumā ar UUID

UUID (Universally Unique Identifier — universāls unikāls identifikators) ir izplatīts alternatīvs identifikatora formāts. Visplašāk izmantotā versija UUID v4 ir 36 rakstzīmes gara un sastāv gandrīz tikai no nejaušiem bitiem, tāpēc divi UUID nesniedz nekādu informāciju par to, kurš izveidots pirmais.

KSUID atšķiras trīs veidos:

  • Kārtojams pēc laika. Tā sākumā esošie laika zīmoga baiti nozīmē, ka arī vienkārša KSUID virkņu alfabētiskā kārtošana tās sakārto pēc izveides laika.
  • Īsāks. KSUID ir 27 rakstzīmes garš, bet standarta UUID — 36 rakstzīmes.
  • Bez atdalītājiem. UUID parasti raksta ar defisēm (xxxxxxxx-xxxx-...), bet KSUID defises nesatur.

Abus formātus var neatkarīgi ģenerēt dažādos datoros, nesazinoties ar centrālo serveri, tāpēc abi ļauj izvairīties no automātiski palielināma skaitītāja radīta sastrēguma koplietojamā datubāzē.

Biežāk uzdotie jautājumi

Ko nozīmē KSUID? K-Sortable Unique Identifier. Burts “K” norāda, ka tas ir kārtojams (“zināmā mērā kārtojams” sākotnējās Segment, šī formāta izveidotāja, projektēšanas piezīmēs).

Cik garš ir KSUID? 27 rakstzīmes, kas kodētas bāzē 62 (cipari 0-9, lielie burti, mazie burti).

Kas ir KSUID laikmets? 2014. gada 13. maijs plkst. 16:53:20 pēc UTC — tas ir 1 400 000 000 sekundes pēc standarta Unix laikmeta 1970. gada 1. janvāris.

Vai divi KSUID var sakrist? Tas ir ārkārtīgi maz ticams. Katrs KSUID ietver 16 nejaušus baitus (128 bitus), ko ģenerē kriptogrāfiski drošs nejaušo skaitļu ģenerators. Pat ģenerējot daudz KSUID vienā sekundē, iespēja, ka divi nejauši sakritīs, ir astronomiski maza.

Vai no KSUID var noteikt izveides laiku? Jā. Dekodētās vērtības pirmie 4 baiti ir laika zīmogs. Pieskaitot šo sekunžu skaitu KSUID laikmetam, iegūst sākotnējo izveides laiku.

Vai šis rīks atbalsta daudzu KSUID ģenerēšanu vienlaikus? Nē. Rīks ģenerē vienu KSUID par katru klikšķi uz pogas “Ģenerēt KSUID”. Tajā nav daudzuma ievades lauka, pielāgota laika zīmoga lauka vai eksportēšanas/lejupielādes funkcijas.

Vai KSUID var droši ievietot URL? Jā. Bāzes 62 kodējumā tiek izmantoti tikai cipari un burti, tāpēc KSUID ievietošanai URL, faila nosaukumā vai datubāzes atslēgā nav nepieciešama papildu ekranēšana.

Atsauces

  1. Segment izstrādātā KSUID GitHub krātuve: https://github.com/segmentio/ksuid
  2. "Generating good unique identifiers", autors Pīters Burġons: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html