UUID v7 generátor

Generáljon UUID v7 értékeket online: időrendbe rendezhető UUID-k 48 bites milliszekundumos időbélyeggel és 74 véletlenszerű bittel.

Formátum
Generált azonosítók
Kész. Generáljon UUID v7 értékeket a böngészőjében.

Hogyan épül fel ez az ID?

Elrendezés
48 bites Unix milliszekundumos időbélyeg, 7-es verziójú bitek, RFC variáns bitek és véletlenszerű kitöltés.
Entrópia
74 véletlenszerű bit ebben az implementációban; nem tartalmaz monoton számlálót.
Idő
Igen. Az első 48 bit kódolja a létrehozási időt, így az azonosítók a különböző milliszekundumok között időrendbe rendezhetők.
Ütközési kockázat
Egyetlen milliszekundumon belül az ütközések elkerülése 74 véletlenszerű biten múlik; rendkívül nagy, azonos milliszekundumon belüli mennyiség esetén koordinált ID-szolgáltatást érdemes használni.
Példa
01a044bc-5b5c-7e76-97e1-0c3659c4c709

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

Miért válasszam a UUID v7-et a UUID v4 helyett?

A UUID v7 megtartja a UUID formátumot, de idő szerint rendezhető, ami segít a naplók, adatbázis-indexek és eseményfolyamok időrendben tartásában.

Elrejti a UUID v7 a létrehozás idejét?

Nem. Az időbélyeg az azonosító részét képezi. Használja a UUID v4-et vagy a NanoID-t, ha időadatok nélküli, átláthatatlan azonosítóra van szüksége.

UUID v7 generátor: időbélyeg-alapú egyedi azonosítók böngészőben

Az UUID v7 a 128 bites egyedi azonosítók családjának legújabb tagja, amely egy 48 bites Unix milliszekundumos időbélyeget kombinál véletlenszerű bitekkel. Ennek a generátornak a használata annyiból áll, hogy megad egy darabszámot 1 és 100 között, néhány megjelenítési beállítást, és az oldal azonnal visszaadja a kért számú UUID v7 azonosítót – időrendben rendezhető, 36 karakter hosszú sztringeket, amelyeket egyenként vagy egyszerre is a vágólapra másolhat.

Ami ezt az oldalt igazán mássá teszi, az az, hogy a UUID v7 beágyazza a 48 bites Unix milliszekundumos időbélyeget az azonosító elejére, majd ezt véletlenszerűség követi. Ez azt eredményezi, hogy az azonosítók kronológiailag rendezhetők a létrehozás ideje szerint – ezzel orvosolva az UUID v4 index-lokalitási problémáját –, miközben kriptográfiai szempontból kitalálhatatlanok maradnak. A testvére formátumokkal (v4, ULID, NanoID) ellentétben a v7 egy 36 karakteres sztring, amelynek első karakterei az időbélyeget hordozzák; nem garantál szigorú rendezést az ugyanabban a milliszekundumban generált azonosítók között.

A UUID v7 szerkezete és működése

A UUID v7 formátum a 128 bitet a következőképpen osztja fel:

Bitek Tartalom
48 Unix milliszekundumos időbélyeg (az 1970. január 1. óta eltelt milliszekundumok száma)
4 Változat azonosító (7-es)
12 Véletlenszerű adat (a verzió része)
2 Alváltozat azonosító (10 – RFC 4122)
62 Véletlenszerű adat

A 36 karakteres szöveges reprezentáció a xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx mintát követi, ahol az első 8 karakter – a kötőjelek elhagyása esetén az első 12 hexadecimális számjegy – az időbélyeget kódolja. Ez teszi lehetővé, hogy az azonosítók születési sorrendben rendezhetők legyenek: két, különböző milliszekundumban generált v7-es string összehasonlításakor a korábban keletkezett mindig kisebb lesz.

A 48 bites időbélyeg körülbelül 8920 évig elegendő, mielőtt túlcsordulna. Ez a gyakorlatban bőven meghaladja bármely rendszer várható élettartamát. A fennmaradó 74 bit (62 random + a verziószámot és alváltozatot kódoló bitek) 2^37 körüli azonosítót tesz lehetővé milliszekundumonként, ami bőven elég a párhuzamos generáláshoz is.

Időalapú rendezés és adatbázis-indexek

Az UUID v4 teljesen véletlenszerű eloszlása jól ismert problémát okoz a B-fa indexekben, különösen az adatbázisok elsődleges kulcsaként használva. Az új sorok beszúrása szinte véletlenszerű helyre történik a táblában, ami gyakori oldalhasadásokhoz, az indexgyökér-frissítésekhez és a buffer poolban lévő lapok folyamatos cseréléséhez vezet. Ez a teljesítmény akár 80%-os romlását is okozhatja nagy írási terhelés mellett.

