Probabilidad de colisión utilizando los bits más significativos de un UUID en Java

Resuelto dlinsin asked hace 15 años • 5 respuestas

Si lo estoy usando, Long uuid = UUID.randomUUID().getMostSignificantBits()¿qué probabilidad hay de sufrir una colisión? Corta los bits menos significativos, por lo que existe la posibilidad de que choques, ¿verdad?

dlinsin avatar Nov 28 '08 17:11 dlinsin
Aceptado

Según la documentación , el método estático UUID.randomUUID()genera un UUID tipo 4.

Esto significa que se utilizan seis bits para algún tipo de información y los 122 bits restantes se asignan aleatoriamente.

Los seis bits no aleatorios se distribuyen cuatro en la mitad más significativa del UUID y dos en la mitad menos significativa. Entonces, la mitad más importante de su UUID contiene 60 bits de aleatoriedad, lo que significa que, en promedio, necesita generar 2^30 UUID para obtener una colisión (en comparación con 2^61 para el UUID completo).

Entonces yo diría que estás bastante seguro. Sin embargo, tenga en cuenta que esto no es del todo cierto para otros tipos de UUID, como menciona Carl Seleborg.

Por cierto, sería un poco mejor si usara la mitad menos significativa del UUID (o simplemente generara un largo aleatorio usando SecureRandom).

Rasmus Faber avatar Nov 28 '2008 10:11 Rasmus Faber

Raymond Chen tiene una publicación de blog realmente excelente sobre esto:

Los GUID son únicos a nivel mundial, pero las subcadenas de GUID no lo son

Carl Seleborg avatar Nov 28 '2008 10:11 Carl Seleborg

Creo que este es el mejor ejemplo para usar randomUUID:

http://www.javapractices.com/topic/TopicAction.do?Id=56

Kannika avatar May 15 '2012 10:05 Kannika