Generator KSUID - Ustvarjanje sortirnih edinstvenih identifikatorjev
Ustvarjanje K-sortirnih edinstvenih identifikatorjev (KSUID) na spletu. Hitro ustvarjanje časovno sortirnih, trčenjem odpornih ID-jev za porazdeljene sisteme in podatkovne zbirke.
Generator KSUID
Dokumentacija
Generator KSUID
KSUID (K-Sortable Unique Identifier oziroma razvrstljivi enolični identifikator) je koda z 27 znaki, ki se uporablja za označevanje zapisov, kot so vrstice v zbirki podatkov, vnosi v dnevnik ali zahteve API. Združuje časovni žig z naključnimi podatki, zato se identifikatorji, ustvarjeni pozneje, vedno razvrstijo za identifikatorje, ustvarjene prej, čeprav je vsak še vedno praktično enoličen. To orodje v brskalniku ustvari en sam KSUID in uporabniku omogoča, da ga kopira.
Iz česa je sestavljen KSUID?
KSUID je dolg 20 bajtov in razdeljen na dva dela:
- Časovni žig (4 bajti): število sekund od določene začetne točke, imenovane epoha KSUID.
- Naključni podatki (16 bajtov): podatki, ki jih ustvari kriptografski generator naključnih števil v brskalniku.
Teh 20 bajtov se nato pretvori v besedilo s kodiranjem base62, sistemom, ki za predstavitev števil uporablja 62 znakov: števke 0-9, velike črke A–Z in male črke a–z. Rezultat je vedno dopolnjen na natanko 27 znakov, na primer 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Ker je časovni žig na začetku, se bosta dva KSUID-a, ustvarjena v razmiku ene sekunde, pri primerjavi kot navadno besedilo običajno razvrstila v enakem vrstnem redu kot njun čas nastanka. Ker je zadnjih 16 bajtov naključnih, sta dva KSUID-a, ustvarjena v isti sekundi, skoraj zagotovo različna.
Epoha KSUID
Večina računalniških sistemov šteje čas v sekundah od datuma 1. januar 1970 (»epoha Unix«). KSUID uporablja drugo začetno točko, epoho KSUID: 1.400.000.000 sekund po epohi Unix, kar je 13. maj 2014 ob 16:53:20 UTC.
Poznejša začetna točka omogoča, da časovno polje velikosti 4 bajtov zajema več uporabnih let, preden zmanjka prostora. Števec velikosti 4 bajtov (32 bitov) lahko vsebuje največ 4.294.967.295 sekund. Če štejemo od epohe KSUID, se to časovno obdobje izteče okoli datuma 19. junij 2150.
Formula KSUID
Niz KSUID se ustvari v treh korakih.
-
Določite vrednost časovnega žiga:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Ustvarite 16 naključnih bajtov,
R, s kriptografsko varnim generatorjem naključnih števil. -
Časovni žig velikosti 4 bajtov in 16 naključnih bajtov združite v blok velikosti 20 bajtov, nato ta blok kodirajte v base62 in rezultat dopolnite na 27 znakov:
KSUID = Base62( T ‖ R )
Tukaj ‖ pomeni »postavi enega za drugim«. Bajti časovnega žiga so vedno prvi, zaradi česar se končni niz pravilno razvršča po času.
Primer z rešitvijo
Predpostavimo, da je del časovnega žiga KSUID-a 100000000. Ker je epoha KSUID 1.400.000.000 sekund po epohi Unix, ta časovni žig predstavlja 14. julij 2017 ob 02:40:00 UTC.
Ta časovni žig združimo z zaporedjem 16 bajtov 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (ki je tukaj uporabljeno samo za ponovljivost primera; pravi generator namesto tega uporablja naključne bajte), kodiranje base62 pa ustvari:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Ta niz je dolg 27 znakov, sestavljajo pa ga samo števke in črke, zato ga je mogoče neposredno varno uporabiti v URL-ju ali imenu datoteke.
Kako uporabljati orodje za ustvarjanje KSUID-ov
- Odprite stran generatorja KSUID.
- Izberite gumb »Ustvari KSUID«.
- Orodje ustvari en nov KSUID z uporabo trenutnega časa in novih naključnih bajtov ter ga prikaže na strani.
- Izberite gumb »Kopiraj KSUID«, da vrednost kopirate v odložišče.
- Izberite »Ponastavi«, da počistite rezultat. Gumb za ponastavitev se prikaže šele, ko je KSUID ustvarjen.
Vsak klik gumba »Ustvari KSUID« ustvari natanko en identifikator. Če želite ustvariti več KSUID-ov, gumb kliknite za vsakega posebej; orodje nima vgrajenega paketnega načina ali izvoza v datoteko.
Generator uporablja API Web Crypto, vgrajen v sodobne brskalnike. Če ta API ni na voljo, orodje namesto ustvarjanja identifikatorja prikaže napako, saj bi lahko generator naključnih števil, ki ni kriptografsko varen, ustvaril identifikatorje, ki jih je lažje uganiti ali pri katerih bi prišlo do trka.
KSUID v primerjavi z UUID
UUID (Universally Unique Identifier oziroma univerzalno enolični identifikator) je pogosta alternativna oblika identifikatorja. Najpogosteje uporabljena različica, UUID v4, je dolga 36 znakov in je skoraj v celoti sestavljena iz naključnih bitov, zato iz dveh UUID-jev ni mogoče razbrati, kateri je bil ustvarjen prej.
KSUID se razlikuje na tri načine:
- Razvrščanje po času. Začetni bajti časovnega žiga pomenijo, da abecedno razvrščanje nizov KSUID razvrsti tudi po času nastanka.
- Krajši. KSUID ima 27 znakov, standardni UUID pa 36.
- Brez ločil. UUID se običajno zapiše z vezaji (
xxxxxxxx-xxxx-...), KSUID pa jih nima.
Obe obliki je mogoče neodvisno ustvariti v različnih računalnikih brez preverjanja pri osrednjem strežniku, zato se obe izogneta ozkemu grlu števca s samodejnim povečevanjem v skupni zbirki podatkov.
Pogosta vprašanja
Kaj pomeni KSUID? K-Sortable Unique Identifier oziroma razvrstljivi enolični identifikator. Črka »K« se nanaša na dejstvo, da ga je mogoče razvrščati (»neke vrste razvrstljiv« v izvirnih oblikovalskih zapiskih podjetja Segment, ki je ustvarilo to obliko).
Kako dolg je KSUID? 27 znakov, kodiranih z uporabo base62 (števke 0-9, velike črke A–Z, male črke a–z).
Kaj je epoha KSUID? 13. maj 2014 ob 16:53:20 UTC, kar je 1.400.000.000 sekund po standardni epohi Unix, ki se začne na datum 1. januar 1970.
Ali lahko pride do trka dveh KSUID-ov? To je izjemno malo verjetno. Vsak KSUID vsebuje 16 naključnih bajtov (128 bitov), ustvarjenih s kriptografsko varnim generatorjem naključnih števil. Tudi ustvarjanje številnih KSUID-ov v isti sekundi pomeni astronomsko majhno verjetnost, da bi se dva po naključju ujemala.
Ali lahko iz KSUID-a pridobim čas nastanka? Da. Prvi 4 bajti dekodirane vrednosti predstavljajo časovni žig. Če epohi KSUID prištejemo to število sekund, dobimo izvirni čas nastanka.
Ali to orodje podpira hkratno ustvarjanje več KSUID-ov? Ne. Orodje ustvari en KSUID na klik gumba »Ustvari KSUID«. Nima polja za vnos količine, polja za časovni žig po meri ali funkcije za izvoz oziroma prenos.
Ali je KSUID varno uporabiti v URL-ju? Da. Kodiranje base62 uporablja samo števke in črke, zato za pojav v URL-ju, imenu datoteke ali ključu zbirke podatkov KSUID ne potrebuje dodatnega ubeževanja.
Viri
- Repozitorij KSUID podjetja Segment na GitHubu: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" avtorja Petra Bourgona: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html