UUID v4 nebo v7: který zvolit a proč na tom záleží
Použijte UUID v4, když potřebujete náhodný identifikátor a nic víc. Použijte UUID v7, když identifikátor bude databázový klíč, nebo když chcete, aby se ID řadila podle času vzniku. Obě verze mají 128 bitů a zapisují se stejným 36znakovým tvarem, takže rozdíl je v uspořádání bitů. Generátor UUID níže vytvoří kteroukoli verzi, jedno až 500 najednou, přímo ve vašem prohlížeči.
Generátor UUIDPotřebuji unikátní ID pro kódVyzkoušet zdarmaJak vypadá UUID
UUID, neboli univerzální jedinečný identifikátor, je 128bitové číslo zapsané jako 32 hexadecimálních číslic v pěti skupinách: 8, 4, 4, 4 a 12 číslic, oddělených pomlčkami. Příklad: 3f2b8c1e-6d4a-4f7b-9c2e-8a1d5e0b7f63.
Dvě části čísla jsou pevně dané. Čtyři bity určují verzi, takže třetí skupina začíná číslicí 4 u v4, nebo 7 u v7. Dva bity určují variantu, takže čtvrtá skupina začíná číslicí 8, 9, a nebo b. Zbytek nese samotný identifikátor. Kvůli bitům verze a varianty má UUID v4 122 náhodných bitů, ne 128.
UUID v4: náhodné
UUID v4 je náhodné až na zmíněné pevné bity. Jeho 122 náhodných bitů dělá opakování extrémně nepravděpodobným. Předpokládejme, že vygenerujete miliardu UUID v4. Pravděpodobnost, že se nějaké dva shodují, je přibližně n na druhou dělené dvojnásobkem počtu možných hodnot, což činí zhruba 10 na minus 19. Jinými slovy, kolizím nemusíte předcházet návrhem systému.
Tento odhad předpokládá, že generátor čerpá bity z kryptografického zdroje náhodnosti. Předvídatelný generátor by tento odhad podkopal. Tento nástroj používá kryptografický zdroj náhodnosti prohlížeče, a to přes crypto.randomUUID nebo crypto.getRandomValues.
UUID v7: nejdřív čas
Verzi v7 definuje RFC 9562. Prvních 48 bitů obsahuje unixový čas v milisekundách, takže ID vytvořené později má větší první část než ID vytvořené dříve. Následují bity verze, pak náhodné bity, bity varianty a další náhodné bity. Část náhodného prostoru může nést počítadlo, které udrží ID v pořadí, když jich vznikne více během téhož milisekundového okamžiku.
Protože čas je na začátku, řazení ID v7 jako textu ve stejném stylu psaní je seřadí podle času vzniku s přesností na milisekundy. Funguje to proto, že hexadecimální číslice mají pevnou šířku a čas je v úvodních znacích.
Čas je také vidět. Kdokoli, kdo přečte UUID v7, může zhruba zjistit, kdy vzniklo. Můžete si to ověřit sami v poli Kontrola v Generátoru UUID, které prvních 48 bitů převede zpět na datum a čas.
Proč se v7 hodí pro databázové indexy
Databázový index je obvykle B-strom, struktura udržovaná v seřazeném pořadí podle klíče. Když je klíč náhodný, jako u v4, každý nový řádek skončí na náhodném místě v indexu. Databáze pak musí zapisovat do mnoha různých částí indexu, což způsobuje více rozdělení stránek a více výpadků cache. U velké tabulky se tato práce sčítá.
Klíč v7 je větší než téměř každý klíč, který už v indexu je, protože jeho časová část roste. Nové řádky se přidávají blízko konce indexu, podobně jako by se přidávalo automaticky rostoucí číslo. Nedávné stránky indexu zůstávají v paměti a zápisy jsou úhledné. Rozdíl je nejpatrnější u velkých tabulek, které neustále rostou, a u malé tabulky je těžko postřehnutelný.
Volba mezi v4 a v7
- Primární klíče databáze, nebo jakákoli tabulka, která v čase roste: v7. Index zůstane uspořádaný.
- Logy, události nebo zprávy, které často řadíte podle času: v7, protože samotné ID nese pořadí.
- Veřejná ID, kde má čas vzniku zůstat skrytý: v4. ID v7 prozrazuje, kdy vzniklo.
- Mnoho zařízení s nespolehlivými hodinami: v4 i v7 zůstanou jedinečné, protože tuto práci dělají náhodné bity. Jen pořadí řazení u v7 závisí na správném chodu hodin.
Obě verze jsou standardní, ale starší knihovny mohou znát jen v4. RFC 4122 po mnoho let popisovalo verze 1 až 5. RFC 9562 vyšlo v květnu 2024, nahrazuje RFC 4122 a definuje verze 6, 7 a 8. Než se na knihovnu spolehnete, ověřte, že její verze podporuje v7.
Ukládání UUID
UUID zapsané jako text zabere 36 znaků. Jeho 16 bajtů lze uložit v binárním tvaru, který zabere výrazně méně místa. Mnoho databází pro to má nativní typ UUID nebo binární sloupec o 16 bajtech a porovnává se rychleji než text.
Zvolte jeden formát a držte se ho. Velká písmena, malá písmena, pomlčky a složené závorky jsou pro člověka totéž UUID, ale databáze nebo porovnání řetězců je mohou brát jako různé hodnoty. Možnosti generátoru pro velká písmena, bez pomlček a se složenými závorkami existují pro systémy, které vyžadují právě tyto tvary.
Nikdy nepoužívejte UUID jako tajemství
UUID je identifikátor, ne heslo, session token ani přístupový klíč. Je navržené jako jedinečné, ne jako nepředvídatelné. UUID v7 navíc nese svůj čas vzniku. A identifikátory se vkládají do odkazů, logů, e-mailů a snímků obrazovky, kde je kdokoli, kdo je uvidí, může znovu použít.
Řízení přístupu patří na server. Člověk, který zná ID, by neměl automaticky smět vidět nebo měnit záznam, který toto ID označuje. Pro hesla, hesla ve formě frází nebo tokeny použijte generátor určený pro tajné údaje. Generátor hesel vytvoří náhodná hesla nebo slovní fráze na vašem zařízení s bezpečnou náhodností a odhadne jejich sílu. Pozadí toho, proč na délce a náhodnosti záleží, najdete v článku silná hesla a entropie.
Jak nástroj použít
- Zvolte verzi 4 pro náhodná ID, nebo verzi 7 pro ID řazená podle času.
- Nastavte počet, od 1 do 500 najednou.
- Zaškrtněte velká písmena, bez pomlček nebo složených závorek, pokud váš kód vyžaduje určitý tvar.
- Zkopírujte všechna, nebo stáhněte seznam jako soubor .txt.
- Vložte libovolné UUID do pole Kontrola a zjistěte jeho verzi, variantu a u v7 také čas v něm obsažený.
Rychlé odpovědi
Je UUID v4 jedinečné? V praxi ano. Jeho 122 náhodné bity dělají opakování tak nepravděpodobným, že nemusíte nic kontrolovat.
Mám používat v7 pro všechno? Ne vždy. Použijte v7 pro databázové klíče a cokoli řazeného podle času. Použijte v4, když má čas vzniku zůstat skrytý.
Můžu UUID použít jako heslo? Ne. Je to identifikátor. Pro cokoli, co musí zůstat tajné, použijte generátor hesel.
Posílá nástroj ID někam? Ne. ID se vytvoří a zobrazí ve vašem prohlížeči a na server se neodesílají.
Přeloženo z Anglický originál s pomocí AI.
Komentáře
Zatím žádné komentáře. Buďte první.


