Panduan UUID: Versi, Format, dan Praktik Terbaik
UUID (Universally Unique Identifier) adalah pengidentifikasi 128-bit yang dirancang untuk unik di seluruh ruang dan waktu tanpa otoritas pusat. UUID merupakan pilihan standar untuk sistem terdistribusi di mana pembuatan ID secara independen — tanpa koordinasi — sangat penting.
Format UUID
UUID adalah angka 128-bit yang ditampilkan sebagai 32 digit heksadesimal dalam lima kelompok yang dipisahkan oleh tanda hubung:
550e8400-e29b-41d4-a716-446655440000
^^^^^^^^ ^^^^ ^^^^ ^^^^ ^^^^^^^^^^^^
time-low mid hi clk node
+ver +var
- Total: 128 bit (16 byte)
- Panjang string: 36 karakter (32 hex + 4 tanda hubung)
- Versi: Dikodekan pada karakter ke-13 (nibble "hi")
- Varian: Dikodekan pada karakter ke-17
Buat UUID secara instan dengan Generator UUID kami.
Versi UUID
UUID v1: Berbasis Waktu
Dihasilkan dari timestamp saat ini dan alamat MAC mesin.
// Structure: timestamp (60 bits) + clock sequence (14 bits) + node (48 bits)
6ba7b810-9dad-11d1-80b4-00c04fd430c8
Kelebihan: Dapat diurutkan secara alami berdasarkan waktu pembuatan, keunikan dijamin per mesin. Kekurangan: Mengekspos alamat MAC (masalah privasi), dapat mengungkapkan waktu pembuatan. Gunakan ketika: Anda memerlukan pengurutan waktu dan berada di lingkungan yang terkontrol.
UUID v4: Acak
Dihasilkan dari angka acak yang aman secara kriptografi. Ini adalah versi yang paling banyak digunakan.
// 122 random bits (6 bits reserved for version and variant)
f47ac10b-58cc-4372-a567-0e02b2c3d479
Kelebihan: Sederhana, tidak ada kebocoran informasi, tidak perlu koordinasi. Kekurangan: Tidak dapat diurutkan, performa indeks basis data sedikit lebih buruk dibandingkan ID sekuensial. Gunakan ketika: Keperluan umum — ini adalah pilihan default untuk sebagian besar aplikasi.
UUID v7: Acak Berurutan Waktu (Standar Baru)
Versi terbaru (RFC 9562, 2024), menggabungkan timestamp Unix dengan data acak.
// Structure: timestamp (48 bits) + random (74 bits)
018e7b50-4a00-7000-8000-000000000001
Kelebihan: Diurutkan secara alami berdasarkan waktu, performa indeks basis data yang sangat baik, tidak ada kebocoran informasi di luar presisi milidetik. Kekurangan: Lebih baru, beberapa pustaka mungkin belum mendukungnya. Gunakan ketika: Anda memerlukan ID unik yang diurutkan secara kronologis — ideal untuk primary key basis data.
Versi Lainnya
- UUID v3: Hash MD5 dari namespace dan nama. Deterministik.
- UUID v5: Hash SHA-1 dari namespace dan nama. Deterministik dan lebih direkomendasikan daripada v3.
- UUID v6: v1 yang diurutkan ulang untuk kemampuan pengurutan yang lebih baik. Digantikan oleh v7.
- Nil UUID: Semua nol (
00000000-0000-0000-0000-000000000000). Digunakan sebagai nilai sentinel.
Probabilitas Tabrakan
Seberapa besar kemungkinan dua UUID (v4) yang dihasilkan secara acak bertabrakan? Dengan 122 bit acak:
- Setelah menghasilkan 1 miliar UUID: probabilitas ≈ 1 dari 10^18
- Untuk memiliki peluang tabrakan 50%: Anda memerlukan sekitar 2,7 × 10^18 UUID
- Pada 1 miliar UUID per detik: akan memakan waktu sekitar 86 tahun
Untuk semua keperluan praktis, tabrakan UUID v4 tidak akan terjadi. Anda jauh lebih mungkin mengalami kegagalan perangkat keras.
UUID vs Format ID Lainnya
| Format | Panjang | Dapat Diurutkan | Unik | Aman untuk URL |
|---|---|---|---|---|
| UUID v4 | 36 karakter | Tidak | Ya | Ya |
| UUID v7 | 36 karakter | Ya | Ya | Ya |
| ULID | 26 karakter | Ya | Ya | Ya |
| nanoid | 21 karakter | Tidak | Kemungkinan | Ya |
| Auto-increment | Bervariasi | Ya | Per-tabel | Ya |
| Snowflake ID | 18-19 karakter | Ya | Per-sistem | Ya |
ULID (Universally Unique Lexicographically Sortable Identifier)
ULID adalah alternatif yang ringkas: timestamp 48-bit + acak 80-bit, dikodekan sebagai 26 karakter Crockford Base32. Mereka diurutkan secara leksikografis berdasarkan waktu pembuatan.
Kapan Menggunakan ID Auto-Increment
ID sekuensial lebih sederhana dan lebih efisien untuk aplikasi basis data tunggal. Gunakan UUID ketika Anda memerlukan:
- ID yang dihasilkan oleh beberapa sistem secara independen
- ID yang tidak mengungkapkan urutan penyisipan kepada pengguna eksternal
- ID yang ramah penggabungan untuk basis data terdistribusi
Pertimbangan Performa Basis Data
UUID acak (v4) menyebabkan fragmentasi indeks B-tree karena penyisipan terjadi di posisi acak. Ini dapat menurunkan performa penulisan 2-5x dibandingkan ID sekuensial pada tabel besar.
Solusi:
- Gunakan UUID v7: UUID berurutan waktu menyisipkan secara sekuensial, menyamai performa auto-increment
- Simpan sebagai binary: Gunakan
BINARY(16)alih-alihCHAR(36)untuk menghemat 55% penyimpanan - Gunakan ULID: Dapat diurutkan dan lebih ringkas dari UUID
-- PostgreSQL: native UUID type (16 bytes, efficient)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
-- MySQL: store as BINARY(16) for performance
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
Membuat UUID
Command Line
# macOS/Linux
uuidgen
# Python one-liner
python3 -c "import uuid; print(uuid.uuid4())"
JavaScript
// Built-in (Node.js 19+, modern browsers)
crypto.randomUUID();
// For UUID v7 (using uuid package)
import { v7 } from 'uuid';
const id = v7();
Python
import uuid
uuid.uuid4() # Random
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com') # Name-based
Untuk pembuatan cepat tanpa kode, Generator UUID kami membuat UUID v4 secara instan di browser Anda.
FAQ
Haruskah saya menggunakan UUID atau integer auto-increment untuk primary key basis data saya?
Untuk aplikasi basis data tunggal, integer auto-increment lebih sederhana dan lebih cepat. Untuk sistem terdistribusi, layanan mikro, atau ketika Anda perlu membuat ID di sisi klien sebelum penyisipan ke basis data, UUID (sebaiknya v7) adalah pilihan yang lebih baik. Jika Anda menggunakan PostgreSQL, dukungan UUID bawaan membuat perbedaan performa dapat diabaikan.
Dapatkah UUID digunakan sebagai token keamanan?
UUID v4 menggunakan 122 bit keacakan dari sumber kriptografi, yang memberikan entropi yang baik. Namun, untuk token keamanan (API key, session ID), lebih baik menggunakan format token yang dirancang khusus dengan properti tambahan seperti checksum, pengkodean kedaluwarsa, atau identifikasi prefiks. UUID untuk identitas, bukan autentikasi.
Sumber Terkait
- Generator UUID — Buat UUID secara instan secara online
- Perbandingan Algoritma Hash — Memahami fungsi hash di balik UUID v3 dan v5
- Pola Desain JSON API — Menggunakan UUID secara efektif dalam respons API