Jika saya menggunakan Long uuid = UUID.randomUUID().getMostSignificantBits()
seberapa besar kemungkinan akan terjadi tabrakan. Ini memotong bit paling tidak signifikan, jadi ada kemungkinan Anda mengalami tabrakan, kan?
Menurut dokumentasi , metode statis UUID.randomUUID()
menghasilkan UUID tipe 4.
Ini berarti bahwa enam bit digunakan untuk beberapa jenis informasi dan 122 bit sisanya ditugaskan secara acak.
Enam bit non-acak didistribusikan dengan empat di bagian paling signifikan dari UUID dan dua di bagian paling tidak signifikan. Jadi, bagian terpenting dari UUID Anda berisi 60 bit keacakan, yang berarti Anda rata-rata perlu menghasilkan 2 ^ 30 UUID untuk mendapatkan tabrakan (dibandingkan dengan 2 ^ 61 untuk UUID lengkap).
Jadi saya akan mengatakan bahwa Anda agak aman. Namun, perlu diketahui bahwa ini sama sekali tidak benar untuk jenis UUID lainnya, seperti yang dikatakan Carl Seleborg.
Kebetulan, Anda akan sedikit lebih baik dengan menggunakan setengah paling tidak signifikan dari UUID (atau hanya menghasilkan panjang acak menggunakan SecureRandom).
Raymond Chen memiliki posting blog yang sangat bagus tentang ini:
GUID secara global unik, tetapi substring dari GUID tidak
sumber
Saya pikir ini adalah contoh terbaik untuk menggunakan randomUUID:
http://www.javapractices.com/topic/TopicAction.do?Id=56
sumber
Anda lebih baik hanya menghasilkan nilai acak panjang, maka semua bit acak. Di Jawa 6, Acak baru () menggunakan System.nanoTime () plus penghitung sebagai seed.
Ada berbagai tingkat keunikan.
Jika Anda memerlukan keunikan di banyak mesin, Anda bisa memiliki tabel basis data pusat untuk mengalokasikan id unik, atau bahkan batch id unik.
Jika Anda hanya perlu memiliki keunikan dalam satu aplikasi, Anda hanya dapat memiliki penghitung (atau penghitung yang dimulai dari currentTimeMillis () * 1000 atau nanoTime () tergantung pada kebutuhan Anda)
sumber
Gunakan Waktu
YYYYDDDD
(Tahun + Hari Tahun) sebagai awalan. Ini mengurangi fragmentasi database dalam tabel dan indeks. Metode ini kembalibyte[40]
. Saya menggunakannya di lingkungan hibrid di mana Active Directory SID (varbinary(85)
) adalah kunci untuk pengguna LDAP dan ID yang dibuat secara otomatis aplikasi digunakan untuk Pengguna non-LDAP. Juga sejumlah besar transaksi per hari dalam tabel transaksional (Industri Perbankan) tidak dapat menggunakanInt
jenis standar untuk Kuncisumber