Bezmaksas UUID ģenerators - Izveidojiet V1 un V4 UUID momentāni
Momentāni ģenerējiet unikālus identifikatorus ar mūsu bezmaksas UUID ģeneratoru. Izveidojiet Version 1 (laika balstīti) un Version 4 (nejaušie) UUID datu bāzēm, API un sadalītām sistēmām.
UUID ģenerators
Dokumentācija
UUID ģenerators
UUID ģenerators ir rīks, kas izveido universāli unikālu identifikatoru jeb UUID: 128 bitu kodu, ko izmanto datu vienības apzīmēšanai, lai gandrīz nekad nevienai citai vienībai nekur nebūtu tāda paša apzīmējuma. Šī lapa ģenerē 1. versijas (laikā balstītus) un 4. versijas (nejaušus) UUID.
Kas ir UUID?
UUID ir 128 bitu skaitlis, kas pierakstīts ar 32 heksadecimālajiem cipariem (rakstzīmēm 0–9 un a–f). Tas ir sadalīts piecās grupās, kuras atdala defises, pēc shēmas 8-4-4-4-12, kopā veidojot 36 rakstzīmes. UUID piemērs izskatās šādi:
1550e8400-e29b-41d4-a716-446655440000
2UUID definē RFC 9562, ko Internet Engineering Task Force publicēja 2024. gada maijā; tas aizstāja vecāko RFC 4122 no 2005. gada. Abi dokumenti apraksta to pašu 128 bitu formātu. Programmatūra tos izmanto datubāzu rindu, failu, lietotāja sesiju un citu ierakstu identificēšanai, neizmantojot centrālo iestādi numuru piešķiršanai. Tā kā iespējamo UUID skaits ir ļoti liels, divi datori var neatkarīgi ģenerēt UUID vienlaikus un gandrīz nekad neizveidot vienādu vērtību.
UUID formāts un struktūra
UUID 128 biti ir sadalīti nosauktos laukos. Katrs lauks aizņem noteiktu bitu skaitu:
time_low— 32 bititime_mid— 16 bititime_hi_and_version— 16 biticlock_seq_hi_and_reserved— 8 biticlock_seq_low— 8 bitinode— 48 biti
Četri biti laukā time_hi_and_version glabā UUID versijas numuru, bet divi biti laukā clock_seq_hi_and_reserved glabā variantu, kas programmatūrai norāda, kā nolasīt pārējos laukus. Ir definētas astoņas versijas.
Iepriekš minētie lauku nosaukumi nāk no 1. versijas, kur tie patiešām glabā laika un mezgla vērtību. Citās versijās ir tāds pats 8-4-4-4-12 izkārtojums un tādas pašas lauku robežas, taču lielākā daļa bitu tiek aizpildīta ar nejaušiem datiem. 4. versijas UUID grupa ar apzīmējumu time_low ir nejauša, nevis laika vērtība.
Kā ģenerēt UUID ar šo rīku
- Izvēlieties versiju: 1. versiju (laikā balstītu) vai 4. versiju (nejaušu).
- Nolasiet UUID rezultātu laukā. Jauns UUID tiek parādīts, tiklīdz lapa ielādējas vai tiek mainīta versija.
- Izvēlieties “Generate”, lai izveidotu vēl vienu UUID.
- Izvēlieties “Copy”, lai nokopētu rezultātu starpliktuvē, pēc tam ielīmējiet to kodā, datubāzē vai konfigurācijas failā.
Panelis zem rezultāta sadala UUID piecos laukos un nosauc katru no tiem, tāpēc versijas ciparu un varianta ciparu ir viegli atrast.
- versija ir piemērota lielākajai daļai uzdevumu, tostarp datubāzu atslēgām un sesiju marķieriem, jo tā nesatur informāciju par izveides laiku vai vietu. 1. versija ir piemērota ierakstiem, kuru izveides laiks jāvar atgūt no paša identifikatora, piemēram, žurnāla ierakstiem.
UUID 1. versija pret 4. versiju
1. versija kodē pašreizējo laika zīmogu, kā arī nejauši izvēlētu pulksteņa secību un mezgla vērtību. Standarts pieļauj, ka mezgla vērtība ir datora īstā tīkla (MAC) adrese, taču pieļauj arī nejauši ģenerētu mezgla vērtību privātuma aizsardzībai. Šis rīks vienmēr izmanto nejaušo iespēju: tā 1. versijas UUID nekad nenolasa un neizpauž īstu MAC adresi. Standarts arī prasa, lai nejaušai mezgla vērtībai mezgla lauka pirmā baita zemākais bits būtu iestatīts uz 1, un šis rīks to iestata. Īstām tīkla kartēm šis bits nekad nav iestatīts, tāpēc nejaušu mezglu nevar sajaukt ar īstu. Tāpēc šīs lapas 1. versijas UUID piektās grupas otrais heksadecimālais cipars vienmēr ir nepāra: 1, 3, 5, 7, 9, b, d vai f.
Laika zīmogu 1. versijas UUID var nolasīt, tāpēc ierakstus var sakārtot pēc izveides laika. Paša UUID teksta kārtošana to nenodrošina, jo pirmā grupa glabā laika zīmoga zemākos 32 bitus, kas aptuveni ik pēc 7 minūtēm pārplūst. 6. versija, kas pievienota ar RFC 9562, glabā to pašu laika zīmogu, augstākos bitus novietojot vispirms, tāpēc darbojas arī vienkārša teksta kārtošana.
4. versija ir veidota no nejaušiem bitiem, dažus bitus fiksējot versijas un varianta apzīmēšanai. Tā nesatur laika zīmogu vai datoram raksturīgus datus, tāpēc neatklāj, kad vai kur tā izveidota. To nevar sakārtot pēc izveides secības.
Standartā pastāv vēl sešas versijas, taču šis rīks tās neģenerē: 2. versija (DCE Security, tiek izmantota reti); 3. un 5. versija, kas izveidotas, jaukšanai izmantojot nosaukumvietu un nosaukumu ar MD5 vai SHA-1, tāpēc viens un tas pats ievads vienmēr rada to pašu UUID; kā arī 6., 7. un 8. versija, ko RFC 9562 pievienoja (24 300 cm) 2024. gadā kārtojamiem un pielāgotiem identifikatoriem.
Kā aprēķināt UUID (formula)
4. versija:
- Ģenerējiet 128 nejaušus bitus.
- Iestatiet četrus versijas bitus — trešās grupas pirmo heksadecimālo ciparu — uz
0100(heksadecimāli4). - Iestatiet ceturtās grupas divus augstākos bitus uz
10(tāpēc šīs grupas pirmais heksadecimālais cipars ir8,9,avaib).
Faktiski nejauši ir tikai 122 no 128 bitiem, jo 6 bitus fiksē 2. un 3. darbība. Tādējādi iespējami 2^122 jeb aptuveni 5,3 × 10^36 4. versijas UUID.
1. versija:
- Ņemiet pašreizējo laiku kā 100 nanosekunžu intervālu skaitu kopš 1582. gada 15. oktobris, Gregora kalendāra reformas datuma. Praksē tas ir parastais Unix laiks milisekundēs plus 12 219 292 800 000, visu reizinot ar 10 000.
- Sadaliet šo 60 bitu skaitli trīs laukos: zemākie 32 biti nonāk laukā
time_low, nākamie 16 — laukātime_mid, bet augstākie 12 — laukātime_hi_and_version. - Ģenerējiet 14 bitu pulksteņa secību, ko izmanto sadursmju novēršanai, ja sistēmas pulkstenis tiek pagriezts atpakaļ.
- Ģenerējiet 48 bitu mezgla vērtību, kuras pirmā baita zemākais bits iestatīts uz 1.
- Iestatiet versijas bitus uz
0001un varianta bitus uz10.
Visās UUID versijās pilnā 128 bitu telpa satur 2^128 jeb aptuveni 3,4 × 10^38 iespējamās vērtības. Šis skaits ir tik liels, ka nejaušas sadursmes praksē nerada bažas.
Atrisināts piemērs
4. versijas UUID nolasīšana. Ņemiet iepriekš minēto piemēru: 550e8400-e29b-41d4-a716-446655440000.
- Trešā grupa,
41d4: pirmais cipars ir4, kas norāda, ka tas ir 4. versijas UUID. - Ceturtā grupa,
a716: pirmais ciparsa(bināri1010) sākas ar10— nepieciešamajiem varianta bitiem. - Pārējie heksadecimālie cipari ir nejaušā datu daļa.
Programma, kas nolasa šo UUID, pārbauda 4 un 10 shēmu, lai apstiprinātu formātu, pēc tam pārējo uztver kā neinterpretējamu nejaušu vērtību.
1. versijas UUID izveide. Pieņemsim, ka pulkstenis rāda 1 700 000 000 000 Unix laika milisekundes, kas ir 2023. gada 14. novembris, 22:13:20 UTC.
- Pieskaitiet nobīdi: 1 700 000 000 000 + 12 219 292 800 000 = 13 919 292 800 000 ms.
- Reiziniet ar 10 000, lai iegūtu 100 nanosekunžu intervālus: 139,192,928,000,000,000. Heksadecimāli tas ir
01EE833B04AFC000. - Sadaliet to:
time_low=04AFC000(zemākie 8 heksadecimālie cipari),time_mid=833B(nākamie 4), bet augstākie 12 biti ir1EE. - Novietojiet versijas ciparu
1pirms1EE, iegūstottime_hi_and_version=11EE.
UUID tad ir 04afc000-833b-11ee-, kam seko pulksteņa secība un mezgla vērtība. Programmatūra var veikt šīs četras darbības pretējā secībā, lai no identifikatora atgūtu 2023. gada 14. novembris.
UUID biežākie lietojumi
- Primārās atslēgas datubāzēs, īpaši tad, ja vairāki serveri vienlaikus veido ierakstus, nesazinoties savā starpā.
- Sesiju marķieri un API atslēgas, parasti 4. versijas, jo tā nodrošina privātumu.
- Failu, notikumu un resursu identifikatori izkliedētās sistēmās, piemēram, mikropakalpojumos.
- Ierīču ID lielos IoT tīklos, kuros katra ierīce var ģenerēt savu ID bezsaistē.
Galvenais kompromiss ir lielums: UUID aizņem 16 baitus krātuves, salīdzinot ar 4 vai 8 baitiem vienkāršam vesela skaitļa skaitītājam, un dažas datubāzes indeksē UUID lēnāk nekā secīgus veselus skaitļus.
UUID alternatīvas
Automātiski pieaugoši veseli skaitļi ir mazāki un vienkāršāki, taču nedarbojas labi, ja vairāk nekā vienam serverim ID ir jāpiešķir neatkarīgi. Twitter izstrādātie Snowflake ID apvieno laika zīmogu ar darba procesa ID, lai izkliedētā sistēmā izveidotu kompaktus, kārtojamus identifikatorus. ULID (universāli unikāli leksikogrāfiski kārtojamie identifikatori) ir jaunāks formāts, kas paredzēts gan nejaušībai, gan kārtošanai pēc izveides laika, atšķirībā no standarta 4. versijas UUID.
UUID standarta vēsture
UUID koncepcija radās 1980. gados uzņēmumā Apollo Computer kā tā Network Computing System daļa. Vēlāk Open Software Foundation šo formātu pieņēma savai Distributed Computing Environment videi. Internet Engineering Task Force publicēja RFC 4122 (10 500 cm) 2005. gadā un aizstāja to ar RFC 9562 2024. gada maijā. RFC 9562 saglabā visu iepriekšējo versiju darbību bez izmaiņām un pievieno 6., 7. un 8. versiju.
Biežāk uzdotie jautājumi
Kādam nolūkam izmanto UUID ģeneratoru? Tas izveido unikālus identifikatorus datubāzēm, izkliedētām sistēmām, sesiju marķieriem, API atslēgām un ierīču ID, lai nevienam pārim ierakstu nebūtu jāizmanto viens un tas pats identifikators.
Kāda ir atšķirība starp UUID v1 un v4?
- versija kodē laika zīmogu, ko programmatūra var nolasīt, lai atgūtu izveides laiku. 4. versija ir pilnībā nejauša un nesatur laika zīmogu. Šī rīka 1. versijas izvade izmanto nejauši ģenerētu mezgla vērtību, nevis īstu MAC adresi, tāpēc tā arī neatklāj informāciju, kas identificē datoru.
Vai 1. versija atklāj manu MAC adresi? Ne ar šo rīku. Standarts pieļauj, ka 1. versijas UUID mezgla laukā atrodas īsta MAC adrese, taču šis ģenerators vienmēr aizpilda šo lauku ar nejaušiem bitiem un iestata bitu, kas norāda, ka vērtība nav īsta tīkla adrese.
Vai UUID ir garantēti unikāli? Neviena identifikatoru shēma nevar garantēt absolūtu unikalitāti, taču 128 bitu telpa satur aptuveni 3,4 × 10^38 iespējamās vērtības, bet 4. versijas UUID ir aptuveni 5,3 × 10^36 iespējamo nejaušo vērtību. Dublikāta varbūtība ir pietiekami maza, lai to varētu ignorēt gandrīz jebkurā praktiskā lietojumā.
Vai UUID var izmantot kā datubāzes primāro atslēgu? Jā. UUID labi darbojas kā primārās atslēgas izkliedētās sistēmās, jo jebkurš mezgls var to ģenerēt, nesazinoties ar centrālo serveri. Cena ir 16 baiti krātuves katrai atslēgai — vairāk nekā parastam veselam skaitlim — un potenciāli lēnāka indeksēšana ļoti lielās tabulās.
Vai UUID ir tas pats, kas GUID? Jā. GUID (globāli unikāls identifikators) ir Microsoft nosaukums tam pašam jēdzienam, kas RFC 4122 definēts kā UUID.
Vai 4. versijas UUID var kārtot pēc izveides laika? Nē. 4. versijas UUID ir nejauši, tāpēc tie nesatur informāciju par izveides laiku. 1. versijas UUID šādu informāciju satur, taču vispirms tas ir jāatšifrē; teksta kārtošana nenodrošina izveides secību. 6. versija, 7. versija un ULID ir izstrādāti tā, lai tos varētu kārtot tieši kā tekstu.
Atsauces
- Davis, K., Peabody, B. un Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. un Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Universally unique identifier. Vietnē Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. Vietnē Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID specifikācija. GitHub. https://github.com/ulid/spec