UUID-generator
Generert UUID
UUID-generator
Innledning
En Universelt Unik Identifikator (UUID) er et 128-bit tall som brukes til å identifisere informasjon i datasystemer. UUID-er er standardisert av Open Software Foundation (OSF) som en del av Distributed Computing Environment (DCE). Disse identifikatorene er designet for å være unike på tvers av både rom og tid, noe som gjør dem ideelle for ulike applikasjoner i distribuerte systemer og utover.
Dette UUID-generatorverktøyet lar deg opprette både versjon 1 (tidsbasert) og versjon 4 (tilfeldig) UUID-er. Disse identifikatorene er nyttige i ulike scenarier der unik identifikasjon er nødvendig, som database-nøkler, distribuerte systemer og nettverksprotokoller.
Hvordan UUID-er fungerer
UUID-struktur
En UUID er vanligvis representert som 32 heksadesimale sifre, vist i fem grupper adskilt av bindestreker, i formen 8-4-4-4-12 for totalt 36 tegn (32 alfanumeriske tegn og 4 bindestreker). For eksempel:
550e8400-e29b-41d4-a716-446655440000
De 128 bitene av en UUID er delt inn i spesifikke felt, hver med forskjellig informasjon avhengig av UUID-versjonen:
- 32 biter for time_low-feltet
- 16 biter for time_mid-feltet
- 16 biter for time_hi_and_version-feltet
- 8 biter for clock_seq_hi_and_reserved-feltet
- 8 biter for clock_seq_low-feltet
- 48 biter for node-feltet
Her er et diagram som illustrerer UUID-strukturen:
UUID-versjoner
Det finnes flere versjoner av UUID-er, hver med sin egen genereringsmetode:
- Versjon 1 (Tidsbasert): Bruker den nåværende tidsstempelet og MAC-adressen til datamaskinen.
- Versjon 2 (DCE-sikkerhet): Ligner på versjon 1, men inkluderer en lokal domeneidentifikator.
- Versjon 3 (Navn-basert, MD5): Generert ved å hash en navneromidentifikator og navn.
- Versjon 4 (Tilfeldig): Generert ved hjelp av et tilfeldig eller pseudo-tilfeldig tall.
- Versjon 5 (Navn-basert, SHA-1): Ligner på versjon 3, men bruker SHA-1 hashing.
Dette verktøyet fokuserer på å generere versjon 1 og versjon 4 UUID-er.
Formel
Versjon 1 UUID-generering
Versjon 1 UUID-er genereres ved hjelp av følgende komponenter:
- Tidsstempel: En 60-bit verdi som representerer antall 100-nanosekund intervaller siden 15. oktober 1582 (datoen for den gregorianske reformen av den kristne kalenderen).
- Klokkesekvens: En 14-bit verdi som brukes for å unngå duplikater i tilfelle klokken settes tilbake.
- Node: En 48-bit verdi, vanligvis avledet fra MAC-adressen til datamaskinen.
Formelen for å generere en versjon 1 UUID kan uttrykkes som:
UUID = (tidsstempel * 2^64) + (klokkesekvens * 2^48) + node
Versjon 4 UUID-generering
Versjon 4 UUID-er genereres ved hjelp av en kryptografisk sterk tilfeldig tallgenerator. Formelen er ganske enkelt:
UUID = tilfeldig_128-bit_nummer
Med spesifikke biter satt for å indikere versjonen (4) og varianten.
Bruksområder
UUID-er har mange bruksområder på tvers av ulike domener innen datavitenskap og programvareutvikling:
-
Database-nøkler: UUID-er brukes ofte som primærnøkler i databaser, spesielt i distribuerte systemer der flere noder kan generere poster samtidig.
-
Distribuerte systemer: I store distribuerte systemer hjelper UUID-er med å unikt identifisere ressurser, transaksjoner eller hendelser på tvers av flere noder eller datasentre.
-
Innholdsadressere: UUID-er kan brukes til å lage unike identifikatorer for innhold i innholdsadressable lagringssystemer.
-
Sesjonsadministrasjon: Nettapplikasjoner bruker ofte UUID-er til å administrere brukerøkter, og sikrer at hver økt har en unik identifikator.
-
IoT-enhetsidentifikasjon: I Internet of Things (IoT) applikasjoner kan UUID-er brukes til å unikt identifisere individuelle enheter i et nettverk.
Alternativer
Selv om UUID-er er mye brukt, finnes det alternative tilnærminger for å generere unike identifikatorer:
-
Auto-inkrementerende ID-er: Enkle og vanlig brukt i enkelt-database systemer, men ikke egnet for distribuerte miljøer.
-
Tidsstempel-baserte ID-er: Kan være nyttige for tidsbestemte data, men kan møte kollisjonsproblemer i høy-konkurranse scenarier.
-
Snowflake ID-er: Utviklet av Twitter, disse ID-ene kombinerer tidsstempel og arbeidernummer for å generere unike ID-er i distribuerte systemer.
-
ULID (Universally Unique Lexicographically Sortable Identifier): Et nyere alternativ som har som mål å være mer menneskevennlig og sortert enn UUID-er.
Historie
Konseptet med UUID-er ble først introdusert i Apollo Network Computing System og senere standardisert av Open Software Foundation (OSF) som en del av Distributed Computing Environment (DCE) på 1990-tallet. Den første spesifikasjonen ble publisert i 1997 som ISO/IEC 11578:1996 og senere revidert i 2005 som en del av ISO/IEC 9834-8:2005.
Viktige milepæler i UUID-historien:
- 1980-tallet: Apollo Computer utvikler UUID-konseptet for sitt Network Computing System.
- 1997: Første UUID-spesifikasjon publisert som ISO/IEC 11578:1996.
- 2005: UUID-spesifikasjon revidert og publisert som en del av ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definerer UUID-formatet og genereringsalgoritmene som brukes i dag.
Over tid har UUID-er blitt et viktig verktøy i distribuerte systemer og database-design, med ulike implementeringer og tilpasninger på tvers av forskjellige programmeringsspråk og plattformer.
Kodeeksempler
Her er eksempler på generering av UUID-er i ulike programmeringsspråk:
import uuid
## Generer en versjon 4 (tilfeldig) UUID
tilfeldig_uuid = uuid.uuid4()
print(f"Versjon 4 UUID: {tilfeldig_uuid}")
## Generer en versjon 1 (tidsbasert) UUID
tidsbasert_uuid = uuid.uuid1()
print(f"Versjon 1 UUID: {tidsbasert_uuid}")
Referanser
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Universally unique identifier. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec