UUID-Generator
Was ist eine UUID?
UUID (Universally Unique Identifier, Universell eindeutiger Bezeichner) ist eine 128-Bit-Zahl, die verwendet wird, um Informationen in Computersystemen eindeutig zu identifizieren. UUID wird auch als GUID (Globally Unique Identifier, Global eindeutiger Bezeichner) bezeichnet.
Eigenschaften von UUID
- Eindeutigkeit: Die Wahrscheinlichkeit, doppelte UUIDs in einem verteilten System zu generieren, ist extrem gering
- Standardisierung: Konform mit RFC 4122-Standard
- Plattformübergreifend: Kann in verschiedenen Betriebssystemen und Programmiersprachen verwendet werden
- Dezentralisiert: Benötigt keine zentrale Koordinationsbehörde
Anwendungsszenarien von UUID
- Datenbank-Primärschlüssel: Verwendet als Primärschlüssel in verteilten Datenbanken
- Dateiidentifikation: Identifizierung von Dateien im Dateisystem
- Sitzungsverwaltung: Sitzungsbezeichner in Web-Anwendungen
- Nachrichtenwarteschlange: Eindeutige Identifikation von Nachrichten
- API-Schnittstelle: Identifikation von API-Anfragen und -Antworten
Detaillierte UUID-Versionen
UUID v1 (zeit- und knotenbasiert)
Format: xxxxxxxx-xxxx-1xxx-yxxx-xxxxxxxxxxxx
Eigenschaften:
- Basierend auf aktueller Zeit und Knoten-ID (normalerweise MAC-Adresse)
- Enthält Zeitstempel-Informationen, kann zeitlich sortiert werden
- Kann MAC-Adress-Informationen preisgeben
Generierungsalgorithmus:
// Pseudocode-Beispiel
function generateUUIDv1() {
const timestamp = Date.now();
const nodeId = getMACAddress();
const clockSeq = random16Bit();
return formatUUID(timestamp, clockSeq, nodeId);
}
UUID v3 (namespace- und MD5-basiert)
Format: xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx
Eigenschaften:
- Basierend auf MD5-Hash von Namespace-UUID und Name
- Derselbe Namespace und derselbe Name erzeugen immer dieselbe UUID
- Anwendbar auf Szenarien, die deterministische UUIDs benötigen
Generierungsalgorithmus:
function generateUUIDv3(namespace, name) {
const namespaceBytes = parseUUID(namespace);
const nameBytes = Buffer.from(name, 'utf8');
const hash = crypto
.createHash('md5')
.update(Buffer.concat([namespaceBytes, nameBytes]))
.digest();
return formatUUIDv3(hash);
}
UUID v4 (zufällige Generierung)
Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
Eigenschaften:
- Vollständig zufällige Generierung
- Am häufigsten verwendete UUID-Version
- Enthält keine bedeutungsvollen Informationen
Generierungsalgorithmus:
function generateUUIDv4() {
const bytes = crypto.randomBytes(16);
bytes[6] = (bytes[6] & 0x0f) | 0x40; // Version 4
bytes[8] = (bytes[8] & 0x3f) | 0x80; // Variante
return formatUUID(bytes);
}
UUID v5 (namespace- und SHA-1-basiert)
Format: xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx
Eigenschaften:
- Basierend auf SHA-1-Hash von Namespace-UUID und Name
- Sicherer als v3 (verwendet SHA-1 statt MD5)
- Anwendbar auf Szenarien, die deterministische UUIDs benötigen
UUID NIL (leere UUID)
Format: 00000000-0000-0000-0000-000000000000
Eigenschaften:
- Alle Bits sind 0
- Verwendet, um "keine UUID" oder "unbekannte UUID" darzustellen
- Verwendet als Standardwert in Datenbankdesign
Vordefinierte Namespaces
Standard-Namespace-UUIDs
- DNS-Namespace:
6ba7b810-9dad-11d1-80b4-00c04fd430c8
- URL-Namespace:
6ba7b811-9dad-11d1-80b4-00c04fd430c8
- OID-Namespace:
6ba7b812-9dad-11d1-80b4-00c04fd430c8
- X.500 DN-Namespace:
6ba7b814-9dad-11d1-80b4-00c04fd430c8
Verwendungsbeispiel
// UUID v3 mit DNS-Namespace generieren
const dnsNamespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
const uuid = generateUUIDv3(dnsNamespace, 'example.com');
// Ergebnis: 5df41881-3aed-3515-88a7-2f4a814cf09e
API-Schnittstelle
Einzelne UUID-Generierung
// UUID v4 generieren
const uuid = generateUUID('v4');
// UUID v1 generieren
const uuid = generateUUID('v1');
// UUID v3 generieren
const uuid = generateUUID('v3', {
namespace: '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
name: 'example.com',
});
Batch-UUID-Generierung
// Batch-UUID-Generierung
const uuids = generateMultipleUUIDs('v4', 10);
// UUIDs verschiedener Versionen generieren
const mixedUUIDs = generateMultipleUUIDs(['v1', 'v4', 'v5'], 5);
UUID-Validierung
// UUID-Format validieren
const isValid = validateUUID('550e8400-e29b-41d4-a716-446655440000');
// UUID-Version abrufen
const version = getUUIDVersion('550e8400-e29b-41d4-a716-446655440000');
Leistungsüberlegungen
Generierungsgeschwindigkeit
- v4 (zufällig): Am schnellsten, etwa 100.000 UUID/Sekunde
- v1 (Zeit): Mittel, etwa 50.000 UUID/Sekunde
- v3/v5 (Hash): Langsamer, etwa 10.000 UUID/Sekunde
Speichernutzung
- Jede UUID belegt 16 Byte
- Achten Sie auf Speichernutzung bei Batch-Generierung
Nebenläufigkeitssicherheit
- v4 verwendet einen kryptographisch sicheren Zufallszahlengenerator
- v1 erfordert Sicherstellung der Eindeutigkeit der Uhrsequenz
Best Practices
UUID-Versionsauswahl
- Allgemeine Verwendung: UUID v4 verwenden
- Zeitliche Sortierung erforderlich: UUID v1 verwenden
- Determinismus erforderlich: UUID v3 oder v5 verwenden
- Datenbank-Primärschlüssel: UUID v4 empfehlen
Speicheroptimierung
-- UUID-Speicherung in PostgreSQL
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255)
);
-- Index erstellen
CREATE INDEX idx_users_id ON users(id);
Leistungsoptimierung
// Objektpool verwenden, um Speicherzuweisung zu reduzieren
const uuidPool = new Array(1000).fill(null).map(() => generateUUIDv4());
// Web Workers für Batch-Generierung verwenden
const worker = new Worker('uuid-worker.js');
worker.postMessage({ type: 'generate', count: 1000 });
Häufig gestellte Fragen
F: Was ist der Unterschied zwischen UUID und GUID?
A: UUID und GUID sind im Wesentlichen gleich, nur die Namen unterscheiden sich. UUID ist der RFC-Standardbegriff, GUID ist der Microsoft-Begriff.
F: Können UUIDs dupliziert werden?
A: Theoretisch möglich, aber die Wahrscheinlichkeit ist extrem gering. Die Duplikationswahrscheinlichkeit einer v4 UUID beträgt etwa 2,71 × 10^-36.
F: Wie wähle ich die UUID-Version?
A: Je nach Anforderungen wählen:
- Zufälligkeit erforderlich: v4
- Zeitinformationen erforderlich: v1
- Determinismus erforderlich: v3 oder v5
F: Beeinflusst UUID die Datenbankleistung?
A: Kann beeinflussen, da UUID größer als ein Integer-Primärschlüssel ist. Empfehlungen:
- B-Tree-Indizes verwenden
- Verwendung von UUID v1 (zeitliche Sortierung) erwägen
- Integer-Primärschlüssel in angemessenen Fällen verwenden
Verwandte Tools
Technische Spezifikationen
RFC-Standards
- RFC 4122: UUID-Spezifikation
- RFC 4122 Section 4.1.3: UUID-Versionsdefinitionen
Programmiersprachen-Unterstützung
- JavaScript:
crypto.randomUUID()
(Node.js 14.17+) - Python:
uuid
-Modul - Java:
java.util.UUID
- C#:
System.Guid
Letzte Aktualisierung: 20. Januar 2024