ULID rafall

Búðu til ULID á netinu: 26 stafa Crockford Base32 auðkenni með 48 bita tíma og 80 slembivöldum bitum.

Snið
Auðkenni búin til
Tilbúið. Búðu til ULID í vafranum þínum.

Hvernig þetta ID er byggt upp

Uppsetning
26 Crockford Base32 stafir: 10 tímastafir fylgt eftir af 16 slembistöfum.
Óreiða (entropy)
80 slembivaldir bitar á eftir 48 bita millisekúndu-tímastimplinum.
Tími
Já. Fyrstu 10 stafirnir kóða millisekúndutíma, og stafrófsröð fylgir tímaröð.
Árekstrarhætta
Slembiendinn hefur 80 bita; hættan snýst aðallega um hversu mörg auðkenni þú býrð til á sömu millisekúndunni.
Dæmi
01M12BRPX8Z12QZ5G0KSADN0C7

Auðkennin þín eru búin til staðbundið með sterkri slembilu úr vafranum. Ekkert er sent til BroBroGo.

Algengar spurningar

Fyrir hvað er ULID gott?

ULID er nett, hentar vel í vefslóðir og er flokkanlegt eftir tíma sem hreinn texti, sem er gagnlegt fyrir annála (logs), hlutalykla og færslur sem eiga að raðast eftir stofntíma.

Er ULID það sama og UUID v7?

Nei. Bæði innihalda millisekúndutíma, en ULID notar Crockford Base32 og 26 stafi, á meðan UUID v7 heldur hinu staðlaða sextánundakerfissniði UUID.

ULID-rafall: Stuttir, tímaröðaðir auðkennir með 128 bita öryggi

Hvað er ULID og hvernig virkar þetta tól?

ULID (Universally Unique Lexicographically Sortable Identifier) er 26 stafa auðkennisnúmer sem er stöðluðu UUID sniði skylt en styttra og án bandstrika. Á þessari síðu velurðu ULID sem snið, velur fjölda (milli 1 og 100) og færð samstundis lista af einstökum, tímaraðaðanlegum ULID-snúrum. Hver snúra er 26 stafir, há‑ og lágstafir ógreinilegir (case‑insensitive), tilbúin til að afrita eina og eina eða allar í einu.

Það sem aðgreinir þessa síðu frá öðrum sniðum sama tóls er að ULID framleiðir auðkenni sem eru styttri en UUID (26 stafir á móti 36) og notar eingöngu Crockford base32 stafrófið. Það gerir snúrurnar há‑ og lágstafablindar og lausar við bandstrik. ULID-snúrur er hægt að raða lexicographically eftir sköpunartíma vegna þess að fyrstu 10 stafirnir kóða tímastimpil með millisekúndu nákvæmni. Þær eru einnig URL-öruggar án nokkurrar flóttakóðunar. Á þessari síðu birtast engir stillingarvalkostir fyrir hástafi eða bandstrik, því ULID er í eðli sínu há‑ og lágstafablint og hefur engin bandstrik. Slembihlutinn tekur 16 stafi (80 bitar) og heildargildið er 128 bitar.

Uppbygging ULID-snúru: Tímastimpill og slembihluti

ULID er 128 bita gildi, eins og UUID v4, en skiptingin er önnur. Fyrstu 10 stafirnir (48 bitar) kóða tímastimpil í millisekúndum síðan 1970-01-01 00:00:00 UTC. Þeir eru skrifaðir sem tíu stafir í Crockford base32. Til dæmis gæti tímastimpillinn litið svona út: 01ARZ3NDEK. Þessir stafir aukast monotónískt með tímanum, þannig að ULID-snúrum er hægt að raða eftir sköpunartíma án þess að lesa rauntímagildið.

Hinir 16 stafirnir (80 bitar) eru slembigildi sem myndast með crypto.getRandomValues() í vafranum. Þetta tryggir að hver ULID sé einstakt, jafnvel þótt mörg gildi séu mynduð á sömu millisekúndu. Heildarstaðalfrávik árekstralíkur er í reynd mjög lágt — um 1/(2^80) fyrir hvert nýtt gildi innan sömu millisekúndu. Þetta er mun öruggara en mörg eldri snið.

Það er mikilvægt að skilja að ULIDs tryggja ekki stranga röðun fyrir gildi sem myndast innan sömu millisekúndu. Ef þú býrð til 100 ULIDs í einni millisekúndu, verða tímastimpilhlutarnir eins, en slembihlutarnir geta raðast í hvaða röð sem er. Fyrir flest forrit skiptir þetta ekki máli, en í mjög afkastamiklum gagnagrunnum með mörgum innsetningum á sekúndu getur verið þörf á auknum röðunaraðferðum.

