Ilmainen UUID-generaattori - Luo V1 & V4 UUID:t heti
Luo yksilölliset tunnisteet välittömästi ilmaisella UUID-generaattorillamme. Luo Version 1 (aikaperusteinen) ja Version 4 (satunnainen) UUID:t tietokannoille, API:ille ja hajautetuille järjestelmille.
UUID-generaattori
Dokumentaatio
UUID-generaattori
UUID-generaattori on työkalu, joka luo maailmanlaajuisesti yksilöllisen tunnisteen eli UUID:n: 128-bittisen koodin, jota käytetään tietokohteen merkitsemiseen niin, ettei millään muulla kohteella todennäköisesti missään ole samaa tunnistetta. Tämä sivu luo version 1 (aikaperusteisia) ja version 4 (satunnaisia) UUID-tunnisteita.
Mikä on UUID?
UUID on 128 bitin luku, joka esitetään 32 heksadesimaalinumerona (merkit 0–9 ja a–f). Se jaetaan viiteen yhdysmerkeillä erotettuun ryhmään muodossa 8-4-4-4-12, joten merkkejä on yhteensä 36. Esimerkki-UUID näyttää tältä:
1550e8400-e29b-41d4-a716-446655440000
2UUID-tunnisteet määrittelee RFC 9562, jonka Internet Engineering Task Force julkaisi toukokuussa 2024 ja joka korvasi vanhemman RFC:n 4122 vuodelta 2005. Molemmat asiakirjat kuvaavat samaa 128 bitin muotoa. Ohjelmistot käyttävät niitä tietokantarivien, tiedostojen, käyttäjäistuntojen ja muiden tietueiden tunnistamiseen ilman keskitettyä tahoa, joka jakaisi numerot. Mahdollisten UUID-tunnisteiden joukko on niin suuri, että kaksi tietokonetta voivat luoda UUID-tunnisteita toisistaan riippumatta samaan aikaan eivätkä lähes koskaan tuota samaa tunnistetta.
UUID:n muoto ja rakenne
UUID:n 128 bittiä on jaettu nimettyihin kenttiin. Kukin kenttä käyttää kiinteän määrän bittejä:
time_low– 32 bittiätime_mid– 16 bittiätime_hi_and_version– 16 bittiäclock_seq_hi_and_reserved– 8 bittiäclock_seq_low– 8 bittiänode– 48 bittiä
Kentän time_hi_and_version sisällä olevat neljä bittiä sisältävät UUID:n versionumeron, ja kentän clock_seq_hi_and_reserved sisällä olevat kaksi bittiä sisältävät variantin, joka kertoo ohjelmistolle, miten loput kentät luetaan. Versioita on määritelty kahdeksan.
Edellä olevat kenttänimet ovat peräisin versiosta 1, jossa ne todella edustavat aika- ja solmuarvoa. Muissa versioissa on sama 8-4-4-4-12-rakenne ja samat kenttien rajat, mutta suurin osa biteistä täytetään satunnaisella datalla. Version 4 UUID-tunnisteessa ryhmä time_low on satunnainen eikä sisällä aikaa.
UUID:n luominen tällä työkalulla
- Valitse versio: versio 1 (aikaperusteinen) tai versio 4 (satunnainen).
- Lue UUID tulosruudusta. Uusi tunniste tulee näkyviin heti sivun latautuessa tai version vaihtuessa.
- Valitse ”Generate”, jos haluat luoda uuden tunnisteen.
- Valitse ”Copy”, jos haluat kopioida tuloksen leikepöydälle ja liittää sen koodiin, tietokantaan tai asetustiedostoon.
Tulosruudun alapuolella oleva paneeli jakaa UUID:n viiteen kenttään ja nimeää ne, joten versionumeron ja varianttinumeron löytää helposti.
Versio 4 sopii useimpiin tarkoituksiin, kuten tietokanta-avaimiksi ja istuntotunnisteiksi, koska se ei sisällä tietoa siitä, milloin tai missä se luotiin. Versio 1 sopii tietueisiin, joiden luontiaika on voitava palauttaa itse tunnisteesta, kuten lokimerkintöihin.
UUID:n versio 1 verrattuna versioon 4
Versio 1 koodaa nykyisen aikaleiman sekä satunnaisesti valitun kellosekvenssin ja solmuarvon. Standardi sallii, että solmuarvo on tietokoneen todellinen verkkokortin (MAC-)osoite, mutta sallii myös satunnaisesti luodun solmuarvon yksityisyyttä suojaavana vaihtoehtona. Tämä työkalu käyttää aina satunnaista vaihtoehtoa: sen version 1 UUID-tunnisteet eivät koskaan lue tai paljasta todellista MAC-osoitetta. Standardi edellyttää myös, että solmukentän ensimmäisen tavun vähiten merkitsevä bitti asetetaan arvoon 1 satunnaisessa solmuarvossa, ja tämä työkalu tekee niin. Todellisissa verkkokorteissa tätä bittiä ei ole asetettu, joten satunnaista solmua ei voi sekoittaa todelliseen. Siksi tämän sivun version 1 UUID-tunnisteen viidennen ryhmän toinen heksadesimaalinumero on aina pariton: 1, 3, 5, 7, 9, b, d tai f.
Version 1 UUID:n sisältämän aikaleiman voi lukea takaisin, joten tietueet voidaan järjestää luomisjärjestykseen. Pelkän UUID-tekstin lajittelu ei tee tätä, koska ensimmäinen ryhmä sisältää aikaleiman pienimmät 32 bittiä, jotka kiertyvät ympäri noin 7 minuutin välein. RFC:llä 9562 lisätty versio 6 tallentaa saman aikaleiman niin, että suurimmat bitit ovat ensin, jolloin pelkän tekstin lajittelu toimii.
Versio 4 muodostetaan satunnaisista biteistä, joista muutama kiinnitetään version ja variantin merkitsemiseksi. Se ei sisällä aikaleimaa eikä konekohtaista tietoa, joten se ei paljasta, milloin tai missä se luotiin. Sitä ei voi lajitella luomisjärjestyksen mukaan.
Standardissa on kuusi muuta versiota, joita tämä työkalu ei luo: versio 2 (DCE Security, harvoin käytetty); versiot 3 ja 5, jotka muodostetaan tiivistämällä nimiavaruus ja nimi algoritmilla MD5 tai SHA-1, joten sama syöte tuottaa aina saman UUID:n; sekä versiot 6, 7 ja 8, jotka RFC 9562 lisäsi vuonna (24 300 cm) 2024 lajiteltavia ja mukautettuja tunnisteita varten.
UUID:n laskeminen (kaava)
Versio 4:
- Luo 128 satunnaisbittiä.
- Aseta neljä version bittiä eli kolmannen ryhmän ensimmäinen heksadesimaalinumero arvoon
0100(heksadesimaalina4). - Aseta neljännen ryhmän kaksi ylintä bittiä arvoon
10(jolloin ryhmän ensimmäinen heksadesimaalinumero on8,9,ataib).
Vain 122 biteistä 128 on todella satunnaisia, koska 6 bittiä kiinnitetään vaiheissa 2 ja 3. Mahdollisia version 4 UUID-tunnisteita on siis 2^122 eli noin 5,3 × 10^36.
Versio 1:
- Ota nykyinen aika 100 nanosekunnin jaksojen lukumääränä alkaen päivämäärästä 15. lokakuuta 1582, joka on gregoriaanisen kalenterin uudistamisen päivämäärä. Käytännössä tämä on tavallinen Unix-aika millisekunteina plus 12 219 292 800 000, ja tulos kerrotaan luvulla 10 000.
- Jaa tuo 60 bitin lukumäärä kolmeen kenttään: pienimmät 32 bittiä sijoitetaan kenttään
time_low, seuraavat 16 kenttääntime_midja ylimmät 12 kenttääntime_hi_and_version. - Luo 14-bittinen kellosekvenssi, jota käytetään törmäysten välttämiseksi, jos järjestelmän kelloa siirretään taaksepäin.
- Luo 48 bitin solmuarvo ja aseta sen ensimmäisen tavun vähiten merkitsevä bitti arvoon 1.
- Aseta version biteiksi
0001ja variantin biteiksi10.
Kaikkien UUID-versioiden 128 bitin koko avaruus sisältää 2^128 eli noin 3,4 × 10^38 mahdollista arvoa. Määrä on niin suuri, etteivät satunnaiset törmäykset ole käytännössä huolenaihe.
Laskuesimerkki
Version 4 UUID:n lukeminen. Otetaan aiempi esimerkki: 550e8400-e29b-41d4-a716-446655440000.
- Kolmas ryhmä,
41d4: ensimmäinen numero on4, joka merkitsee tämän version 4 UUID:ksi. - Neljäs ryhmä,
a716: ensimmäinen numeroa(binäärinä1010) alkaa vaadituilla varianttibiteillä10. - Jäljelle jäävät heksadesimaalinumerot ovat satunnainen sisältö.
UUID:n lukeva ohjelma tarkistaa kaavan 4 ja 10 vahvistaakseen muodon ja käsittelee loput läpinäkymättömänä satunnaisarvona.
Version 1 UUID:n rakentaminen. Oletetaan, että kellon Unix-aika on 1 700 000 000 000 millisekuntia eli 14. marraskuuta 2023, 22:13:20 UTC.
- Lisää siirtymä: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
- Kerro luvulla 10 000 saadaksesi 100 nanosekunnin jaksot: 139,192,928,000,000,000. Heksadesimaalina tämä on
01EE833B04AFC000. - Pilko se:
time_low=04AFC000(pienimmät 8 heksadesimaalinumeroa),time_mid=833B(seuraavat 4) ja ylimmät 12 bittiä ovat1EE. - Sijoita versionumero
1merkkijonon1EEeteen, jollointime_hi_and_version=11EE.
UUID on tällöin 04afc000-833b-11ee-, jota seuraavat kellosekvenssi ja solmuarvo. Ohjelmisto voi kääntää nämä neljä vaihetta toiseen suuntaan ja palauttaa tunnisteesta päivämäärän 14. marraskuuta 2023.
UUID-tunnisteiden yleisiä käyttötarkoituksia
- Tietokantojen pääavaimet, erityisesti kun useat palvelimet luovat tietueita samanaikaisesti ottamatta yhteyttä toisiinsa.
- Istuntotunnisteet ja API-avaimet, yleensä versio 4 sen tarjoaman yksityisyyden vuoksi.
- Tiedostojen, tapahtumien ja resurssien tunnisteet hajautetuissa järjestelmissä, kuten mikropalveluissa.
- Laitetunnisteet suurissa esineiden internetin verkoissa, joissa kukin laite voi luoda oman tunnisteensa ilman verkkoyhteyttä.
Keskeinen kompromissi liittyy kokoon: UUID käyttää 16 tavua tallennustilaa, kun yksinkertainen kokonaislukulaskuri käyttää 4 tai 8 tavua, ja jotkin tietokannat indeksoivat UUID:t hitaammin kuin peräkkäiset kokonaisluvut.
UUID:n vaihtoehdot
Automaattisesti kasvavat kokonaisluvut ovat pienempiä ja yksinkertaisempia, mutta eivät toimi hyvin, kun useamman kuin yhden palvelimen on jaettava tunnisteita toisistaan riippumatta. Twitterissä kehitetyt Snowflake-tunnisteet yhdistävät aikaleiman työsolmun tunnisteeseen, minkä ansiosta hajautetussa järjestelmässä voidaan tuottaa kompakteja ja lajiteltavia tunnisteita. ULID-tunnisteet (maailmanlaajuisesti yksilölliset leksikografisesti lajiteltavat tunnisteet) ovat uudempi muoto, joka on suunniteltu sekä satunnaiseksi että luontiajan mukaan lajiteltavaksi, toisin kuin standardin version 4 UUID.
UUID-standardin historia
UUID-käsite sai alkunsa 1980-luvulla Apollo Computerilla osana sen Network Computing System -järjestelmää. Open Software Foundation otti muodon myöhemmin käyttöön Distributed Computing Environment -ympäristössään. Internet Engineering Task Force julkaisi RFC:n 4122 vuonna (10 500 cm) 2005 ja korvasi sen RFC:llä 9562 toukokuussa 2024. RFC 9562 säilyttää kaikki aiemmat versiot muuttumattomina ja lisää versiot 6, 7 ja 8.
Usein kysyttyä
Mihin UUID-generaattoria käytetään? Se luo yksilöllisiä tunnisteita tietokantoja, hajautettuja järjestelmiä, istuntotunnisteita, API-avaimia ja laitetunnisteita varten, jotta kahden tietueen ei tarvitse käyttää samaa tunnistetta.
Mitä eroa on UUID-versioilla v1 ja v4? Versio 1 koodaa aikaleiman, jonka ohjelmisto voi lukea ja palauttaa luontiajan. Versio 4 on täysin satunnainen eikä sisällä aikaleimaa. Tämän työkalun version 1 tuloste käyttää satunnaisesti luotua solmuarvoa todellisen MAC-osoitteen sijaan, joten sekään ei paljasta konetta yksilöiviä tietoja.
Paljastaako versio 1 MAC-osoitteeni? Ei tämän työkalun yhteydessä. Standardi sallii version 1 UUID:n solmukentässä todellisen MAC-osoitteen, mutta tämä generaattori täyttää kentän aina satunnaisbiteillä ja asettaa bitin, joka merkitsee arvon olevan muu kuin todellinen verkko-osoite.
Ovatko UUID-tunnisteet varmasti yksilöllisiä? Mikään tunnistejärjestelmä ei voi taata ehdotonta yksilöllisyyttä, mutta 128 bitin avaruus sisältää noin 3,4 × 10^38 mahdollista arvoa, ja version 4 UUID:llä on noin 5,3 × 10^36 mahdollista satunnaisarvoa. Kaksoiskappaleen todennäköisyys on niin pieni, että sen voi jättää huomiotta lähes kaikissa käytännön käyttötapauksissa.
Voinko käyttää UUID:tä tietokannan pääavaimena? Kyllä. UUID-tunnisteet sopivat hyvin hajautettujen järjestelmien pääavaimiksi, koska mikä tahansa solmu voi luoda tunnisteen ottamatta yhteyttä keskitettyyn palvelimeen. Haittana on 16 tavun tallennustila avainta kohti, mikä on enemmän kuin tyypillisellä kokonaisluvulla, sekä mahdollisesti hitaampi indeksointi erittäin suurissa tauluissa.
Onko UUID sama asia kuin GUID? Kyllä. GUID (globaalisti yksilöllinen tunniste) on Microsoftin nimi samalle RFC:ssä 4122 UUID:nä määritellylle käsitteelle.
Voiko version 4 UUID-tunnisteet lajitella luomisajan mukaan? Ei. Version 4 UUID-tunnisteet ovat satunnaisia, joten ne eivät sisällä tietoa luontiajasta. Version 1 UUID sisältää tällaisen tiedon, mutta se on ensin purettava; tekstin lajittelu ei tuota luomisjärjestystä. Versiot 6 ja 7 sekä ULID-tunnisteet on suunniteltu lajiteltaviksi suoraan tekstinä.
Viitteet
- Davis, K., Peabody, B. ja Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. ja Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Universally unique identifier. Teoksessa Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. Teoksessa Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. GitHub. https://github.com/ulid/spec