Logo Computerhoy.com

Qué son los UUID y por qué son útiles

Si no sabes que son los UUID hoy vamos a explicártelo, además de saber cómo funcionan, basándonos en los que interactúan con los registros de una base de datos, aunque se pueda aplicar a cualquier generación de ID única.

Ordenador

Pixabay

UUID es la abreviatura de Universal Unique Identifier, lo que significa que estamos ante un identificador único generado por máquina de un cierto rango.

Esto quiere decir que dos UUID que se generan de manera correcta, prácticamente no tienen ninguna posibilidad de ser idénticos, aunque sean creados en lugares y entornos diferentes. Por eso hablamos de un identificador único.

Para que esté garantizado el hecho de ser único, se definen elementos que incluyen la dirección MAC, de la tarjeta de red del ordenador donde se crea, la marca de tiempo, el espacio de nombres, el número aleatorio (aunque a veces es pseudoaleatorio) y otros elementos, así como el algoritmo para generar el propio UUID a partir de todo lo que te hemos comentado. 

Toda esta complejidad significa que solamente puede ser generado por un ordenador, si lo que pretendemos es garantizar su singularidad, es decir, que sea único del todo.

Ninguno se puede especificar de manera manual. Esto tiene su sentido, ya que ningún usuario normal debería saber que objetos están asociados con un UUID, porque si se pudiera se correría el riesgo de duplicarlos y que quedaran inservibles.

Lo que debemos tener claro es que el objetivo principal de un algoritmo definido por la generación de UUID es que sea único, singular y totalmente fidedigno.

UUID: Versiones

Un UUID es un número de 16 bytes y 128 bits, que generalmente vendrá representado por una cadena de 36 bytes. Las letras se expresan en hexadecimal.

Podemos decir que se compone de varias partes:

  • Timestamp y el número de versión UUID están divididos en tres segmentos y ocupan 16 caracteres (60 bit y 4 bit).
  • El número de secuencia de reloj ocupa 4 caracteres (13 bits + 3 bits).
  • Mientras que la ID ocupa 12 caracteres (48 bits).

Los UUID tienen varias versiones con diferentes algoritmos y rangos.

Dichas versiones son las siguientes:

  • Versión 1: se combina una marca de tiempo, una secuencia de reloj y un valor que es específico del dispositivo generador (lo normal es que sea la dirección MAC) para producir una salida que es única.
  • Versión 2: en este caso hablamos de una evolución de la versión 1 para utilizarlo en un entorno informático específico como es DCE.
  • Versión 3: si usamos MD5 para codificar un "espacio de nombres" y un "nombre", crearemos un valor que es único para ese nombre dentro del espacio de nombres. La gran diferencia con otros es que, si generamos un UUID con el mismo espacio de nombres y el mismo nombre, generará uno completamente igual, por lo que hablamos de un método donde si puede haber dos iguales (solo ocurre aquí). 
  • Versión 4: el más usado en la actualidad, ya que emplea la fuente de números aleatorios o pseudoaleatorios del host para emitir sus valores. Esto garantiza que sea prácticamente imposible que haya dos UUID iguales. 
  • Versión 5: es muy parecido a la versión 3 salvo porque emplea el algoritmo SHA-1 que es más fuerte para codificar.

Utilicemos la versión que utilicemos, el identificador que veremos será prácticamente igual, salvo por los detalles que hay en cada versión, siendo las numero 3 y 5 las más utilizadas, sobres todo la numero tres por su carácter aleatorio. 

Un ejemplo de cadena UUID sería:

16763be4-6022-406e-a950-fcd5018633ca

Como puedes observar el valor se representa como cinco grupos de caracteres alfanuméricos separados por guiones. Los guiones no son un componente obligatorio de la cadena, puesto que lo único que hacen es que el identificador sea mucho más fácil de percibir para el ojo humano.

La historia de los lenguajes de programación

La historia de los lenguajes de programación

Repasamos la historia de los lenguajes de programación desde el primero de 1801 a los más recientes. A lo largo de la historia han existido muchos lenguajes de programación y compiladores para ''interpretar'' esos lenguajes, y estos son los más importantes.

Lee la noticia

USO de UUID

Los UUID se suelen usar para crear identificadores únicos descentralizados. Se generan como seguros en un código de back-end, un dispositivo cliente o su motor de base de datos.

Antes, la mayoría de las aplicaciones empleaban un campo entero de incremento automático como clave principal. Eso provocaba que no se podía conocer la ID hasta que no estaba en la base de datos. Gracias a los UUID se puede identificar mucho antes.

Veamos una demostración de PHP sin utilizar UUID.

PHP sin UUID

cloudsavvyit

Se tiene que hacer referencia a la propiedad con null, ya que no se puede saber la ID real, porque esto tiene que ocurrir después de ingresar la base de datos.

Si queremos solucionarlo solo debemos cambiar a UUID para solucionar el problema.

PHP cpn UUID

cloudsavvyit

Ahora los identificadores se pueden generar sin problemas, conociéndolos y, por lo tanto, no correr el peligro de duplicidades.

Esto garantiza que las instancias de objetos siempre representen un estado válido y no necesiten propiedades de ID, además de facilitar el manejo de los registros secundarios que necesitan una referencia a su elemento principal (como Author) se pueden insertar en el momento, sin tener que esperar a que sea insertada una base de todas.

Los UUID también lo ayudan a combinar datos de varias fuentes. Son únicos y eso los convierte en las mejores opciones para estructuras replicadas y datos que se mueven con frecuencia entre diferentes sistemas de almacenamiento.

Aun así, los UUID tienen ciertos inconvenientes como que son cuatro veces más grandes que los números enteros, lo que puede ser un hándicap en grandes conjuntos de datos.

Otro de los inconvenientes es que los valores son complicados de ordenar e indexar, sobre todo en los UUID aleatorios más comunes. Esto puede ser contraproducente con el rendimiento en algunos casos.

De todas formas, esto último que os contamos se puede mitigar si se usan UUID como datos binarios, como ocurre en bases de datos como PostgreSQL o MySQL, donde se puede convertir una cadena UUID a binaria.

Esperamos que después de todo lo que has leído entiendas de mejor manera que es un UUID, cómo funciona y las posibilidades que ello tiene, junto con sus ventajas y desventajas.

Conoce cómo trabajamos en ComputerHoy.