ULID generátor

Generáljon ULID azonosítókat online: 26 karakteres Crockford Base32 ID-k 48 bites időbélyeggel és 80 véletlenszerű bittel.

Formátum
Generált azonosítók
Kész. Generáljon ULID azonosítókat a böngészőjében.

Hogyan épül fel ez az ID?

Elrendezés
26 Crockford Base32 karakter: 10 időkarakter, amelyet 16 véletlenszerű karakter követ.
Entrópia
80 véletlenszerű bit a 48 bites milliszekundumos időbélyeg után.
Idő
Igen. Az első 10 karakter kódolja a milliszekundumos időt, és a lexikális sorrend követi az időrendet.
Ütközési kockázat
A véletlenszerű rész 80 bites; a kockázat főként attól függ, hogy hány ID-t hoz létre ugyanazon a milliszekundumon belül.
Példa
01M12BRPV0WKFMAYYN2CCVS09P

Az azonosítók helyben generálódnak erős böngésző-véletlenszerűséggel. Semmi sem kerül elküldésre a BroBroGo-nak.

Gyakran Ismételt Kérdések

Mire jó a ULID?

A ULID kompakt, URL-barát és egyszerű szövegként időrendbe rendezhető, ami rendkívül hasznos naplókhoz, objektumkulcsokhoz és olyan rekordokhoz, amelyeket a létrehozás ideje szerint kell sorba rendezni.

A ULID ugyanaz, mint a UUID v7?

Nem. Bár mindkettő tartalmaz milliszekundumos időbélyeget, a ULID Crockford Base32 kódolást és 26 karaktert használ, míg a UUID v7 megtartja a szabványos UUID hexadecimális formátumát.

A ULID-generátor oldal működése és technikai háttere

Ez az oldal a ULID (Universally Unique Lexicographically Sortable Identifier) formátumú azonosítók generálására szolgál. Kiválasztod a ULID-t, megadod a szükséges darabszámot (1 és 100 között), és a böngésződ helyben, erős véletlenszám-generálással előállítja a kért mennyiségű, 26 karakter hosszúságú, kötőjel nélküli azonosítót. Minden egyes ULID egyesével vagy a teljes lista egyszerre is másolható a vágólapra.

Ami ezt az oldalt megkülönbözteti a többi azonosítóformátumot kínáló laptól, az a ULID sajátos tulajdonságai: rövidebb, mint a UUID (26 karakter a 36 helyett), kizárólag a Crockford-féle base32 ábécét használja, ezáltal kis- és nagybetűkre érzéketlen, és nem tartalmaz kötőjeleket. A ULID-ok lexikografikusan rendezhetők a létrejöttük időpontja szerint, mert az első 10 karakter egy ezredmásodperc-pontosságú időbélyeget kódol. URL-biztosak, nem igényelnek escape-elést. Ezen az oldalon nincs kapcsoló a kis-/nagybetűkre vagy a kötőjelekre, mert a ULID eredendően érzéketlen a kis- és nagybetűk különbségére, és nem tartalmaz kötőjelet. A véletlenszerű komponens a maradék 16 karaktert (80 bit) foglalja el, a teljes mögöttes érték 128 bit.


A ULID belső szerkezete: időbélyeg és véletlen komponens

A ULID 128 bitje két jól elkülöníthető részre oszlik. Az első 48 bit egy ezredmásodperc-pontosságú Unix-időbélyeget tárol. Ez az időbélyeg a Crockford-féle base32 kódolással 10 karakterré alakul. A maradék 80 bit egy erős kriptográfiai véletlenszám-generátorral (a böngészőben crypto.getRandomValues() hívással) előállított véletlen érték. Ez a 80 bit a kódolás után 16 karaktert tesz ki. A teljes ULID- string tehát mindig 26 karakter hosszú, és az első 10 karakter alapján időrendbe állítható.

Fontos megjegyezni, hogy a ULID nem garantál szigorú rendezettséget azonos ezredmásodpercben generált azonosítók között. Ha egy böngészőablakban egyszerre kérsz több ULID-ot, a véletlen komponens miatt azok sorrendje véletlenszerű lesz. Ez a korlátozás a gyakorlatban ritkán okoz problémát, de tisztában kell lenni vele.


A Crockford-féle base32 kódolás jelentősége