Az UUID v7 időbélyeg-kezdete ezt a problémát hivatott orvosolni: az új azonosítók egymás után, sorban keletkeznek, így az indexbe való beszúrás szinte mindig a B-fa jobb szélén történik. Ez minimálisra csökkenti az index átrendeződését, és javítja a gyorsítótár kihasználtságát, mivel a nemrég beszúrt sorok fizikailag is közel vannak egymáshoz.

Azonban fontos korlátozást kell megjegyezni: az UUID v7 nem garantál szigorú sorrendiséget az ugyanabban a milliszekundumban generált azonosítók között. Ha több ezer rekordot szúr be egyetlen ezredmásodpercen belül, a sorrendjük véletlenszerű lesz. Ez a tervezési döntés lehetővé teszi a párhuzamos generálást anélkül, hogy központi koordinációra lenne szükség, ami elengedhetetlen a elosztott rendszerekben.

UUID v4 versus UUID v7

A két formátum közötti választás gyakorlati hatással van az alkalmazás méretezhetőségére. Íme a legfontosabb különbségek:

  • UUID v4 – 122 bit véletlenszerűség, nincs időbélyeg. Kiváló kitalálhatatlanság, de káros az index teljesítményre.
  • UUID v7 – 48 bit időbélyeg + 74 bit véletlenszerűség. Időrendi rendezhetőség, kisebb eséllyel okoz indexfragmentációt, de a véletlen bitszám csökkenése miatt elméletileg kisebb a kitalálhatatlansági távolság.

A gyakorlatban mindkettő elegendő kriptográfiai erősséget nyújt a legtöbb alkalmazáshoz; a különbség a 74 vs 122 véletlen bit között csak elméleti jelentőségű, mivel a 74 bit még mindig 2^74 lehetőséget jelent, ami gyakorlatilag kimeríthetetlen.

Egy másik fontos különbség: az UUID v4 hipotetikus esélye a ütközésre 2^122-hez 1, ami lényegében nulla; az UUID v7 esetében ez 2^74-hez 1 ugyanabban a milliszekundumban. Mivel az időbélyeg különböző milliszekundumokban elválasztja a generálásokat, a tényleges ütközési valószínűség sokkal kisebb.

Böngészőbeli generálás és adatvédelem

A generálás teljes egészében a böngészőben történik, a crypto.getRandomValues() API használatával, amely erős kriptográfiai véletlenszám-generátort biztosít. Semmilyen adat nem kerül a BroBroGo szervereire – az azonosítók helyben, a felhasználó gépén készülnek.

Ennek a megközelítésnek több előnye van:

  • Adatvédelem: a generált azonosítók soha nem hagyják el a böngészőt, így nem rögzíthetők, nem naplózhatók és nem használhatók fel a felhasználó tevékenységének nyomon követésére.
  • Sebesség: nincs hálózati késleltetés; a generálás szinte azonnali, akár 100 azonosító esetén is.
  • Offline működés: az oldal betöltése után internetkapcsolat nélkül is használható.

A crypto.getRandomValues() a modern böngészőkben elérhető, és a kriptográfiai szempontból erős véletlenszám-generátorokra támaszkodik, nem a gyengébb Math.random() függvényre. Ez garantálja, hogy a véletlen bitek valóban kitalálhatatlanok.

Formátum-beállítások: kötőjelek, kis- és nagybetűk

A generátor lehetőséget ad a formátum módosítására:

  • Kis- és nagybetű: alapértelmezés szerint a UUID kisbetűs, de a "Nagybetűs" kapcsolóval a teljes 36 karakteres sztring nagybetűsre váltható. Ez befolyásolja a tárolást: a nagybetűs azonosítók emberileg könnyebben olvashatók, de a kisbetűsek általában szabványosabbak.
  • Kötőjelek elhagyása: ha a felhasználó kikapcsolja a kötőjeleket, a sztring 32 karakteressé válik (36 helyett). Ez gyakran hasznos, ha az azonosítót URL-be vagy más, rövidített formátumot igénylő környezetbe kell beilleszteni.

Érdekes hatás: a "kötőjelek nélküli, nagybetűs" beállítás eredménye olyan 32 karakteres, csupa hexadecimális számjegyből álló sztring, amely emlékeztet a megszokott UUID formátumra, de nem tartalmaz elválasztójeleket. Ezt a formátumot néha "UUID kompakt" néven emlegetik, bár a hivatalos szabvány megköveteli a kötőjeleket.

Használati esetek és gyakorlati tanácsok

