sql >> Base de Datos >  >> RDS >> Mysql

¿Es Mysql UUID_SHORT() comparable a UUID()?

uuid_short() produce una conglomeración bit a bit de la ID del servidor, un componente de tiempo bastante estático y un número entero de 24 bits que aumenta secuencialmente. Estos bits se rellenan en un entero de 8 bytes. El componente de tiempo se basa en el tiempo de arranque del servidor.

uuid() produce una cadena hexadecimal que representa un UUID de versión 1 de 16 bytes. Los UUID de la versión 1 son un conglomerado bit a bit del ID del servidor, la marca de tiempo actual, algunos bytes que entran en juego si genera ID a hipervelocidad y algunos bits de utilidad.

Para responder a su pregunta:uuid_short proporcionar singularidad de tiempo y espacio que rivaliza con uuid ? La respuesta es no. Por ejemplo, la ID del servidor en un uuid_short es solo un byte. Entonces, si tiene 256 o más servidores, al menos algunos de ellos tendrán la misma identificación de nodo, lo que significa que perderá la singularidad del espacio. A modo de comparación, la ID del servidor en la versión 1 UUID tiene 6 bytes de largo, eliminando efectivamente la posibilidad de duplicados para todas las granjas de servidores corporativos, excepto las más grandes :)

Una mejor pregunta es si uuid_short es bastante bueno. Podrías ver colisiones de ID si:

  1. Genera más de 16 millones de IDS desde el mismo servidor en poco tiempo. ***
  2. Inicie servidores con la misma ID de servidor exactamente al mismo tiempo y comparta datos entre ellos.
  3. Juega con el reloj del sistema y luego reinicia tu servidor.

El segundo problema parece poco probable para la mayoría de las personas, pero vale la pena investigar el primero antes de comprometerse a hacer uuid_short la base de tus llaves.

*** Basado en los documentos mysql para uuid_short , parece que vería colisiones si generara más de 16 millones de ID durante el tiempo de actividad de un solo servidor. Pero eso sería una tontería. Los documentos de mysql continúan diciendo que está bien siempre que no genere 16 millones de ID por segundo. Eso implica que deben cambiar algunos de los bits en la marca de tiempo si agota los 16 millones de ID secuenciales. No he probado esto.