A Crockford-féle base32 ábécé a következő karakterekből áll: 0123456789ABCDEFGHJKMNPQRSTVWXYZ. A hiányzó betűk (I, L, O, U) szándékosan ki vannak hagyva, hogy elkerüljék a vizuális félreértéseket (pl. 'I' és '1', 'O' és '0' összetéveszthetőségét). Ez az ábécé teszi a ULID-t kis- és nagybetűre érzéketlenné: az a és az A ugyanazt a 0-ás értéket jelenti, a b és B az 1-et, és így tovább. Az oldal ezt a kódolást használja, és mivel a ULID-nek nincs kötőjele, a teljes azonosító egy folytonos, 26 karakterből álló string.

Ez a döntés nem véletlen: a Crockford-kódolás csökkenti az emberi másolási hibák esélyét, és URL-biztossá teszi a karaktereket. A ULID minden karaktere az RFC 3986 által nem fenntartott tartományba esik, így nincs szükség URL-escape-elésre.


Összehasonlítás UUID v4-gyel és UUID v7-tel

A leggyakrabban használt azonosítóformátumokkal összevetve a ULID előnyei és hátrányai világosan látszanak.

UUID v4

  • Hossz: 36 karakter (32 hexadecimális + 4 kötőjel)
  • Rendezés: nem rendezhető idő szerint
  • Véletlen: 122 bit
  • Eszközigény: gyakori a kötőjel és a hexadecimális ábécé

UUID v7

  • Hossz: 36 karakter (32 hexadecimális + 4 kötőjel)
  • Rendezés: időbélyeget is tartalmaz, így rendezhető
  • Véletlen: 62 bit
  • Eszközigény: ugyanaz, mint a v4, de az időbélyeg miatt több logika kell a generáláshoz

ULID

  • Hossz: 26 karakter (base32, nincs kötőjel)
  • Rendezés: lexikografikusan rendezhető az első 10 karakter alapján
  • Véletlen: 80 bit
  • Eszközigény: rövidebb, URL-biztos, emberbarátabb

A ULID 26 karaktere 128 bitet képvisel, ugyanannyit, mint a UUID 128 bitje. A különbség a kódolásban rejlik: a hexadecimális kódolás 1 bitenként 4 bitet tárol, míg a base32 5 bitet. Ezért a ULID rövidebb. A UUID v7 62 bit véletlent tartalmaz, a ULID 80 bitet, így a ULID valamivel nagyobb véletlenszerűséget biztosít.


Rendezési viselkedés és időbélyeg-alapú sorrend

A ULID első 10 karaktere egy Unix-időbélyeget kódol ezredmásodperc-pontossággal. Ez azt jelenti, hogy ha két ULID-ot egymás után, de különböző ezredmásodpercekben generálsz, akkor a lexikografikus rendezésük megegyezik a létrejöttük időrendjével. Ez nagy segítség adatbázisokban, ahol az új rekordok azonosítói gyakran növekvő sorrendben kerülnek be, ami javíthatja a B-fa indexek teljesítményét.

Ha azonban több ULID-ot generálsz ugyanabban az ezredmásodpercben (például az oldalon 100 darabot egyszerre kérsz), akkor az időbélyegük megegyezik, és a sorrendet a véletlen 80 bites komponens határozza meg. Ez a korlátozás a legtöbb gyakorlati alkalmazásban elfogadható, de ha szigorú időrendi sorrendre van szükséged, akkor érdemes lehet az UUID v7-et választani, amely az időbélyeget és a véletlent kombinálva pontosabb rendezést tesz lehetővé.


Ütközési valószínűség és gyakorlati korlátok

A ULID ütközési valószínűsége a 80 bites véletlen komponens nagyságától függ. 80 bit 2^80 lehetséges értéket jelent. Ha másodpercenként 1 milliárd ULID-ot generálnál, akkor az ütközés valószínűsége körülbelül 50% lenne 85 év után. A gyakorlatban, amikor az oldal 1-100 darabot generál egyszerre, és a generálás helyben, a böngészőben történik, az ütközés gyakorlatilag lehetetlen.

Fontos azonban, hogy a ULID nem garantálja a globális egyediséget, mert a véletlen komponens nem tartalmaz semmilyen gépi azonosítót vagy számlálót. Ha két különböző gépen ugyanabban az ezredmásodpercben véletlenül ugyanaz a 80 bites véletlen érték jön ki, akkor a két ULID megegyezik. Ennek esélye rendkívül kicsi, de létezik. Elosztott rendszerekben ezért gyakran kiegészítik a ULID-t egy gépi azonosítóval vagy használnak UUID v7-et.


URL-biztonság, helyi generálás és adatvédelmi szempontok

