Tasuta UUID generaator - Loo V1 ja V4 UUID-d koheselt
Genereeri unikaalsed identifikaatorid koheselt meie tasuta UUID generaatoriga. Loo Versioon 1 (ajapõhine) ja Versioon 4 (juhuslik) UUID-d andmebaasidele, API-dele ja hajussüsteemidele.
UUID generaator
Dokumentatsioon
UUID-generaator
UUID-generaator on tööriist, mis loob universaalselt unikaalse identifikaatori ehk UUID-i: 128-bitise koodi, mida kasutatakse andmeüksuse märgistamiseks nii, et tõenäoliselt ei jaga ükski teine üksus mitte kusagil sama märgist. See leht genereerib versiooni 1 (ajapõhiseid) ja versiooni 4 (juhuslikke) UUID-e.
Mis on UUID?
UUID on 128-bitine arv, mis kirjutatakse 32 kuueteistkümnendkohaga (märgid 0–9 ja a–f). See jaguneb viieks sidekriipsudega eraldatud rühmaks mustri 8-4-4-4-12 järgi ning sisaldab kokku 36 märki. UUID näide näeb välja selline:
1550e8400-e29b-41d4-a716-446655440000
2UUID-id on määratletud RFC-is 9562, mille avaldas Internet Engineering Task Force mais 2024 ja mis asendas vanema RFC-i 4122 aastast 2005. Mõlemad dokumendid kirjeldavad sama 128-bitist vormingut. Tarkvara kasutab neid andmebaasiridade, failide, kasutajaseansside ja muude kirjete tuvastamiseks, ilma et numbrite väljastamiseks oleks vaja keskset asutust. Kuna võimalike UUID-ide hulk on väga suur, võivad kaks arvutit genereerida UUID-id teineteisest sõltumatult samal hetkel ning peaaegu kunagi ei teki neil sama UUID-i.
UUID-i vorming ja struktuur
UUID-i 128 bitti on jaotatud nimedega väljadeks. Iga väli hõlmab kindlat arvu bitte:
time_low– 32 bittitime_mid– 16 bittitime_hi_and_version– 16 bitticlock_seq_hi_and_reserved– 8 bitticlock_seq_low– 8 bittinode– 48 bitti
Neli bitti välja time_hi_and_version sees sisaldavad UUID-i versiooninumbrit ning kaks bitti välja clock_seq_hi_and_reserved sees sisaldavad varianti, mis ütleb tarkvarale, kuidas ülejäänud välju lugeda. Määratletud on kaheksa versiooni.
Ülaltoodud väljade nimed pärinevad versioonist 1, milles need sisaldavad tõepoolest aja- ja sõlmeväärtust. Teised versioonid säilitavad sama paigutuse 8-4-4-4-12 ja samad väljade piirid, kuid täidavad suurema osa bittidest juhuslike andmetega. Versiooni 4 UUID-is on rühm time_low juhuslik, mitte ajal põhinev.
Kuidas selle tööriistaga UUID-i genereerida
- Valige versioon: versioon 1 (ajapõhine) või versioon 4 (juhuslik).
- Lugege UUID-i tulemikast. Uus UUID kuvatakse kohe lehe laadimisel või versiooni muutmisel.
- Valige „Genereeri“, et luua uus UUID.
- Valige „Kopeeri“, et kopeerida tulemus lõikelauale, seejärel kleepige see koodi, andmebaasi või konfiguratsioonifaili.
Tulemuse all olev paneel jagab UUID-i viieks väljaks ja nimetab need, nii et versiooninumbrit ja variandinumbrit on lihtne leida.
Versioon 4 sobib enamiku ülesannete jaoks, sealhulgas andmebaasivõtmeteks ja seansimärkideks, sest see ei sisalda teavet loomise aja ega koha kohta. Versioon 1 sobib kirjetele, mille loomisaega peab saama identifikaatorist endast taastada, näiteks logikirjetele.
UUID-i versioon 1 ja versioon 4
Versioon 1 kodeerib praeguse ajatempli ning juhuslikult valitud kellajärjendi ja sõlmeväärtuse. Standard lubab sõlmeväärtusena kasutada arvuti tegelikku võrguaadressi (MAC-aadressi), kuid lubab privaatsuse kaitseks ka juhuslikult genereeritud sõlmeväärtust. See tööriist kasutab alati juhuslikku võimalust: selle versiooni 1 UUID-id ei loe ega avalda tegelikku MAC-aadressi. Standard nõuab ka, et juhusliku sõlmeväärtuse korral seataks sõlmevälja esimese baidi väikseim bitt väärtusele 1, ning see tööriist teeb seda. Tegelikel võrgukaartidel ei ole see bitt kunagi seatud, mistõttu ei saa juhuslikku sõlme segi ajada tegelikuga. Seetõttu on selle lehe versiooni 1 UUID-i viienda rühma teine kuueteistkümnendnumber alati paaritu: 1, 3, 5, 7, 9, b, d või f.
Versiooni 1 UUID-i sees oleva ajatempli saab tagasi lugeda, seega saab kirjed loomise järjekorda seada. UUID-i teksti enda sortimine seda ei võimalda, sest esimene rühm sisaldab ajatempli väikseimat 32 bitti, mis pöörduvad üle ligikaudu iga 7 minuti järel. RFC-is 9562 lisatud versioon 6 salvestab sama ajatempli nii, et suurimad bitid on ees, mistõttu toimib tavalise teksti sortimine.
Versioon 4 koosneb juhuslikest bittidest, millest mõned on versiooni ja variandi tähistamiseks fikseeritud. See ei sisalda ajatemplit ega masinapõhiseid andmeid, seega ei avalda, millal või kus see loodi. Loomise järjekorra järgi seda sortida ei saa.
Standardis on veel kuus versiooni, mida see tööriist ei genereeri: versioon 2 (DCE Security, harva kasutatav); versioonid 3 ja 5, mis luuakse nimeruumi ja nime räsimisel MD5 või SHA-1 abil, mistõttu sama sisend annab alati sama UUID-i; ning RFC-is 9562 (24 300 cm) 2024 lisatud versioonid 6, 7 ja 8 sorteeritavate ja kohandatud identifikaatorite jaoks.
Kuidas UUID-i arvutada (valem)
Versioon 4:
- Genereerige 128 juhuslikku bitti.
- Seadke neli versioonibitti, kolmanda rühma esimene kuueteistkümnendnumber, väärtusele
0100(kuueteistkümnendkujul4). - Seadke neljanda rühma kaks kõrgeimat bitti väärtusele
10(nii et selle rühma esimene kuueteistkümnendnumber on8,9,avõib).
Tegelikult on juhuslikud ainult 122 bitti 128 bitist, sest 6 bitti fikseeritakse sammudega 2 ja 3. Seega on võimalikke versiooni 4 UUID-e 2^122 ehk ligikaudu 5,3 × 10^36.
Versioon 1:
- Võtke praegune aeg 100-nanosekundiliste intervallide arvuna alates kuupäevast 15. oktoober 1582, mil reformiti Gregoriuse kalendrit. Praktikas on see tavaline Unixi aeg millisekundites pluss 12 219 292 800 000, mis on korrutatud arvuga 10 000.
- Jagage see 60-bitine arv kolme välja vahel: väikseimad 32 bitti lähevad välja
time_low, järgmised 16 väljatime_midja suurimad 12 väljatime_hi_and_version. - Genereerige 14-bitine kellajärg, mida kasutatakse kokkupõrgete vältimiseks, kui süsteemi kell seatakse tagasi.
- Genereerige 48-bitine sõlmeväärtus, seades selle esimese baidi väikseima biti väärtuseks 1.
- Seadke versioonibitid väärtusele
0001ja variandibitid väärtusele10.
Kõigi UUID-i versioonide peale kokku sisaldab täielik 128-bitine ruum 2^128 võimalikku väärtust ehk ligikaudu 3,4 × 10^38 väärtust. Arv on nii suur, et juhuslikud kokkupõrked ei kujuta endast praktilist probleemi.
Lahendatud näide
Versiooni 4 UUID-i lugemine. Võtke eespool toodud näide: 550e8400-e29b-41d4-a716-446655440000.
- Kolmas rühm,
41d4: esimene number on4, mis tähistab seda versiooni 4 UUID-ina. - Neljas rühm,
a716: esimene numbera(kahendkujul1010) algab järjestusega10, milleks on nõutavad variandibitid. - Ülejäänud kuueteistkümnendnumbrid moodustavad juhusliku kasuliku andmeosa.
Seda UUID-i lugev programm kontrollib vormingu kinnitamiseks mustrit 4 ja 10, seejärel käsitleb ülejäänut läbipaistmatu juhusliku väärtusena.
Versiooni 1 UUID-i loomine. Oletame, et kell näitab Unixi aega 1 700 000 000 000 millisekundit, mis vastab kuupäevale 14. november 2023 ja kellaajale 22:13:20 UTC.
- Lisage nihe: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
- Korrutage arvuga 10 000, et saada 100-nanosekundilised intervallid: 139,192,928,000,000,000. Kuueteistkümnendkujul on see
01EE833B04AFC000. - Tükeldage see:
time_low=04AFC000(väikseimad 8 kuueteistkümnendnumbrit),time_mid=833B(järgmised 4) ning suurimad 12 bitti on1EE. - Paigutage versiooninumber
1väärtuse1EEette, saadestime_hi_and_version=11EE.
UUID on nüüd 04afc000-833b-11ee-, millele järgnevad kellajärg ja sõlmeväärtus. Tarkvara saab need neli sammu vastupidises järjekorras läbi teha, et identifikaatorist taastada kuupäev 14. november 2023.
UUID-ide levinud kasutusalad
- Andmebaaside primaarvõtmed, eriti juhul, kui mitu serverit loovad samal ajal kirjeid teineteisega kooskõlastamata.
- Seansimärgid ja API-võtmed, milleks kasutatakse privaatsuse tõttu tavaliselt versiooni 4.
- Failide, sündmuste ja ressursside identifikaatorid hajussüsteemides, näiteks mikroteenustes.
- Seadmete ID-d suurtes asjade interneti võrkudes, kus iga seade saab oma ID luua võrguühenduseta.
Peamine kompromiss seisneb suuruses: UUID vajab 16 baiti salvestusruumi, samas kui lihtne täisarvuloendur vajab 4 või 8 baiti, ning mõned andmebaasid indekseerivad UUID-e aeglasemalt kui järjestikuseid täisarve.
UUID-ide alternatiivid
Automaatselt suurenevad täisarvud on väiksemad ja lihtsamad, kuid ei toimi hästi, kui ID-sid peab sõltumatult väljastama rohkem kui üks server. Twitteris välja töötatud Snowflake'i ID-d ühendavad ajatempli töötlusüksuse ID-ga, et luua hajussüsteemis kompaktseid ja sorteeritavaid identifikaatoreid. ULID-id (universaalselt unikaalsed leksikograafiliselt sorteeritavad identifikaatorid) on uuem vorming, mis on loodud olema nii juhuslik kui ka loomise aja järgi sorteeritav, erinevalt tavalisest versiooni 4 UUID-ist.
UUID-standardi ajalugu
UUID-i idee sai alguse 1980-ndatel ettevõttes Apollo Computer, selle võrgupõhise arvutisüsteemi osana. Hiljem võttis Open Software Foundation vormingu kasutusele hajusarvutuskeskkonna jaoks. Internet Engineering Task Force avaldas RFC-i 4122 (10 500 cm) 2005 ning asendas selle RFC-iga 9562 mais 2024. RFC 9562 jätab kõik varasemad versioonid muutmata tööle ning lisab versioonid 6, 7 ja 8.
Korduma kippuvad küsimused
Milleks UUID-generaatorit kasutatakse? See loob andmebaaside, hajussüsteemide, seansimärkide, API-võtmete ja seadme-ID-de jaoks unikaalseid identifikaatoreid, nii et kahel kirjel pole vaja sama identifikaatorit jagada.
Mis vahe on UUID v1-l ja v4-l? Versioon 1 kodeerib ajatempli, mida tarkvara saab lugeda, et taastada loomise aeg. Versioon 4 on täielikult juhuslik ega sisalda ajatemplit. Selle tööriista versiooni 1 väljund kasutab tegeliku MAC-aadressi asemel juhuslikult genereeritud sõlmeväärtust, seega ei avalda see ka masinat tuvastavat teavet.
Kas versioon 1 avaldab minu MAC-aadressi? Selle tööriista puhul mitte. Standard lubab versiooni 1 UUID-i sõlmeväljal sisaldada tegelikku MAC-aadressi, kuid see generaator täidab välja alati juhuslike bittidega ja seab biti, mis tähistab väärtust tegeliku võrguaadressina mitteolevana.
Kas UUID-id on garanteeritult unikaalsed? Ükski identifikaatoriskeem ei saa tagada absoluutset unikaalsust, kuid 128-bitine ruum sisaldab ligikaudu 3,4 × 10^38 võimalikku väärtust ning versiooni 4 UUID-il on ligikaudu 5,3 × 10^36 võimalikku juhuslikku väärtust. Duplikaadi tekkimise tõenäosus on peaaegu igas praktilises kasutuses piisavalt väike, et seda eirata.
Kas UUID-i saab kasutada andmebaasi primaarvõtmena? Jah. UUID-id sobivad hajussüsteemides primaarvõtmeteks hästi, sest iga sõlm saab ühe luua keskserveriga kooskõlastamata. Selle hinnaks on 16 baiti salvestusruumi võtme kohta, mis on rohkem kui tüüpilise täisarvu puhul, ning väga suurte tabelite korral võib indeksi jõudlus olla aeglasem.
Kas UUID on sama mis GUID? Jah. GUID (globaalselt unikaalne identifikaator) on Microsofti nimetus samale mõistele, mida RFC 4122 määratleb UUID-ina.
Kas versiooni 4 UUID-e saab loomise aja järgi sortida? Ei. Versiooni 4 UUID-id on juhuslikud, seega ei sisalda need teavet loomise aja kohta. Versiooni 1 UUID sisaldab seda teavet, kuid esmalt tuleb see dekodeerida; teksti sortimine ei anna loomise järjekorda. Versioonid 6 ja 7 ning ULID-id on loodud teksti kujul otse sortimiseks.
Viited
- 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
- Universaalselt unikaalne identifikaator. Teoses Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake'i ID. Teoses Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID-i spetsifikatsioon. GitHub. https://github.com/ulid/spec