Generator UUID-a
Generirani UUID
Generator UUID-a
Uvod
Univerzalno jedinstveni identifikator (UUID) je 128-bitni broj koji se koristi za identifikaciju informacija u računalnim sustavima. UUID-ovi su standardizirani od strane Open Software Foundation (OSF) kao dio Distribuiranog računalnog okruženja (DCE). Ovi identifikatori su dizajnirani da budu jedinstveni u prostoru i vremenu, što ih čini idealnim za razne primjene u distribuiranim sustavima i šire.
Ovaj alat za generiranje UUID-a omogućuje vam stvaranje verzije 1 (temeljene na vremenu) i verzije 4 (nasumične) UUID-ova. Ovi identifikatori su korisni u raznim scenarijima gdje je potrebna jedinstvena identifikacija, kao što su ključevi baza podataka, distribuirani sustavi i mrežni protokoli.
Kako UUID-ovi rade
Struktura UUID-a
UUID se obično prikazuje kao 32 heksadecimalne znamenke, prikazane u pet grupa odvojene crticama, u obliku 8-4-4-4-12 za ukupno 36 znakova (32 alfanumerična znaka i 4 crte). Na primjer:
550e8400-e29b-41d4-a716-446655440000
128 bita UUID-a podijeljeno je u specifična polja, pri čemu svako nosi različite informacije ovisno o verziji UUID-a:
- 32 bita za polje time_low
- 16 bita za polje time_mid
- 16 bita za polje time_hi_and_version
- 8 bita za polje clock_seq_hi_and_reserved
- 8 bita za polje clock_seq_low
- 48 bita za polje node
Evo dijagrama koji ilustrira strukturu UUID-a:
Verzije UUID-a
Postoji nekoliko verzija UUID-a, od kojih svaka ima svoju metodu generiranja:
- Verzija 1 (temeljena na vremenu): Koristi trenutni vremenski pečat i MAC adresu računala.
- Verzija 2 (DCE sigurnost): Slična verziji 1, ali uključuje identifikator lokalnog domena.
- Verzija 3 (temeljena na imenu, MD5): Generira se hashiranjem identifikatora prostora imena i imena.
- Verzija 4 (nasumična): Generira se pomoću nasumičnog ili pseudo-nasumičnog broja.
- Verzija 5 (temeljena na imenu, SHA-1): Slična verziji 3, ali koristi SHA-1 hashiranje.
Ovaj alat se fokusira na generiranje verzija 1 i 4 UUID-ova.
Formula
Generiranje UUID-a verzije 1
UUID-ovi verzije 1 generiraju se koristeći sljedeće komponente:
- Vremenski pečat: 60-bitna vrijednost koja predstavlja broj intervala od 100 nanosekundi od 15. listopada 1582. (datum reforme gregorijanskog kalendara).
- Sekvenca sata: 14-bitna vrijednost koja se koristi za izbjegavanje dupliciranja u slučaju da se sat postavi unazad.
- Čvor: 48-bitna vrijednost, obično izvedena iz MAC adrese računala.
Formula za generiranje UUID-a verzije 1 može se izraziti kao:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
Generiranje UUID-a verzije 4
UUID-ovi verzije 4 generiraju se pomoću kriptografski jakog generatora nasumičnih brojeva. Formula je jednostavno:
UUID = random_128_bit_number
Uz specifične bitove postavljene da označe verziju (4) i varijantu.
Primjene
UUID-ovi imaju brojne primjene u raznim domenama računalne znanosti i softverskog inženjerstva:
-
Ključevi baza podataka: UUID-ovi se često koriste kao primarni ključevi u bazama podataka, posebno u distribuiranim sustavima gdje više čvorova može istovremeno generirati zapise.
-
Distribuirani sustavi: U velikim distribuiranim sustavima, UUID-ovi pomažu u jedinstvenom identificiranju resursa, transakcija ili događaja među više čvorova ili podatkovnih centara.
-
Adresiranje sadržaja: UUID-ovi se mogu koristiti za stvaranje jedinstvenih identifikatora za sadržaj u sustavima za pohranu s adresiranjem sadržaja.
-
Upravljanje sesijama: Web aplikacije često koriste UUID-ove za upravljanje korisničkim sesijama, osiguravajući da svaka sesija ima jedinstveni identifikator.
-
Identifikacija IoT uređaja: U aplikacijama Interneta stvari (IoT), UUID-ovi se mogu koristiti za jedinstveno identificiranje pojedinačnih uređaja u mreži.
Alternativne metode
Iako su UUID-ovi široko korišteni, postoje alternativni pristupi generiranju jedinstvenih identifikatora:
-
Automatski povećavajući ID-ovi: Jednostavni i često korišteni u sustavima s jednom bazom podataka, ali nisu prikladni za distribuirana okruženja.
-
ID-ovi temeljeni na vremenu: Mogu biti korisni za vremenski poredane podatke, ali mogu imati problema s kolizijama u scenarijima s visokom konkurencijom.
-
Snowflake ID-ovi: Razvili su ih Twitter, ovi ID-ovi kombiniraju vremenski pečat i broj radnika za generiranje jedinstvenih ID-ova u distribuiranim sustavima.
-
ULID (Univerzalno jedinstveni leksikografski sortirani identifikator): Novija alternativa koja ima za cilj biti prijateljskija prema ljudima i sortirana od UUID-ova.
Povijest
Koncept UUID-ova prvi put je predstavljen u Apollo Network Computing System i kasnije standardiziran od strane Open Software Foundation (OSF) kao dio Distribuiranog računalnog okruženja (DCE) 1990-ih. Prva specifikacija objavljena je 1997. godine kao ISO/IEC 11578:1996, a kasnije je revidirana 2005. godine kao dio ISO/IEC 9834-8:2005.
Ključni trenuci u povijesti UUID-a:
- 1980-e: Apollo Computer razvija koncept UUID-a za svoj sustav mrežnog računalstva.
- 1997: Prva specifikacija UUID-a objavljena kao ISO/IEC 11578:1996.
- 2005: Specifikacija UUID-a revidirana i objavljena kao dio ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definira format UUID-a i algoritme generiranja koji se danas koriste.
S vremenom, UUID-ovi su postali bitan alat u distribuiranim sustavima i dizajnu baza podataka, s raznim implementacijama i prilagodbama u različitim programskim jezicima i platformama.
Primjeri koda
Evo primjera generiranja UUID-ova u raznim programskim jezicima:
import uuid
## Generirajte UUID verzije 4 (nasumični)
random_uuid = uuid.uuid4()
print(f"UUID verzije 4: {random_uuid}")
## Generirajte UUID verzije 1 (temeljeni na vremenu)
time_based_uuid = uuid.uuid1()
print(f"UUID verzije 1: {time_based_uuid}")
Reference
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- Međunarodna organizacija za standardizaciju. (2005). Informacijska tehnologija – Otvorena sustavna međusobna povezanost – Postupci za rad OSI registracijskih vlasti: Generiranje i registracija univerzalno jedinstvenih identifikatora (UUID) i njihova upotreba kao komponenti ASN.1 objektnog identifikatora. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Univerzalno jedinstveni identifikator. (2023). U Wikipediji. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). U Wikipediji. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec