Setiap baris database, setiap sumber daya API, dan setiap peristiwa terdistribusi membutuhkan ID. Masalahnya bukan menghasilkan ID — tapi memilih format yang tidak akan menyebabkan masalah enam bulan kemudian ketika indeks Postgres terfragmen dan URL-nya terlihat seperti noise.
Berikut yang lengkap perbandingan generator UUID: UUID v4, UUID v7, ULID, CUID2, dan Snowflake — apa yang mereka beri, di mana mereka gagal, dan mana yang seharusnya Anda gunakan.
UUID v4: Default Aman (Dengan Satu Masalah Besar)
UUID v4 adalah 128 bit keacakan, berformat sebagai 550e8400-e29b-41d4-a716-446655440000. Ini dipahami secara universal, didukung oleh setiap bahasa, setiap database, dan setiap ORM di planet ini.
Peluang kolisi hampir nol — Anda harus menghasilkan satu miliar UUID per detik selama 85 tahun sebelum mencapai peluang 50% untuk satu kolisi. Ini tidak menjadi masalah dalam praktik.
Masalahnya adalah urutan. UUID v4 adalah kompleks secara acak, yang berarti menambahkan baris ke dalam tabel dengan indeks UUID menyebabkan penempatan menyebar di seluruh B-tree. Pada skala besar, ini menyebabkan pembagian halaman, fragmentasi indeks, dan penurunan kinerja insert. Jika Anda menambahkan ribuan baris per detik ke tabel MySQL atau Postgres dengan primary key UUID, Anda akan merasakannya.
UUID v4 juga berukuran 36 karakter sebagai string — tidak aman untuk URL tanpa enkripsi, dan terlalu besar dibandingkan pilihan lainnya.
UUID v7: Sahabat yang Lebih Baik dari UUID v4
UUID v7 memperbaiki masalah urutan. Ini adalah UUID yang terurut berdasarkan waktu, di mana bit-bit terpenting mengkodekan waktu milidetik, dan sisanya acak. Hasilnya: 01875f3a-7b2d-7f8e-a3d1-4b2e6c1a0f93.
Baris yang dimasukkan secara kronologis tetap berada secara hampir berurutan di indeks. Ini merupakan kemenangan besar untuk beban penulisan. UUID v7 kompatibel dengan semua infrastruktur UUID lama — format, panjang field, dan ekspektasi dukungan perpustakaan sama — sambil menambahkan kemampuan urutan.
RFC-nya ditetapkan pada tahun 2022 dan dukungan perpustakaan sedang berkembang cepat. Jika Anda sudah menggunakan UUID dan tidak bisa mengubah skema, beralih dari v4 ke v7 memiliki risiko rendah dan manfaat tinggi.
ULID: Pilihan yang Paling Ramah untuk Pengembang
ULID (Universally Unique Lexicographically Sortable Identifier) mengkodekan waktu 48-bit dan 80 bit keacakan ke dalam 26 karakter Base32: 01ARZ3NDEKTSV4RRFFQ69G5FAV.
Apa yang membuatnya unik:
- Dapat diurutkan secara default — pengurutan leksikografis adalah pengurutan kronologis
- Aman untuk URL — tanpa garis miring, tanpa karakter khusus
- Tidak peka huruf besar/kecil — menghindari
0/Odan1/Iketidakjelasan dengan menghilangkan karakter tersebut dari alfabet - Rata-rata — 26 karakter dibandingkan 36 untuk string UUID
ULID adalah pilihan paling praktis untuk proyek baru yang tidak memiliki kendala warisan. Ini cukup untuk kebanyakan kasus penggunaan, cukup pendek untuk URL, dan cukup mudah dibaca sehingga manusia bisa menyalinnya tanpa kesalahan ketik.
Satu catatan: jika Anda menghasilkan beberapa ULID dalam waktu yang sama, urutan monoton terjamin per-proses tetapi tidak di antara node terdistribusi. Untuk kebanyakan aplikasi, ini cukup baik.
CUID2: Didesain untuk Sistem Terdistribusi
CUID2 adalah pewarisan dari CUID, direvisi dari nol untuk keamanan dan ketahanan kolisi dalam lingkungan terdistribusi. CUID2 terlihat seperti: clh3uj5ln0000qzrmn831mbhe.
Ini menggunakan hash SHA-3 dari kombinasi waktu, counter, fingerprint (ID proses + nama mesin), dan byte acak. Fingerprint adalah perbedaannya — dirancang secara khusus untuk mencegah kolisi ketika Anda menjalankan banyak generator ID secara bersamaan di banyak server.
CUID2 adalah tidak dapat diurutkan. Ini memprioritaskan ketahanan kolisi dan ketidakdugaan daripada urutan waktu. Jika Anda membangun sistem di mana ID dihasilkan oleh klien yang tidak dapat dipercaya atau di banyak node yang terpisah dan keamanan menjadi kekhawatiran, CUID2 layak untuk pertimbangan.
Untuk kebanyakan API backend, ini terlalu berlebihan.
ID Snowflake: Kinerja Tinggi, Tapi Anda Harus Mengelolanya
ID Snowflake diciptakan di Twitter untuk menghasilkan ID unik hingga jutaan per detik di lingkungan terdistribusi. ID Snowflake adalah bilangan bulat 64-bit: waktu (41 bit) + ID pusat (5 bit) + ID mesin (5 bit) + urutan (12 bit).
Mereka dapat diurutkan, kompak (masuk dalam BIGINT), dan sangat cepat. Discord, Instagram, dan banyak sistem berbasis skala tinggi menggunakan pola ini.
Kesalahan utamanya: Anda perlu mengelola ID mesin. Artinya, Anda membutuhkan layanan koordinasi (ZooKeeper, etcd, atau tabel database) untuk memberikan ID mesin unik ke setiap generator ID. Jika dua node memiliki ID mesin yang sama, Anda akan mendapatkan kolisi. Mengatur ini dengan benar bukan hal yang mudah, dan menjaga keberlangsungan ini adalah beban operasional.
Kecuali Anda menghasilkan jutaan ID per detik, kompleksitas ini tidak layak.
Perbandingan
| UUID versi 4 | UUID v7 | ULID | CUID2 | Snowflake | |
|---|---|---|---|---|---|
| Dapat diurutkan | TIDAK | Ya | Ya | TIDAK | Ya |
| Aman untuk URL | Tidak (dengan garis miring) | Tidak (dengan garis miring) | Ya | Ya | Ya (bilangan bulat) |
| Tahan benturan | Sangat tinggi | Sangat tinggi | Tinggi | Sangat tinggi | Tinggi (dengan koordinasi) |
| Kompleksitas | Tidak ada | Tidak ada | Tidak ada | Rendah | Tinggi |
| Kasus penggunaan umum | Sistem warisan, penggunaan umum | Kunci utama database | API, URL, proyek baru | Klien atau sistem terdistribusi yang tidak dapat dipercaya | Sistem berkecepatan tinggi |
Menghasilkan ID di Node.js
// UUID v4
import { v4 as uuidv4 } from 'uuid';
console.log(uuidv4()); // '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
// UUID v7
import { v7 as uuidv7 } from 'uuid';
console.log(uuidv7()); // '01875f3a-7b2d-7000-8000-4b2e6c1a0f93'
// ULID
import { ulid } from 'ulid';
console.log(ulid()); // '01ARZ3NDEKTSV4RRFFQ69G5FAV'
// CUID2
import { createId } from '@paralleldrive/cuid2';
console.log(createId()); // 'clh3uj5ln0000qzrmn831mbhe'
// Snowflake (using @socialgouv/nextid for simplicity)
import Snowflake from '@socialgouv/nextid';
const snowflake = new Snowflake(1n); // machine ID = 1
console.log(snowflake.nextId().toString()); // '1641024000000000001'
Anda bisa menguji generasi UUID secara langsung dengan IO Tools Generator UUID — ini mendukung UUID v1 hingga v7 dan generasi massal tanpa perlu menginstal apa pun.
Mana yang Harus Anda Gunakan?
Berikut adalah rekomendasi nyata, bukan versi "tergantung" yang biasa:
- Proyek baru, tanpa kendala warisan: Uji dengan validator: ULID. Dapat diurutkan, aman untuk URL, kompak. Ini adalah default terbaik.
- Sudah menggunakan UUID, perlu kinerja database yang lebih baik: Perpindahan ke UUID v7. Perubahan langsung, kemenangan besar pada indeks.
- ID yang dihasilkan oleh klien atau di antara node terdistribusi yang tidak dapat dipercaya: Uji dengan validator: CUID2. Fingerprint membuat ketahanan terhadap kolisi kuat bahkan dalam kondisi adversarial.
- Sistem berkecepatan tinggi (lebih dari 100.000 ID/detik), bersedia mengelola ID mesin: Uji dengan validator: Snowflake. Jika tidak, tidak perlu menggantinya.
- UUID v4: Hanya jika Anda memelihara kode lama dan tidak bisa mengubah format. Hentikan penggunaannya untuk tabel baru.
Zaman default menggunakan UUID v4 untuk semua telah berakhir. ULID adalah default baru untuk kebanyakan kasus, dan UUID v7 adalah jalur perbaikan yang tepat jika Anda sudah berada di zona UUID. Pilih satu dan lanjutkan.
Anda mungkin juga menyukai
Instal Ekstensi Kami
Tambahkan alat IO ke browser favorit Anda untuk akses instan dan pencarian lebih cepat
恵 Papan Skor Telah Tiba!
Papan Skor adalah cara yang menyenangkan untuk melacak permainan Anda, semua data disimpan di browser Anda. Lebih banyak fitur akan segera hadir!
Alat Wajib Coba
Lihat semua Pendatang baru
Lihat semuaMemperbarui: Kita alat terbaru was added on Mei 7, 2026