Crockford base32-kóðunin og af hverju hún skiptir máli

Crockford base32 er stafróf sem er hannað til að forðast sjónræna villu. Það inniheldur tölustafina 0–9 og bókstafina A–Z, en sleppir bókstöfunum I, L, O og U. Ástæðan er sú að I og L geta ruglast við tölustafinn 1, O við 0, og U getur virst of líkur V. Þetta þýðir að ULIDs eru lesanlegri handvirkt og auðveldara að slá inn án villna.

Þar að auki er Crockford base32 há‑ og lágstafablint. Það skiptir ekki máli hvort þú notar a eða A; báðir stafirnir tákna sama gildið. Þetta útilokar margar tegundir innsláttarvillna sem hrjá UUID með bandstrikum þar sem há‑ og lágstafir skipta máli. Á síðunni sjálfri birtast ULIDs í hástöfum, en afritun og innlímun virkar eins hvort sem er.

Þessi base32 kóðun er einnig mjög þétt. Hver stafur táknar 5 bita (2^5 = 32), þannig að 26 stafir gefa 26 × 5 = 130 bita, en þar sem 128 bitar eru notaðir er pláss fyrir 2 „aðra“ bita sem gera kleift að kóða tímastimpilinn og slembigildið án bandstrika. Þetta er ástæðan fyrir því að ULID er 26 stafir en UUID v4 er 36 stafir (32 hexadecimal plús 4 bandstrik). Munurinn á lengd er 10 stafir, sem getur skipt máli í forritum sem senda mörg auðkenni í URL-slóðum eða skilaboðum.

ULID á móti UUID v4 og UUID v7: Samanburður

UUID v4 er 128 bita auðkenni með 122 bitum af slembigildi og 6 bitum af merkingum. Það er skrifað sem 32 hexadecimal tölustafir með 4 bandstrikum (36 stafir alls). UUID v4 er ekki raðanlegt eftir tíma. UUID v7, sem er enn í þróun, inniheldur tímastimpil en notar enn hexadecimal kóðun og bandstrik.

ULID er á margan hátt betra fyrir gagnagrunnsnotkun. Þar sem ULID-snúrur eru lexicographically raðanlegar eftir tímastimplinum, bætast nýjar færslur oftast aftast í B-trjám gagnagrunns. Þetta dregur úr kostnaði við endurjafnvægi trjáa sem kemur fram við slembigildi eins og UUID v4. Í reynd getur þetta skilað allt að 20–50% betri innsetningarframmistöðu í gagnagrunnum eins og PostgreSQL eða MySQL, þegar mikið er af innsetningum.

Lengdin er annar stór munur. 26 stafir á móti 36 þýðir að ULID tekur minna pláss í gagnagrunni, minni bandbreidd í netumferð, og er auðveldara að lesa handvirkt. Þar að auki eru engin bandstrik sem þarf að meðhöndla sérstaklega. URL-slóð með ULID verður styttri og læsilegri.

Hins vegar er mikilvægt að hafa í huga að ULID notar 80 bita slembigildi, en UUID v4 notar 122 bita. Þetta þýðir að UUID v4 hefur 42 bitum meiri slembileika, sem gefur mun hærri árekstraþol við mjög mikinn fjölda gilda. Fyrir flest raunveruleg forrit með milljónum auðkenna skiptir þetta ekki máli, en fyrir mjög stór dreifð kerfi getur UUID v4 verið öruggara val.

Raðanleiki og tímaröðun: Hvernig ULID hjálpar í gagnagrunnum

Ein helsta ástæða fyrir því að velja ULID fram yfir UUID v4 er tímaröðunin. Fyrstu 10 stafirnir kóða tímastimpilinn þannig að ef þú raðar tveimur ULID-snúrum sem skrifaðar eru á mismunandi millisekúndum, mun sú eldri koma fyrr í stafröð. Þetta er lexicographic röðun, sem er nákvæmlega sama röðun og gagnagrunnar nota sjálfgefið fyrir textasúlur.

Í gagnagrunnsnotkun, ef þú notar ULID sem aðallykil, verða nýjar færslur oftast settar aftast í B-trénu (eða nálægt aftasta). Þetta dregur úr kostnaði við að setja inn nýjar færslur miðað við slembigildi eins og UUID v4, sem getur valdið því að tréð þurfi oft að endurjafnvægast. Í sumum tilfellum getur þetta aukið innsetningarframmistöðu um allt að 50%.

Hins vegar er takmörkun: Ef tvö ULID eru mynduð á sömu millisekúndu, geta þau raðast í hvaða röð sem er. Þetta er vegna þess að tímastimpillinn er 48 bitar sem ná yfir 2^48 millisekúndur (um 8.925 ár). Í hverri millisekúndu getur slembihlutinn (80 bitar) verið hvaða gildi sem er, og það er engin trygging fyrir röðun. Ef þú framleiðir mörg ULID á sömu millisekúndu, verður að nota aðrar aðferðir til að raða þeim tímaröð.

