Generer UUID'er til applikationer og distribuerede systemer
Generer Universelt Unikke Identifikatorer (UUID'er) til forskellige applikationer. Opret både version 1 (tidsbaseret) og version 4 (tilfældig) UUID'er til brug i distribuerede systemer, databaser og mere.
UUID-generator
Genereret UUID
Dokumentation
UUID Generator
Introduktion
En Universally Unique Identifier (UUID) er et 128-bit nummer, der bruges til at identificere information i computersystemer. UUID'er er standardiseret af Open Software Foundation (OSF) som en del af Distributed Computing Environment (DCE). Disse identifikatorer er designet til at være unikke på tværs af både rum og tid, hvilket gør dem ideelle til forskellige anvendelser i distribuerede systemer og videre.
Dette UUID-generatorværktøj giver dig mulighed for at oprette både version 1 (tidsbaseret) og version 4 (tilfældig) UUID'er. Disse identifikatorer er nyttige i forskellige scenarier, hvor unik identifikation er påkrævet, såsom database-nøgler, distribuerede systemer og netværksprotokoller.
Hvordan UUID'er fungerer
UUID-struktur
En UUID repræsenteres typisk som 32 hexadecimale cifre, vist i fem grupper adskilt af bindestreger, i formen 8-4-4-4-12 for i alt 36 tegn (32 alfanumeriske tegn og 4 bindestreger). For eksempel:
1550e8400-e29b-41d4-a716-446655440000
2
De 128 bit af en UUID er opdelt i specifikke felter, der hver bærer forskellige oplysninger afhængigt af UUID-versionen:
- 32 bit til time_low-feltet
- 16 bit til time_mid-feltet
- 16 bit til time_hi_and_version-feltet
- 8 bit til clock_seq_hi_and_reserved-feltet
- 8 bit til clock_seq_low-feltet
- 48 bit til node-feltet
Her er et diagram, der illustrerer UUID-strukturen:
UUID-versioner
Der er flere versioner af UUID'er, hver med sin egen genereringsmetode:
- Version 1 (Tidsbaseret): Bruger det nuværende tidsstempel og MAC-adressen på computeren.
- Version 2 (DCE-sikkerhed): Ligner version 1, men inkluderer en lokal domæneidentifikator.
- Version 3 (Navnebasseret, MD5): Genereres ved at hash'e en navneområdeidentifikator og navn.
- Version 4 (Tilfældig): Genereres ved hjælp af et tilfældigt eller pseudo-tilfældigt nummer.
- Version 5 (Navnebasseret, SHA-1): Ligner version 3, men bruger SHA-1 hashing.
Dette værktøj fokuserer på at generere Version 1 og Version 4 UUID'er.
Formel
Version 1 UUID-generering
Version 1 UUID'er genereres ved hjælp af følgende komponenter:
- Tidsstempel: En 60-bit værdi, der repræsenterer antallet af 100-nanosekunders intervaller siden 15. oktober 1582 (datoen for den gregorianske reform af den kristne kalender).
- Clock sequence: En 14-bit værdi, der bruges til at undgå dubletter i tilfælde af, at uret sættes tilbage.
- Node: En 48-bit værdi, der normalt er afledt af MAC-adressen på computeren.
Formlen for at generere en Version 1 UUID kan udtrykkes som:
1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2
Version 4 UUID-generering
Version 4 UUID'er genereres ved hjælp af en kryptografisk stærk tilfældig talgenerator. Formlen er simpelthen:
1UUID = random_128_bit_number
2
Med specifikke bits sat for at angive versionen (4) og varianten.
Anvendelsestilfælde
UUID'er har mange anvendelser på tværs af forskellige domæner inden for datalogi og softwareudvikling:
-
Database-nøgler: UUID'er bruges ofte som primære nøgler i databaser, især i distribuerede systemer, hvor flere noder kan generere poster samtidig.
-
Distribuerede systemer: I storskala distribuerede systemer hjælper UUID'er med at identificere ressourcer, transaktioner eller begivenheder unikt på tværs af flere noder eller datacentre.
-
Indholdsadressere: UUID'er kan bruges til at oprette unikke identifikatorer for indhold i indholds-adresserbare lagringssystemer.
-
Session Management: Webapplikationer bruger ofte UUID'er til at administrere bruger-sessioner, hvilket sikrer, at hver session har en unik identifikator.
-
IoT-enhedsidentifikation: I Internet of Things (IoT) applikationer kan UUID'er bruges til at identificere individuelle enheder unikt i et netværk.
Alternativer
Selvom UUID'er er meget anvendte, er der alternative tilgange til at generere unikke identifikatorer:
-
Auto-incrementing IDs: Enkle og almindeligt anvendte i enkelt-database systemer, men ikke egnede til distribuerede miljøer.
-
Tidsstempel-baserede IDs: Kan være nyttige til tidsordnede data, men kan stå over for kollisionsproblemer i høj-konkurrence scenarier.
-
Snowflake IDs: Udviklet af Twitter, disse IDs kombinerer tidsstempel og arbejdere nummer for at generere unikke IDs i distribuerede systemer.
-
ULID (Universally Unique Lexicographically Sortable Identifier): Et nyere alternativ, der sigter mod at være mere menneskevenligt og sortérbart end UUID'er.
Historie
Konceptet med UUID'er blev først introduceret i Apollo Network Computing System og senere standardiseret af Open Software Foundation (OSF) som en del af Distributed Computing Environment (DCE) i 1990'erne. Den første specifikation blev offentliggjort i 1997 som ISO/IEC 11578:1996 og senere revideret i 2005 som en del af ISO/IEC 9834-8:2005.
Nøglemilepæle i UUID-historien:
- 1980'erne: Apollo Computer udvikler UUID-konceptet til deres Network Computing System.
- 1997: Første UUID-specifikation offentliggjort som ISO/IEC 11578:1996.
- 2005: UUID-specifikation revideret og offentliggjort som en del af ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definerer UUID-formatet og genereringsalgoritmerne, der bruges i dag.
Over tid er UUID'er blevet et vigtigt værktøj i distribuerede systemer og database-design, med forskellige implementeringer og tilpasninger på tværs af forskellige programmeringssprog og platforme.
Kodeeksempler
Her er eksempler på at generere UUID'er i forskellige programmeringssprog:
1import uuid
2
3## Generer en Version 4 (tilfældig) UUID
4random_uuid = uuid.uuid4()
5print(f"Version 4 UUID: {random_uuid}")
6
7## Generer en Version 1 (tidsbaseret) UUID
8time_based_uuid = uuid.uuid1()
9print(f"Version 1 UUID: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// Generer en Version 4 (tilfældig) UUID
4const randomUuid = uuidv4();
5console.log(`Version 4 UUID: ${randomUuid}`);
6
7// Generer en Version 1 (tidsbaseret) UUID
8const timeBasedUuid = uuidv1();
9console.log(`Version 1 UUID: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // Generer en Version 4 (tilfældig) UUID
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("Version 4 UUID: " + randomUuid);
8
9 // Generer en Version 1 (tidsbaseret) UUID
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("Version 1 UUID: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## Generer en Version 4 (tilfældig) UUID
4random_uuid = SecureRandom.uuid
5puts "Version 4 UUID: #{random_uuid}"
6
7## Ruby har ikke en indbygget metode til Version 1 UUID'er
8## Du skal bruge en gem som 'uuidtools' til det
9
1<?php
2// Generer en Version 4 (tilfældig) UUID
3$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
4 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
5 mt_rand(0, 0xffff),
6 mt_rand(0, 0x0fff) | 0x4000,
7 mt_rand(0, 0x3fff) | 0x8000,
8 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
9);
10echo "Version 4 UUID: " . $randomUuid . "\n";
11
12// PHP har ikke en indbygget metode til Version 1 UUID'er
13// Du skal bruge et bibliotek som 'ramsey/uuid' til det
14?>
15
Referencer
- 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
Feedback
Klik på feedback toasten for at begynde at give feedback om dette værktøj
Relaterede værktøjer
Opdag flere værktøjer, der kan være nyttige for dit workflow