Dacă am'm, folosind Mult uuid = UUID.randomUUID().getMostSignificantBits()` cât este de probabil pentru a obține o coliziune. Se taie puțin semnificativi biți, astfel încât nu există o posibilitate ca tu a alerga într-o coliziune, nu?
Potrivit documentatiei]1, metoda statică UUID.randomUUID()
generează un tip de 4 UUID.
Acest lucru înseamnă că șase biți sunt utilizate pentru un anumit tip de informații și restul de 122 de biți sunt atribuite în mod aleatoriu.
Cele șase non-aleatoare de biți sunt distribuite cu patru din cele mai importante jumătate de UUID și două în cel mai puțin semnificativ jumătate. Astfel, cele mai semnificative jumătate de UUID-ul contine 60 de bucati de dezordine, ceea ce înseamnă că, în medie, aveți nevoie pentru a genera 2^30 full computer pentru a obține o coliziune (în comparație cu 2^61 pentru întreaga UUID).
Deci, aș spune că sunt destul de în siguranță. Rețineți, totuși, că acest lucru nu este absolut adevărat pentru alte tipuri de Uuid, ca Carl Seleborg mențiuni.
De altfel, ar fi puțin mai bine, cu ajutorul cel mai puțin semnificativ jumătate de UUID (sau doar generarea aleatoare mult timp folosind SecureRandom).
Raymond Chen are un excelent blog post pe acest:
Guid-urile sunt unice la nivel global, dar siruri de Guid-urile sunt't
Esti mai bine doar generarea aleatoare de mult valoarea, atunci toți biții sunt aleatoare. În Java 6, new Random() utilizează Sistemul.nanoTime (), plus un contor ca o sămânță.
Există diferite niveluri de unicitate.
Dacă ai nevoie de unicitatea peste multe masini, ai putea avea o bază de date centrală de masă pentru alocarea de id-uri unice, sau chiar de loturi de id-uri unice.
Dacă aveți nevoie doar de a avea unicitatea într-o singură aplicație puteți avea doar un contor (sau un contor care pornește de la currentTimeMillis()*1000 sau nanoTime() în funcție de cerințele dumneavoastră)
Timp de utilizare YYYYDDDD
(An + Zi din An) ca prefix. Acest lucru reduce fragmentarea bazei de date în tabele și indecși. Această metodă returnează byte[40]
. L-am folosit într-un mediu hibrid în cazul în care Active Directory SID (varbinary(85)
) este cheia pentru utilizatori LDAP și o aplicație de auto-generat ID-ul este folosit pentru non-Utilizatori LDAP. De asemenea, numărul mare de tranzacții pe zi, în tranzacționale tabele (Industria Bancară) nu poate folosi standard Int` tipuri de Chei
private static final DecimalFormat timeFormat4 = new DecimalFormat("0000;0000");
public static byte[] getSidWithCalendar() {
Calendar cal = Calendar.getInstance();
String val = String.valueOf(cal.get(Calendar.YEAR));
val += timeFormat4.format(cal.get(Calendar.DAY_OF_YEAR));
val += UUID.randomUUID().toString().replaceAll("-", "");
return val.getBytes();
}