UUID adalah pengenal 128-bit yang dapat Anda buat di mana saja, tanpa pusat registri, dan tetap dipercaya unik. Namun tidak semua UUID dibuat dengan cara yang sama. Panduan ini menjelaskan lima versi yang sebenarnya akan Anda temui, mengapa v7 lebih unggul dalam hal kunci basis data, bagaimana UUID namespace tetap bersifat deterministik, dan seberapa kecil kemungkinan terjadinya tabrakan.
v4 vs v7 — acak vs berdasarkan waktu
Versi 4 memiliki keacakan murni 122 bit, yang menjadikannya UUID paling sederhana dan paling banyak didukung. Kelemahannya muncul dalam skala besar: karena nilainya tidak berurutan, memasukkan kunci v4 ke dalam indeks database akan menyebarkan penulisan di seluruh B-tree, menyebabkan pemisahan halaman dan cache hilang.
Versi 7 memperbaikinya dengan menempatkan stempel waktu Unix-milidetik 48-bit di bit tinggi. Hasilnya masih memiliki banyak keacakan untuk keunikannya, namun UUID yang berurutan memiliki awalan yang sama, sehingga baris baru ditambahkan berdekatan satu sama lain. Hal ini membuat indeks tetap kompak dan menyisipkan dengan cepat — itulah sebabnya v7 semakin menjadi default untuk kunci utama baru.
UUID Namespace (v5 dan v3)
Versi 5 dan 3 bersifat deterministik. Anda memberi mereka UUID namespace dan nama; mereka menggabungkan byte-byte tersebut dan melakukan hashing — SHA-1 untuk v5, MD5 untuk v3 — lalu membuat UUID dari intisarinya. Masukan yang sama selalu menghasilkan UUID yang sama, yang sempurna untuk mendapatkan ID stabil dari sesuatu yang sudah Anda miliki, seperti URL atau jalur file.
Pilih v5 daripada v3: SHA-1 lebih kuat dari MD5, dan v3 hadir terutama untuk kompatibilitas dengan sistem lama. RFC 4122 mengirimkan empat namespace standar (DNS, URL, OID, X.500), dan Anda dapat menentukan sendiri dengan menyediakan UUID apa pun sebagai namespace.
Seberapa besar kemungkinan terjadinya tabrakan?
Dengan 122 bit acak, versi 4 mengambil sekitar 5,3 × 1036 nilai yang mungkin. Dengan menggunakan perkiraan masalah ulang tahun, Anda perlu menghasilkan sekitar 2,71 × 1018 (2,71 triliun) UUID sebelum mencapai 50% kemungkinan terjadinya tabrakan tunggal — sekitar satu miliar UUID setiap detik selama 85 tahun.
v7 membawa lebih sedikit bit acak (74) namun mencakupnya hingga satu milidetik, sehingga risiko tabrakan praktis hanya penting jika Anda menghasilkan volume yang sangat besar dalam milidetik yang sama pada mesin yang sama. Untuk hampir semua aplikasi, kedua versi dapat dianggap bebas tabrakan.