A ULID minden karaktere az RFC 3986 által nem fenntartott tartományba esik: a kis- és nagybetűk, valamint a számjegyek mind URL-biztosak, kötőjelet vagy más karaktert nem tartalmaznak. Ez azt jelenti, hogy a ULID-okat közvetlenül használhatod URL-ekben, API-végpontokban, anélkül, hogy escape-elni kellene őket. Ez a tulajdonság a Crockford-féle base32 ábécéből következik, amely tudatosan kerüli a problémás karaktereket.

Az oldalon minden generálás helyben, a böngésződben történik. A kriptográfiai véletlenszám-generátor (crypto.getRandomValues()) biztosítja az erős véletlent. Semmilyen adat nem hagyja el a gépedet, nem kerül szerverre, nem kerül naplózásra. Ez fontos adatvédelmi szempont, különösen akkor, ha érzékeny rendszerekben használod a generált azonosítókat.


Felhasználási területek: adatbázisok, API-k, elosztott rendszerek

A ULID-ot elsősorban olyan helyeken használják, ahol az azonosítók rövidsége, rendezhetősége és URL-biztossága előnyt jelent.

  • Adatbázisok – Az időrendben növekvő azonosítók jobb teljesítményt nyújtanak a B-fa indexekben, mert az új rekordok általában a fa végére kerülnek. Ez csökkenti az oldalak szétaprózódását és az index karbantartásának költségeit.
  • API-k – A ULID 26 karaktere könnyen másolható, emberi szemmel olvasható, és URL-ben is használható anélkül, hogy escape-elni kellene. API-válaszokban gyakran előnyösebb, mint a 36 karakteres UUID.
  • Elosztott rendszerek – Mivel a ULID nem tartalmaz gépi azonosítót, a generálás egyszerűen párhuzamosítható. Ha azonban szigorú globális egyediségre van szükséged, érdemes kombinálni egy gépi azonosítóval vagy átváltani UUID v7-re.

Az oldal 1 és 100 közötti darabszámot enged. Ha ennél többre van szükséged, több alkalommal kell generálnod. A generálás azonnali, nincs várakozási idő.


Gyakran ismételt kérdések (FAQ)

Miért nincs kötőjel a ULID-ban?
A ULID specifikációja szerint a Crockford-féle base32 kódolás nem használ kötőjeleket. Ez az oldal ezt a specifikációt követi. Ha kötőjelekre van szükséged, más azonosítóformátumot (pl. UUID-t) érdemes választanod.

Biztonságos a ULID használata titkos adatokhoz?
A ULID véletlen komponense 80 bit, ami erős, de nem olyan nagy, mint a UUID v4 122 bitje. Ha szigorú biztonsági követelményeid vannak, érdemes lehet hosszabb azonosítót választanod (pl. UUID v4). A generálás helyben, erős véletlenszám-generátorral történik.

Miért nem lehet kis- és nagybetűt választani?
A ULID kis- és nagybetűre érzéketlen: a Crockford-kódolásban a betűk értéke nem függ a kis- vagy nagybetűs írásmódtól. Az oldal mindig nagybetűs formában jeleníti meg a ULID-okat, de ez csak konvenció. Az azonosítókat bármilyen formában másolhatod, a felismerés szempontjából egyformák.

Mi a teendő, ha véletlenül ugyanazt a ULID-ot generálom kétszer?
A 80 bites véletlen komponensnek köszönhetően a kétszeri generálás gyakorlatilag lehetetlen. Ha mégis előfordulna, az az eset rendkívül valószínűtlen (2^80 esély). Ugyanakkor a ULID nem garantálja a globális egyediséget elosztott rendszerekben.

Lehet-e ULID-ot használni adatbázis elsődleges kulcsaként?
Igen, és ez az egyik leggyakoribb felhasználási mód. A ULID növekvő sorrendben kerül be az adatbázisba, ami javítja a B-fa indexek teljesítményét. Azonban ügyelni kell arra, hogy azonos ezredmásodpercben generált ULID-ok sorrendje véletlenszerű, ezért ha szigorú monoton növekedésre van szükséged, használj UUID v7-et vagy egy számlálós megoldást.

Miért pont 1 és 100 között lehet darabszámot megadni?
Az oldal tervezői ezt a korlátot állították be, hogy a generálás gyors és átlátható maradjon. 100 darab ULID generálása a böngészőben szinte azonnal megtörténik. Ha többre van szükséged, több alkalommal is generálhatsz.