Generator UUID
Apa itu UUID?
UUID (Universally Unique Identifier, Pengidentifikasi Unik Universal) adalah angka 128 bit yang digunakan untuk mengidentifikasi informasi secara unik dalam sistem komputer. UUID juga disebut GUID (Globally Unique Identifier, Pengidentifikasi Unik Global).
Karakteristik UUID
- Keunikan: Probabilitas menghasilkan UUID duplikat dalam sistem terdistribusi sangat rendah
- Standardisasi: Sesuai dengan standar RFC 4122
- Cross-platform: Dapat digunakan di berbagai sistem operasi dan bahasa pemrograman
- Terdesentralisasi: Tidak memerlukan otoritas koordinasi pusat
Skenario Aplikasi UUID
- Kunci primer database: Digunakan sebagai kunci primer dalam database terdistribusi
- Identifikasi file: Mengidentifikasi file dalam sistem file
- Manajemen sesi: Pengidentifikasi sesi dalam aplikasi web
- Antrian pesan: Identifikasi unik pesan
- Antarmuka API: Identifikasi permintaan dan respons API
Detail Versi UUID
UUID v1 (berbasis waktu dan node)
Format: xxxxxxxx-xxxx-1xxx-yxxx-xxxxxxxxxxxx
Karakteristik:
- Berbasis waktu saat ini dan ID node (biasanya alamat MAC)
- Berisi informasi timestamp, dapat diurutkan berdasarkan waktu
- Dapat mengungkapkan informasi alamat MAC
Algoritma generasi:
// Contoh pseudocode
function generateUUIDv1() {
const timestamp = Date.now();
const nodeId = getMACAddress();
const clockSeq = random16Bit();
return formatUUID(timestamp, clockSeq, nodeId);
}
UUID v3 (berbasis namespace dan MD5)
Format: xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx
Karakteristik:
- Berbasis hash MD5 dari UUID namespace dan nama
- Namespace dan nama yang sama selalu menghasilkan UUID yang sama
- Berlaku untuk skenario yang memerlukan UUID deterministik
Algoritma generasi:
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 (generasi acak)
Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
Karakteristik:
- Generasi sepenuhnya acak
- Versi UUID yang paling umum digunakan
- Tidak berisi informasi yang bermakna
Algoritma generasi:
function generateUUIDv4() {
const bytes = crypto.randomBytes(16);
bytes[6] = (bytes[6] & 0x0f) | 0x40; // Versi 4
bytes[8] = (bytes[8] & 0x3f) | 0x80; // Variant
return formatUUID(bytes);
}
UUID v5 (berbasis namespace dan SHA-1)
Format: xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx
Karakteristik:
- Berbasis hash SHA-1 dari UUID namespace dan nama
- Lebih aman dari v3 (menggunakan SHA-1 bukan MD5)
- Berlaku untuk skenario yang memerlukan UUID deterministik
UUID NIL (UUID kosong)
Format: 00000000-0000-0000-0000-000000000000
Karakteristik:
- Semua bit adalah 0
- Digunakan untuk mewakili "tidak ada UUID" atau "UUID tidak dikenal"
- Digunakan sebagai nilai default dalam desain database
Namespace yang Didefinisikan Sebelumnya
UUID Namespace Standar
- Namespace DNS:
6ba7b810-9dad-11d1-80b4-00c04fd430c8
- Namespace URL:
6ba7b811-9dad-11d1-80b4-00c04fd430c8
- Namespace OID:
6ba7b812-9dad-11d1-80b4-00c04fd430c8
- Namespace X.500 DN:
6ba7b814-9dad-11d1-80b4-00c04fd430c8
Contoh penggunaan
// Menghasilkan UUID v3 menggunakan namespace DNS
const dnsNamespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
const uuid = generateUUIDv3(dnsNamespace, 'example.com');
// Hasil: 5df41881-3aed-3515-88a7-2f4a814cf09e
Antarmuka API
Generasi UUID tunggal
// Menghasilkan UUID v4
const uuid = generateUUID('v4');
// Menghasilkan UUID v1
const uuid = generateUUID('v1');
// Menghasilkan UUID v3
const uuid = generateUUID('v3', {
namespace: '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
name: 'example.com',
});
Generasi UUID batch
// Generasi UUID batch
const uuids = generateMultipleUUIDs('v4', 10);
// Menghasilkan UUID dari berbagai versi
const mixedUUIDs = generateMultipleUUIDs(['v1', 'v4', 'v5'], 5);
Validasi UUID
// Memvalidasi format UUID
const isValid = validateUUID('550e8400-e29b-41d4-a716-446655440000');
// Mendapatkan versi UUID
const version = getUUIDVersion('550e8400-e29b-41d4-a716-446655440000');
Pertimbangan Performa
Kecepatan generasi
- v4 (acak): Tercepat, sekitar 100.000 UUID/detik
- v1 (waktu): Sedang, sekitar 50.000 UUID/detik
- v3/v5 (hash): Lebih lambat, sekitar 10.000 UUID/detik
Penggunaan memori
- Setiap UUID menempati 16 byte
- Perhatikan penggunaan memori saat generasi batch
Keamanan konkurensi
- v4 menggunakan generator angka acak yang aman secara kriptografis
- v1 memerlukan memastikan keunikan urutan jam
Praktik Terbaik
Pemilihan versi UUID
- Penggunaan umum: Gunakan UUID v4
- Pengurutan waktu diperlukan: Gunakan UUID v1
- Determinisme diperlukan: Gunakan UUID v3 atau v5
- Kunci primer database: Rekomendasikan UUID v4
Optimasi penyimpanan
-- Penyimpanan UUID di PostgreSQL
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255)
);
-- Membuat indeks
CREATE INDEX idx_users_id ON users(id);
Optimasi performa
// Menggunakan object pool untuk mengurangi alokasi memori
const uuidPool = new Array(1000).fill(null).map(() => generateUUIDv4());
// Menggunakan Web Workers untuk generasi batch
const worker = new Worker('uuid-worker.js');
worker.postMessage({ type: 'generate', count: 1000 });
Pertanyaan Umum
Q: Apa perbedaan antara UUID dan GUID?
A: UUID dan GUID pada dasarnya sama, hanya nama yang berbeda. UUID adalah istilah standar RFC, GUID adalah istilah Microsoft.
Q: Apakah UUID bisa duplikat?
A: Secara teoritis mungkin, tetapi probabilitasnya sangat rendah. Probabilitas duplikasi UUID v4 sekitar 2,71 × 10^-36.
Q: Bagaimana memilih versi UUID?
A: Pilih sesuai kebutuhan:
- Kebutuhan keacakan: v4
- Kebutuhan informasi waktu: v1
- Kebutuhan determinisme: v3 atau v5
Q: Apakah UUID mempengaruhi performa database?
A: Dapat mempengaruhi karena UUID lebih besar dari kunci primer integer. Rekomendasi:
- Gunakan indeks B-tree
- Pertimbangkan penggunaan UUID v1 (pengurutan waktu)
- Gunakan kunci primer integer dalam kasus yang tepat
Alat Terkait
Spesifikasi Teknis
Standar RFC
- RFC 4122: Spesifikasi UUID
- RFC 4122 Section 4.1.3: Definisi versi UUID
Dukungan bahasa pemrograman
- JavaScript:
crypto.randomUUID()
(Node.js 14.17+) - Python: Modul
uuid
- Java:
java.util.UUID
- C#:
System.Guid
Update terakhir: 20 Januari 2024