2012-01-26 12 views
8

Me pregunto si puedo reemplazar con seguridad los ID generados con la función UUID() de mysql con los identificadores generados por la función UUID.randomUUID() de java.mysql UUID() y java UUID.randomUUID()

Busco compartir estos identificadores en las URL con mis usuarios, pero el UUID mysql() de salida se ve muy similares entre sí después de algunas carreras:

3ae2c9c4-47df-11e1-8c2a-a46b34c02a9e 
976de634-47e3-11e1-8c2a-a46b34c02a9e 
530cc5c6-47e7-11e1-8c2a-a46b34c02a9e 
... 

No estoy diciendo que' no es único, pero ¿así es como aparecen los resultados de UUID()? Supongo que está vinculado a algún identificador en mi máquina.

de Java UUID.randomUUID() "look" más al azar:

c042437b-298a-41c4-c2b6-0f83552bdb8b 
e33d8ab7-d9d3-4ffe-a592-650a125d2a93 
ecb12c54-5741-45c8-8b85-1825c19a9cae 
... 

Desde mi ingenua comprensión de la singularidad, los identificadores generados por el método de Java deben trabajar como un reemplazo perfecto para UUID de mysql()?

(otra ventaja para el uso de la versión de Java es que no voy a tener que volver a ir a buscar un registro insertado que utiliza UUID() cuando tengo que proporcionar en una respuesta a un cliente)

Gracias

Respuesta

9

¿Estás usando linux o FreeBSD? A partir de MySQL de documentation:

El quinto número es un número de nodo IEEE 802 que proporciona espacial singularidad. Se sustituye un número aleatorio si este último no está disponible en (por ejemplo, porque la computadora host no tiene tarjeta Ethernet , o no sabemos cómo encontrar la dirección de hardware de una interfaz en su sistema operativo). En este caso, la unicidad espacial no se puede garantizar. Sin embargo, una colisión debería tener una probabilidad muy baja de .

Actualmente, la dirección MAC de una interfaz solo se tiene en cuenta en FreeBSD y Linux. En otros sistemas operativos, MySQL usa un número generado aleatoriamente de 48 bits.

También tenga en cuenta:

Advertencia:

Aunque los valores UUID() están destinadas a ser único, no son necesariamente imposible de adivinar o impredecible. Si se requiere imprevisibilidad , los valores de UUID se deben generar de otra manera.

EDITAR

Si desea identificadores de usuario a parece más al azar, se pueden pasar a través de una función hash como MD5(UUID()), lo que da una cadena aleatoria más convincente

+1

Estoy en un mac, y esto se ejecutará en una máquina de Windows con el tiempo (...). Guessability no es un problema para mí, dado el patrón que estaba viendo con mysql UUID() arriba, supongo que mis usuarios simplemente pensarían que hay algo "raro" para él.Nada más que eso en realidad, pero la ventaja de tener el UUID por adelantado en el momento de la inserción si se genera utilizando el método java está inclinando mi favor en esa dirección. Gracias – user291701