unico numero length hacer generate generar como java uuid

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



spring uuid (5)

Creo que este es el mejor ejemplo para usar randomUUID:

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

Si estoy usando Long uuid = UUID.randomUUID().getMostSignificantBits() qué tan probable es que se produzca una colisión. Corta los bits menos significativos, por lo que existe la posibilidad de que te encuentres en una colisión, ¿verdad?


Es mejor que solo genere un valor largo aleatorio, entonces todos los bits son aleatorios. En Java 6, new Random () usa System.nanoTime () más un contador como semilla.

Hay diferentes niveles de singularidad.

Si necesita singularidad en muchas máquinas, podría tener una tabla de base de datos central para asignar identificadores únicos, o incluso lotes de identificadores únicos.

Si solo necesita tener unicidad en una aplicación, puede tener un contador (o un contador que comienza desde currentTimeMillis () * 1000 o nanoTime () según sus requisitos)



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

Esto significa que se usan seis bits para cierta información de tipo y los 122 bits restantes se asignan al azar.

Los seis bits no aleatorios se distribuyen con cuatro en la mitad más significativa del UUID y dos en la mitad menos significativa. Por lo tanto, la mitad más significativa 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).

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

Incidentalmente, estaría un poco mejor utilizando la mitad menos significativa del UUID (o generando un largo aleatorio usando SecureRandom).


Use el tiempo YYYYDDDD (año + día del año) como prefijo. Esto disminuye la fragmentación de la base de datos en tablas e índices. Este método devuelve el byte[40] . Lo utilicé en un entorno híbrido en el que el SID de Active Directory ( varbinary(85) ) es la clave para los usuarios de LDAP y se utiliza un ID generado automáticamente por la aplicación para los usuarios que no son de LDAP. Además, la gran cantidad de transacciones por día en las tablas transaccionales (sector bancario) no puede usar tipos de Int estándar para claves

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(); }