Az UUID v7 elsődleges célközönsége a fejlesztők és adatbázis-adminisztrátorok, akik elosztott rendszereket építenek. A leggyakoribb alkalmazási területek:

  • Eseményforrás (event sourcing): az események időrendi feldolgozásához használt azonosítók. Az UUID v7 időbélyeg-alapú rendezése lehetővé teszi, hogy az események sorrendje megegyezzen az azonosítók sorrendjével.
  • Auditnaplók: ahol a naplóbejegyzések időrendi sorrendjét fontos megőrizni, de nem áll rendelkezésre központi időbélyeg.
  • Üzenetkezelő rendszerek: üzenetek azonosítása, ahol a sorrendiség fontos, de a párhuzamos feldolgozás is szükséges.
  • Adatbázis-elsődleges kulcsok: nagy terhelésű (1000+ beszúrás/másodperc) rendszerekben, ahol az UUID v4 indexfragmentációja már érezhető.

Gyakorlati tanácsok:

  • Ha 100-nál több azonosítót kell generálnia egyszerre, futtassa le többször a generálást, mivel az oldal egyszerre legfeljebb 100-at állít elő.
  • Ha a rendezés fontos, ne támaszkodjon arra, hogy az ugyanabban a milliszekundumban generált azonosítók sorrendje megegyezik a generálás sorrendjével. Terjessze ki ezt a logikát másodlagos időbélyeggel (pl. nanosecundum) vagy sorszámmal.
  • Tesztelje, hogy az adatbázisa támogatja-e az UUID v7 natív típusaként. Egyes adatbázisok (pl. modern PostgreSQL verziók) közvetlenül kezelik a uuid típust, mások sztringként tárolják, ami hatással van a rendezésre és az indexelésre.

GYIK – gyakran ismételt kérdések

1. Mi a különbség az UUID v7 és az ULID között? Mindkettő időbélyeget használ a rendezéshez, de az ULID 26 karakteres, csupa nagybetűs alfanumerikus sztring, míg a UUID v7 36 karakteres hexaformátumú. Az ULID időbélyege 10 karakterre van kódolva (Crockford Base32), a UUID v7-é 12 hexadecimális számjegyre. A véletlen rész is különbözik: ULID 80 bit, UUID v7 74 bit random adatot tartalmaz.

2. Mennyire biztonságos a crypto.getRandomValues()? A crypto.getRandomValues() a böngésző beépített kriptográfiai véletlenszám-generátorát használja, amely az operációs rendszer entrópiaforrásaira támaszkodik. Ez ugyanaz a forrás, mint amit a TLS-kapcsolatok kulcsgenerálásához is használnak. Praktikusan kimeríthetetlen, és megfelel a legmagasabb biztonsági követelményeknek.

3. Miért nem garantál szigorú rendezést az UUID v7 ugyanabban a milliszekundumban? Mert a 48 bites időbélyeg minden generáláskor az éppen aktuális milliszekundumot képviseli. Ha két generálás ugyanabban a milliszekundumban történik, az időbélyeg azonos lesz, és a sorrendet a 74 véletlen bit dönti el, ami véletlenszerűen oszlik el. Ez a tulajdonság lehetővé teszi a párhuzamos generálást, de fel kell készülni rá, hogy a rendezés nem lesz teljes.

4. Hogyan lehet a generált UUID-kat másolni? Két módon: Kattintson egy adott azonosítóra – az egy másolja azt a vágólapra. Vagy kattintson a "Minden másolása" gombra – ez az összes generált azonosítót egyben másolja a vágólapra, vesszőkkel vagy sortörésekkel elválasztva (az oldal beállításaitól függően). A "Mindet másolva!" felirat jelenik meg, ha sikeres volt a másolás.

5. Milyen esetekben érdemes használni az UUID v7-t az UUID v4 helyett? Amikor az azonosítók időrendi rendezése előnyt jelent, különösen adatbázis-indexeknél. Ha nagy mennyiségű beszúrás várható (több ezer/másodperc), és a B-fa indexek teljesítménye kritikus, a v7 jelentős javulást hozhat. Egyszerű alkalmazásokban, ahol a rekordok száma kicsi (pár ezer), a v4 továbbra is tökéletesen megfelelő.

6. Van-e korlátja a generálható azonosítók számának? Az oldal egyszerre 1 és 100 közötti darabszámot enged meg. Többszöri generálással azonban korlátlan számú azonosító előállítható, mivel a böngésző entrópiája gyakorlatilag kimeríthetetlen. A 100-as korlát pusztán használhatósági okokból létezik – a hosszú lista kezelése a vágólapon és a képernyőn kényelmetlen lenne.