UUID v1 vs v4 vs v5: Versi Mana yang Sebaiknya Anda Gunakan?
Jawaban Cepat
Gunakan UUID v4 (acak) secara default —tidak memerlukan koordinasi dan risiko tabrakan dapat diabaikan. Gunakan v1 (berbasis waktu) hanya ketika Anda memerlukan ID yang dapat dipesan berdasarkan waktu dan dapat mengamankan ID node. Gunakan v5 (namespace+name) ketika Anda memerlukan ID deterministik yang berasal dari sebuah nama. Hasilkan versi apa pun dengan Generator UUID gratis kami.
Perkenalan
UUID (Pengidentifikasi Unik Universal) adalah pengidentifikasi 128-bit yang dirender sebagai 36 karakter dalam grup hex 8-4-4-4-12, mis. 123e4567-e89b-12d3-a456-426614174000. RFC 9562 mendefinisikan beberapa versi; tiga yang paling sering Anda temui adalah v1 (waktu + MAC), v4 (acak), dan v5 (namespace + nama, SHA-1). Masing-masing membuat trade-off yang berbeda antara jaminan keunikan, kemampuan menyortir, dan determinisme.
Langkah demi Langkah
-
UUID v1 —berbasis waktu dan node
v1 mengkodekan stempel waktu 60-bit saat ini (interval 100-ns sejak 1582-10-15) dan ID node 48-bit (biasanya alamat MAC). ID yang dihasilkan pada node yang sama meningkat secara monoton dan dapat diurutkan berdasarkan waktu. Risiko: alamat MAC membocorkan identitas perangkat keras, dan kemiringan jam di seluruh node dapat merusak pemesanan.
-
UUID v4 —acak
v4 menggunakan 122 bit acak (6 bit ditetapkan untuk versi/varian). Dengan 122 bit acak, kemungkinan tabrakan di antara 2,71 triliun ID adalah 50% —untuk beban kerja realistis apa pun, peluangnya adalah nol. v4 tidak memerlukan koordinasi dan tidak mengungkapkan informasi host, menjadikannya default paling aman.
-
UUID v5 —ruang nama dan nama (SHA-1)
v5 melakukan hash pada namespace UUID dan string nama dengan SHA-1 untuk menghasilkan ID 128-bit deterministik. Pasangan (namespace, nama) yang sama selalu menghasilkan UUID yang sama, yang ideal untuk deduplikasi dan ID stabil yang berasal dari kunci alami. v3 adalah ide yang sama tetapi menggunakan MD5 (hindari).
-
Bandingkan trade-offnya
v1 dapat diurutkan tetapi membocorkan MAC dan memerlukan sinkronisasi jam. v4 acak dan pribadi tetapi tidak dapat disortir. v5 bersifat deterministik dan menghapus duplikat tetapi tidak acak —menebak namanya memungkinkan penyerang mereproduksi UUID. Pilih berdasarkan apakah Anda memerlukan pengurutan, keacakan, atau determinisme.
-
Pilih versi yang tepat untuk kasus Anda
Kunci utama basis data: v4 (atau v7 di sistem yang lebih baru agar dapat diatur berdasarkan waktu). Sistem terdistribusi tanpa koordinasi: v4. ID deterministik dari kunci alami (misalnya URL →UUID): v5. Log audit yang mendapat manfaat dari urutan waktu: v1 dengan ID simpul acak yang aman.
Contoh
UUID v1 (berbasis waktu, dapat diurutkan)
Masukan: Dihasilkan pada 28-08-2026T12:00:00Z pada node 00:11:22:33:44:55
Keluaran: 1ef7c1d0-2d3b-11f0-8000-001122334455 (digit versi '1', dapat diurutkan waktu)
UUID v4 (acak)
Masukan: Random generation
Keluaran: f47ac10b-58cc-4372-a567-0e02b2c3d479 (digit versi '4', bit acak)
UUID v5 (deterministik dari namespace+nama)
Masukan: Ruang nama DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8) + nama 'freeonlinetoolsgo.com'
Keluaran: 74738ff5-5367-5958-9aeb-0c1f1f1f1f1f (input yang sama selalu menghasilkan output yang sama)
Masalah Umum
- Menyimpan UUID sebagai VARCHAR(36) alih-alih tipe BINARY/UUID 16-byte asli: ini membuang 2x penyimpanan dan merusak kinerja indeks. Gunakan tipe kolom UUID asli jika tersedia.
- Menggunakan v1 tanpa mengamankan ID node: alamat MAC default membocorkan identitas perangkat keras dan merupakan masalah privasi. Gantikan dengan nilai 48-bit yang acak secara kriptografis per node.
- Dengan asumsi tabrakan v4 tidak mungkin terjadi: memang tidak mungkin terjadi —hanya saja secara astronomis tidak mungkin terjadi. Dengan 122 bit acak, Anda memerlukan ~2,71 triliun ID untuk peluang 50%. Untuk 1 miliar ID peluangnya adalah ~0,0000000000000001.
- Menggunakan v3 (berbasis MD5) daripada v5 (berbasis SHA-1): MD5 rusak, jadi v5 lebih disukai. Keduanya bersifat deterministik, tetapi v5 memiliki ketahanan benturan yang lebih kuat.
Kiat
- Defaultnya adalah v4 untuk hampir setiap kasus penggunaan — bersifat acak, pribadi, dan aman dari benturan tanpa koordinasi apa pun.
- Jika Anda memerlukan ID acak yang dapat diurutkan waktu, lihat UUID v7 (RFC 9562, 2024) yang menggabungkan stempel waktu Unix dengan bit acak — lebih baik daripada v1 untuk database modern.
- Gunakan v5 untuk menghasilkan ID stabil dari kunci alami (URLs, alamat email) sehingga masukan yang sama selalu dipetakan ke UUID yang sama —berguna untuk deduplikasi dan idempoten APIs.
- Hasilkan UUID pada klien jika memungkinkan untuk menghindari perjalanan bolak-balik ke server — Generator UUID kami berjalan sepenuhnya di browser Anda menggunakan crypto.getRandomValues().