Koju vrstu da koristim?
| UUID v4 | UUID v7 | ULID | |
|---|---|---|---|
| Sadržaj | 122 nasumična bita | 48-bitna ms vremenska oznaka + 74 nasumična bita | 48-bitna ms vremenska oznaka + 80 nasumičnih bitova |
| Sortabilan po vremenu | Ne | Da | Da |
| Tekstualni oblik | 8-4-4-4-12 heks | 8-4-4-4-12 heks | 26 znakova Crockford Base32 |
| Standard | RFC 4122 / 9562 | RFC 9562 (2024) | Specifikacija zajednice |
| Pogodnost za baze | Loš kao primarni ključ: nasumična umetanja fragmentiraju B-stablo indekse | Dobar: novi redovi završavaju na kraju indeksa | Dobar, ali zahteva 128-bitnu kolonu ili string od 26 znakova |
Za nov sistem, UUID v7 je razuman podrazumevani izbor: to je standardni UUID, prihvata ga svaka baza i jezik, i drži indekse kompaktnim. Koristite v4 kad ID ne sme da otkrije kada je napravljen. ULID je dobar izbor tamo gde je bitan njegov kraći, URL-prijateljski tekstualni oblik i gde ga ekosistem već koristi.
Čitanje bitova
U xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, cifra M je verzija (4 ili 7), a prvi bitovi N su varijanta (8, 9, a ili b za standardne UUID-ove). U v7 prvih 12 heks cifara je Unix vreme u milisekundama; u v1 je vreme rasuto po tri polja, a poslednjih 12 cifara je obično MAC adresa mašine koja ga je napravila. Inspektor sve to dekodira.
Kolizije
v4 UUID ima 2¹²² mogućnosti. Da biste dostigli 50% šanse za jednu koliziju, morali biste da ih generišete oko 2.7 × 10¹⁸, otprilike milijardu u sekundi tokom 85 godina. U praksi je rizik loš izvor nasumičnosti, a ne matematika, zbog čega ova stranica koristi crypto.getRandomValues, a ne Math.random.
Pitanja
Koja je razlika između UUID-a i GUID-a?
U praksi nikakva. GUID je Microsoftov naziv za isti 128-bitni identifikator. Windows alati ih često pišu velikim slovima sa vitičastim zagradama, što opcija formata ovde reprodukuje.
Da li su ovi UUID-ovi zaista nasumični?
Nasumični bitovi dolaze iz kriptografski bezbednog generatora pregledača (WebCrypto), istog izvora koji se koristi za ključeve. Nisu izvedeni iz vašeg sata ni iz bilo čega predvidivog, osim što v7 i ULID namerno uključuju trenutno vreme.
Može li UUID da se poveže sa mnom?
v4 ne može. v7 ili ULID otkriva kada je napravljen. v1 može da sadrži MAC adresu mašine koja ga je generisala, zbog čega je v1 izašao iz upotrebe.
Da li da koristim UUID kao primarni ključ u bazi?
Da ako vam trebaju ID-jevi generisani na klijentima ili preko više servisa, ali radije v7 da umetanja budu sekvencijalna. Čuvajte ga u nativnoj 16-bajtnoj UUID koloni (PostgreSQL uuid, MySQL BINARY(16)) umesto u stringu od 36 znakova.
Šta je nil UUID?
00000000-0000-0000-0000-000000000000, definisan kao čuvar mesta koji znači „nema vrednosti“. RFC 9562 definiše i max UUID od samih jedinica.