UUID v4 vagy v7: melyiket válaszd, és miért számít?
Használd a UUID v4-et, ha csak véletlenszerű azonosítóra van szükséged, semmi másra. A UUID v7-et használd, ha az azonosító adatbázis-kulcs lesz, vagy ha azt szeretnéd, hogy az azonosítók a létrehozás ideje szerint rendeződjenek. Mindkettő 128 bites, ugyanabban a 36 karakteres alakban íródik, így a különbség abban van, hogyan vannak elrendezve a bitek. Az alábbi UUID-generátor bármelyik verziót elkészíti, egyszerre egytől 500-ig, a böngésződben.
UUID-generátorEgyedi azonosító a kódomhozPróbáld ki ingyenHogy néz ki egy UUID
Az UUID, vagyis univerzálisan egyedi azonosító, egy 128 bites szám, amely 32 hexadecimális számjegyként írható le, öt csoportban: 8, 4, 4, 4 és 12 számjeggyel, kötőjelekkel elválasztva. Példa: 3f2b8c1e-6d4a-4f7b-9c2e-8a1d5e0b7f63.
A számnak két része rögzített. Négy bit tárolja a verziót, ezért a harmadik csoport v4 esetén 4-essel, v7 esetén 7-essel kezdődik. Két bit a változatot (variant) adja meg, ezért a negyedik csoport 8, 9, a vagy b karakterrel kezdődik. A többi bit maga az azonosító. A változat- és verziójelző bitek miatt egy v4 UUID-ban 122 véletlen bit van, nem 128.
UUID v4: véletlenszerű
A v4 UUID a rögzített bitek kivételével véletlenszerű. Ez a 122 véletlen bit gyakorlatilag kizárja az ismétlődést. Tegyük fel, hogy egymilliárd v4 UUID-t generálsz. Annak az esélye, hogy közülük kettő megegyezik, nagyjából n négyzet osztva a lehetséges értékek számának kétszeresével, ami körülbelül 10 a -19. hatványon. Más szóval az ütközésekkel nem kell külön foglalkoznod.
Ez a becslés feltételezi, hogy a generátor kriptográfiai véletlenforrásból veszi a biteket. Egy kiszámítható generátor aláásná a becslést. Ez az eszköz a böngésző kriptográfiai véletlenforrását használja, a crypto.randomUUID vagy a crypto.getRandomValues segítségével.
UUID v7: először az idő
Az RFC 9562 határozza meg a v7-et. Első 48 bitje a Unix-időt tárolja ezredmásodpercben, így a később létrehozott azonosító első része nagyobb, mint a korábbié. Ezt követik a verziójelző bitek, majd véletlen bitek, a változatbitek és további véletlen bitek. A véletlen tartomány egy része számlálót is tárolhat, ami sorrendben tartja az azonosítókat, ha több is készül ugyanabban az ezredmásodpercben.
Mivel az idő áll elöl, a v7 azonosítók szövegként, egységes betűalakban rendezve ezredmásodpercre pontosan a létrehozás ideje szerint sorba állíthatók. Ez azért működik, mert a hexadecimális számjegyek rögzített szélességűek, az idő pedig a vezető karakterekben van.
Az idő látható is. Aki elolvas egy v7 UUID-t, nagyjából meg tudja állapítani, mikor készült. Ezt magad is ellenőrizheted az UUID-generátor Elemzés mezőjével, amely az első 48 bitet visszaalakítja dátummá és időponttá.
Miért jó a v7 adatbázis-indexekhez
Az adatbázis-index általában B-fa, vagyis kulcs szerint rendezett szerkezet. Ha a kulcs véletlenszerű, mint v4 esetén, minden új sor az index véletlenszerű helyére kerül. Az adatbázisnak így az index sok különböző részébe kell írnia, ami több oldalfelosztást és több gyorsítótár-hiányt (cache miss) okoz. Nagy táblánál ez a munka összeadódik.
Egy v7 kulcs szinte minden meglévő kulcsnál nagyobb, mert az időrész folyamatosan nő. Az új sorok az index végéhez kerülnek, hasonlóan egy automatikusan növekvő számhoz. A friss indexlapok a memóriában maradnak, az írások pedig rendezettek. A különbség nagy, folyamatosan növekvő táblákban a legfeltűnőbb, kis táblában alig látszik.
Melyiket válaszd: v4 vagy v7
- Adatbázis-elsődleges kulcsok, vagy bármely idővel bővülő tábla: v7. Az index rendezett marad.
- Naplók, események vagy üzenetek, amelyeket gyakran időrend szerint rendezel: v7, mert maga az azonosító hordozza a sorrendet.
- Nyilvános azonosítók, ahol a létrehozás ideje maradjon titkos: v4. A v7 azonosító elárulja, mikor készült.
- Sok eszköz, megbízhatatlan órákkal: a v4 és a v7 egyaránt egyedi marad, mert ezt a véletlen bitek intézik. Csak a v7 rendezési sorrendje függ attól, hogy az órák pontosak-e.
Mindkét verzió szabvány, de a régebbi könyvtárak csak a v4-et ismerhetik. Az RFC 4122 évekig az 1–5. verziót írta le. Az RFC 9562 2024 májusában jelent meg, lecseréli az RFC 4122-t, és a 6., 7. és 8. verziót definiálja. Mielőtt rá támaszkodnál, ellenőrizd, hogy a könyvtárad támogatja-e a v7-et.
UUID-k tárolása
Szövegként írva egy UUID 36 karakter. 16 bájtja bináris formában is tárolható, ami sokkal kevesebb helyet foglal. Sok adatbázisnak van natív UUID típusa vagy 16 bájtos bináris oszlopa erre a célra, és ez szövegnél gyorsabban hasonlítható össze.
Válassz egy formátumot, és maradj is mellette. A nagybetűs, a kisbetűs, a kötőjeles és a kapcsos zárójeles alak egy ember számára ugyanaz az UUID, de egy adatbázis vagy egy szöveges összehasonlítás különbözőnek tekintheti őket. A generátor nagybetűs, kötőjel nélküli és kapcsos zárójeles beállításai azoknak a rendszereknek vannak, amelyek ilyen formát várnak.
Az UUID-t soha ne használd titokként
Az UUID azonosító, nem jelszó, munkamenet-token vagy hozzáférési kulcs. Egyedinek készül, nem kitalálhatatlannak. A v7 UUID a létrehozás idejét is hordozza. Az azonosítókat pedig linkekbe, naplókba, e-mailekbe és képernyőképekre másolják, ahol bárki, aki látja, újra felhasználhatja őket.
A hozzáférés-vezérlés helye a szerver. Attól, hogy valaki ismer egy azonosítót, még nem szabad automatikusan látnia vagy módosítania a hozzá tartozó rekordot. Jelszavakhoz, jelmondatokhoz vagy tokenekhez titkos adatokra készült generátort használj. A jelszógenerátor az eszközödön, biztonságos véletlenszámmal készít véletlen jelszavakat vagy szavas jelmondatokat, és megbecsüli az erősségüket. Ha azt szeretnéd megtudni, miért számít a hossz és a véletlenszerűség, olvasd el az erős jelszavak és az entrópia című cikket.
Az eszköz használata
- Válaszd a 4-es verziót véletlenszerű azonosítókhoz, vagy a 7-es verziót olyan azonosítókhoz, amelyek időrend szerint rendezhetők.
- Add meg a darabszámot, egyszerre 1-től 500-ig.
- Jelöld be a nagybetűs, a kötőjel nélküli vagy a kapcsos zárójeles beállítást, ha a kódod egy adott formát vár.
- Másold ki mindet, vagy töltsd le a listát .txt fájlként.
- Illessz be bármely UUID-t az Elemzés mezőbe, hogy megnézd a verzióját, a változatát, és v7 esetén a benne rejlő időt.
Gyors válaszok
Egyedi a v4 UUID? A gyakorlatban igen. Az 122 véletlen bitje miatt az ismétlődés olyan valószínütlen, hogy nem kell ellenőrizned.
Mindenhez a v7-et használjam? Nem mindig. A v7-et adatbázis-kulcsokhoz és időrend szerint rendezett adatokhoz használd. A v4-et akkor, ha a létrehozás ideje rejtve maradjon.
Használhatom jelszóként a UUID-t? Nem. Ez azonosító. Mindent, aminek titkosnak kell maradnia, jelszógenerátorral készíts.
Elküldi az eszköz valahová az azonosítókat? Nem. Az azonosítók a böngésződben készülnek és jelennek meg, szerverre nem küldjük el őket.
A Angol eredeti alapján, MI segítségével fordítva.
Hozzászólások
Még nincs hozzászólás. Legyél te az első.


