w

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

  1. Kunci primer database: Digunakan sebagai kunci primer dalam database terdistribusi
  2. Identifikasi file: Mengidentifikasi file dalam sistem file
  3. Manajemen sesi: Pengidentifikasi sesi dalam aplikasi web
  4. Antrian pesan: Identifikasi unik pesan
  5. 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

  1. Penggunaan umum: Gunakan UUID v4
  2. Pengurutan waktu diperlukan: Gunakan UUID v1
  3. Determinisme diperlukan: Gunakan UUID v3 atau v5
  4. 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

Was this page helpful?