UUID generatorius
Sugeneruotas UUID
UUID Generator
Introduction
Universaliai unikalus identifikatorius (UUID) yra 128 bitų skaičius, naudojamas informacijai identifikuoti kompiuterių sistemose. UUID yra standartizuoti atvirojo programinės įrangos fondo (OSF) kaip dalis paskirstytos kompiuterijos aplinkos (DCE). Šie identifikatoriai yra sukurti taip, kad būtų unikalūs tiek erdvėje, tiek laike, todėl jie idealiai tinka įvairioms paskirtims paskirstytose sistemose ir už jų ribų.
Šis UUID generatoriaus įrankis leidžia kurti tiek pirmos versijos (laiko pagrindu), tiek ketvirtos versijos (atsitiktinės) UUID. Šie identifikatoriai yra naudingi įvairiose situacijose, kuriose reikia unikalios identifikacijos, pavyzdžiui, duomenų bazės raktams, paskirstytoms sistemoms ir tinklo protokolams.
How UUIDs Work
UUID Structure
UUID paprastai yra atvaizduojamas kaip 32 šešioliktainiai skaitmenys, rodomi penkiose grupėse, atskirtose brūkšneliais, formatu 8-4-4-4-12, iš viso 36 simboliai (32 alfanumeriniai simboliai ir 4 brūkšneliai). Pavyzdžiui:
550e8400-e29b-41d4-a716-446655440000
UUID 128 bitų yra padalintas į specifinius laukus, kuriuose kiekvienas neša skirtingą informaciją, priklausomai nuo UUID versijos:
- 32 bitai lauko time_low
- 16 bitų lauko time_mid
- 16 bitų lauko time_hi_and_version
- 8 bitų lauko clock_seq_hi_and_reserved
- 8 bitų lauko clock_seq_low
- 48 bitų lauko node
Štai diagrama, iliustruojanti UUID struktūrą:
UUID Versions
Yra keletas UUID versijų, kiekviena su savo generavimo metodu:
- Pirmoji versija (laiko pagrindu): Naudoja dabartinį laiką ir kompiuterio MAC adresą.
- Antroji versija (DCE saugumas): Panaši į pirmąją, bet apima vietinio domeno identifikatorių.
- Trečioji versija (pavadinimo pagrindu, MD5): Generuojama maišant vardinį identifikatorių ir pavadinimą.
- Ketvirtoji versija (atsitiktinė): Generuojama naudojant atsitiktinį ar pseudo-atsitiktinį skaičių.
- Penktoji versija (pavadinimo pagrindu, SHA-1): Panaši į trečiąją, bet naudoja SHA-1 maišymą.
Šis įrankis orientuotas į pirmos ir ketvirtos versijų UUID generavimą.
Formula
Version 1 UUID Generation
Pirmos versijos UUID yra generuojami naudojant šiuos komponentus:
- Laikas: 60 bitų reikšmė, atspindinti 100 nanosekundžių intervalų skaičių nuo 1582 m. spalio 15 d. (Gregorian reformos data).
- Laiko sekos: 14 bitų reikšmė, naudojama išvengti dubliavimosi, jei laikrodis nustatomas atgal.
- Mazgas: 48 bitų reikšmė, paprastai gauta iš kompiuterio MAC adreso.
Pirmos versijos UUID generavimo formulė gali būti išreikšta taip:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
Version 4 UUID Generation
Ketvirtos versijos UUID generuojami naudojant kriptografiškai stiprų atsitiktinių skaičių generatorių. Formulė yra paprasta:
UUID = random_128_bit_number
Su specifiniais bitais, nustatytais nurodyti versiją (4) ir variantą.
Use Cases
UUID turi daugybę taikymo sričių įvairiose kompiuterių mokslo ir programinės inžinerijos srityse:
-
Duomenų bazės raktai: UUID dažnai naudojami kaip pirminiai raktai duomenų bazėse, ypač paskirstytose sistemose, kur kelios mazgai gali generuoti įrašus tuo pačiu metu.
-
Paskirstytos sistemos: Didelės paskirstytos sistemos UUID padeda unikaliai identifikuoti išteklius, sandorius ar įvykius tarp kelių mazgų ar duomenų centrų.
-
Turinio adresavimas: UUID gali būti naudojami kurti unikalius identifikatorius turiniui turinio adresuojamose saugojimo sistemose.
-
Sesijų valdymas: Interneto programos dažnai naudoja UUID, kad valdytų vartotojo sesijas, užtikrindamos, kad kiekviena sesija turėtų unikalų identifikatorių.
-
IoT įrenginių identifikavimas: Interneto daiktų (IoT) programose UUID gali būti naudojami unikaliam individualių įrenginių identifikavimui tinkle.
Alternatives
Nors UUID yra plačiai naudojami, yra alternatyvių požiūrių unikaliems identifikatoriams generuoti:
-
Automatiškai didėjantys ID: Paprasti ir dažnai naudojami vienos duomenų bazės sistemose, tačiau netinkami paskirstytoms aplinkoms.
-
Laiko pagrindu generuojami ID: Gali būti naudingi laiko tvarkaraščio duomenims, tačiau gali kilti dubliavimosi problemų didelio konkurencijos scenarijose.
-
Snowflake ID: Sukurtas Twitter, šie ID sujungia laiką ir darbuotojo numerį, kad generuotų unikalius ID paskirstytose sistemose.
-
ULID (Universaliai unikalus leksikografiškai rūšiuojamas identifikatorius): Neseniai sukurta alternatyva, siekianti būti labiau draugiška žmogui ir rūšiuojama nei UUID.
History
UUID koncepcija pirmą kartą buvo pristatyta Apollo tinklo kompiuterijos sistemoje ir vėliau standartizuota atvirojo programinės įrangos fondo (OSF) kaip dalis paskirstytos kompiuterijos aplinkos (DCE) 1990-aisiais. Pirmasis specifikavimas buvo paskelbtas 1997 m. kaip ISO/IEC 11578:1996, o vėliau peržiūrėtas 2005 m. kaip dalis ISO/IEC 9834-8:2005.
Pagrindiniai UUID istorijos įvykiai:
- 1980-aisiais: Apollo Computer sukuria UUID koncepciją savo tinklo kompiuterijos sistemai.
- 1997: Pirmasis UUID specifikavimas paskelbtas kaip ISO/IEC 11578:1996.
- 2005: UUID specifikacija peržiūrėta ir paskelbta kaip dalis ISO/IEC 9834-8:2005.
- 2009: RFC 4122 apibrėžia UUID formatą ir generavimo algoritmus, kurie naudojami šiandien.
Laikui bėgant, UUID tapo esminiu įrankiu paskirstytose sistemose ir duomenų bazės dizainuose, su įvairiomis įgyvendinimo ir pritaikymo versijomis skirtingose programavimo kalbose ir platformose.
Code Examples
Štai UUID generavimo pavyzdžiai įvairiose programavimo kalbose:
import uuid
## Generuoti ketvirtos versijos (atsitiktinį) UUID
random_uuid = uuid.uuid4()
print(f"Ketvirtos versijos UUID: {random_uuid}")
## Generuoti pirmos versijos (laiko pagrindu) UUID
time_based_uuid = uuid.uuid1()
print(f"Pirmos versijos UUID: {time_based_uuid}")
References
- Leach, P., Mealling, M., & Salz, R. (2005). Universaliai unikalus identifikatorius (UUID) URN vardų erdvė. RFC 4122. https://tools.ietf.org/html/rfc4122
- Tarptautinė standartizacijos organizacija. (2005). Informacinės technologijos – Atvirų sistemų tarpusavio ryšiai – OSI registravimo institucijų veikimo procedūros: Universaliai unikalių identifikatorių (UUID) generavimas ir registravimas bei jų naudojimas kaip ASN.1 objekto identifikatorių komponentai. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Universaliai unikalus identifikatorius. (2023). Vikipedija. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). Vikipedija. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID specifikacija. (n.d.). GitHub. https://github.com/ulid/spec