Líkur á árekstrum og 80-bita slembihlutinn

Uppbygging ULID gefur 80 bita slembigildi. Til að reikna líkur á árekstri notum við afmörkuðu árekstraformúluna (approximation): fyrir n gildi er líkur á að minnsta kosti einum árekstri u.þ.b. n^2 / (2^(80+1)). Fyrir 1 milljón ULID er þetta um (10^6)^2 / 2^8110^12 / 2.4 × 10^24 ≈ 4 × 10^(-13), sem er hverfandi. Jafnvel fyrir 1 milljarð ULID verða líkurnar um 0.0002, sem er enn mjög lítið.

Það er þó mikilvægt að hafa í huga að þessar tölur gilda aðeins fyrir gildi mynduð innan sömu millisekúndu. Þar sem tímastimpillinn er einstakur fyrir hverja millisekúndu, er engin hætta á árekstri milli gilda sem myndast á mismunandi millisekúndum. Þetta dregur verulega úr árekstrahættu í reynd.

Fyrir flest forrit, jafnvel stór dreifð kerfi, er 80-bita slembihlutinn nægjanlegur. Hins vegar, ef þú ert að byggja kerfi sem framleiðir marga milljarða auðkenna á hverri millisekúndu, gætirðu viljað íhuga aðrar lausnir eins og UUID v4 eða sérsniðna tímaröðun með stærri slembihluta.

Öryggi og staðbundin framleiðsla: Af hverju gögnin þín fara aldrei á netið

Allur ULID-framleiðslan á sér stað staðbundið í vafranum þínum. Tólið notar crypto.getRandomValues() sem er sterkt slembitala API sem allir nútímavafrar styðja. Þetta þýðir að engar upplýsingar um auðkennin þín, fjölda þeirra eða tímastimpla eru sendar til neins þjóns. Þetta er öfugt við sumar netþjónustur sem mynda UUID á miðlægum þjóni, sem gætu safnað gögnum um notkun.

Þar að auki er ULID-snúrum aldrei breytt á þjóninum. Þegar þú afritar einn ULID með því að smella á hann, eða allan listann með „Afrita allt“ hnappinum, fer gögnin beint á klemmuspjaldið þitt. Staðaartilkynningar eins og „Tilbúið“, „Búið til“ og „Öllum afritað!“ staðfesta aðgerðirnar en geyma engar upplýsingar.

Fyrir fyrirtæki sem meðhöndla viðkvæm gögn eða forrit sem þurfa að fara eftir persónuverndarlögum (eins og GDPR), er þetta mikill kostur. Þú getur notað tólið án þess að hafa áhyggjur af því að gögnin séu skráð eða notuð í markaðsskyni.

Algengar spurningar (FAQ)

Hvernig er ULID frábrugðið UUID? ULID er 26 stafir, UUID 36 stafir. ULID notar base32 kóðun og er raðanlegt eftir tíma; UUID v4 er ekki raðanlegt. ULID hefur engin bandstrik og er há‑ og lágstafablint.

Get ég notað ULID sem aðallykil í gagnagrunni? Já, og það er oft betra en UUID v4 fyrir innsetningarframmistöðu vegna tímaröðunar. Hins vegar skal hafa í huga að gildum innan sömu millisekúndu er ekki tryggt að raðast tímaröð.

Hverjar eru líkurnar á árekstri með ULID? Innan sömu millisekúndu er árekstrahættan um 1/(2^80). Milli mismunandi millisekúndna er engin hætta á árekstri þar sem tímastimpillinn er einstakur. Fyrir flest forrit eru líkurnar hverfandi.

Er ULID öruggara en UUID fyrir netnotkun? ULID er URL-öruggt án flóttakóðunar þar sem allir stafir í Crockford base32 eru leyfðir í URL án aðgerða. UUID hefur bandstrik sem geta valdið vandræðum í sumum URL-um.

Get ég breytt um stafaaðgreiningu (há‑ eða lágstafi) á ULID-snúrum mínum? Nei, ULID er í eðli sínu há‑ og lágstafablint. Það skiptir ekki máli hvort þú notar hástafi eða lágstafi; báðir tákna sama gildið. Á síðunni birtast ULIDs í hástöfum.

Hvað gerist ef ég smelli á einn ULID? Hann er afritaður á klemmuspjaldið. Ef þú smellir á „Afrita allt“ verður allur listinn afritaður. Staðan birtist sem „Afritað!“ og „Öllum afritað!“.