uuid_short()
menghasilkan konglomerasi bitwise dari ID server, komponen waktu yang cukup statis, dan bilangan bulat 24 bit yang meningkat secara berurutan. Bit-bit ini dimasukkan ke dalam bilangan bulat 8 byte. Komponen waktu didasarkan pada waktu boot server.
uuid()
menghasilkan string hex yang mewakili 16 byte versi1 UUID. UUID versi 1 adalah konglomerasi bitwise dari ID server, stempel waktu saat ini, beberapa byte yang ikut bermain jika Anda membuat ID dengan kecepatan tinggi, dan beberapa bit utilitas.
Untuk menjawab pertanyaan Anda:apakah uuid_short
memberikan keunikan ruang dan waktu yang menyaingi uuid
? Jawabannya adalah tidak. Contoh kasus, ID server dalam uuid_short
hanya satu byte. Jadi jika Anda memiliki 256 server atau lebih, setidaknya beberapa di antaranya akan memiliki id node yang sama, yang berarti Anda kehilangan keunikan ruang. Sebagai perbandingan, ID server dalam UUID versi 1 panjangnya 6 byte, secara efektif menghilangkan kemungkinan duplikat untuk semua kecuali kumpulan server perusahaan terbesar :)
Pertanyaan yang lebih baik adalah apakah uuid_short
cukup baik. Anda dapat melihat tabrakan ID jika Anda :
- Hasilkan lebih dari 16 juta IDS dari server yang sama dalam waktu singkat. ***
- Boot server dengan ID server yang sama pada waktu yang sama persis, dan bagikan data di antara mereka.
- Bermain dengan jam sistem lalu reboot server Anda.
Masalah kedua tampaknya tidak mungkin bagi kebanyakan orang, tetapi yang pertama patut diselidiki sebelum Anda berkomitmen untuk membuat uuid_short
dasar kunci Anda.
*** Berdasarkan dokumen mysql untuk uuid_short
, sepertinya Anda akan melihat tabrakan jika Anda membuat lebih dari 16 juta ID selama waktu aktif satu server. Tapi itu akan konyol. Dokumen mysql selanjutnya mengatakan bahwa Anda baik-baik saja selama Anda tidak menghasilkan 16 juta ID per detik. Itu menyiratkan bahwa mereka harus menabrak beberapa bit dalam stempel waktu jika Anda menghabiskan 16 juta ID berurutan. Saya belum menguji ini.