What are GUIDs used for?

GUID, UUID y ULID: Las Claves de Identidad Única

09/12/2018

Valoración: 4.4 (8995 votos)

En el vasto universo del desarrollo de software y la gestión de bases de datos, existe una necesidad fundamental: identificar de forma única cada pieza de información. Ya sea un usuario, una transacción, un componente de software o un registro en una base de datos distribuida por todo el mundo, la capacidad de asignarle una identidad que no se repita jamás es crucial. Aquí es donde entran en juego los identificadores únicos, y tres de los acrónimos más importantes en este campo son GUID, UUID y ULID. Aunque a primera vista puedan parecer un galimatías de letras y números, comprender sus diferencias y aplicaciones es esencial para construir sistemas robustos y escalables.

What is a GUID & UUID?
GUID (aka UUID) is an acronym for 'Globally Unique Identifier' (or 'Universally Unique Identifier'). It is a 128-bit integer number used to identify resources. The term GUID is generally used by developers working with Microsoft technologies, while UUID is used commonly used elsewhere. How are GUIDs used?
Índice de Contenido

¿Qué es exactamente un GUID?

GUID es el acrónimo de 'Globally Unique Identifier' o 'Identificador Globalmente Único'. Es un número entero de 128 bits diseñado para ser único en todo el mundo y a lo largo del tiempo. Piensa en él como un número de serie digital que cualquiera puede generar en cualquier momento, con la certeza casi absoluta de que nadie más creará el mismo número. El término GUID es especialmente popular en el ecosistema de Microsoft, siendo una piedra angular en tecnologías como COM, .NET y bases de datos SQL Server.

Su formato estándar es reconocible al instante, una cadena de 32 dígitos hexadecimales divididos en cinco grupos por guiones:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Por ejemplo: 123e4567-e89b-12d3-a456-426614174000

¿Cuán único es un GUID?

La probabilidad de que se genere un duplicado es astronómicamente baja. Para ponerlo en perspectiva: si se generaran mil millones de GUIDs por segundo durante un año entero, la probabilidad de encontrar una sola colisión sería solo del 50%. O, visto de otra manera, si cada ser humano en la Tierra generara 600 millones de GUIDs, solo habría un 50% de probabilidad de que dos de ellos fueran idénticos. Esta casi garantizada unicidad es lo que los hace tan valiosos en sistemas distribuidos donde no hay una autoridad central que asigne números secuenciales.

UUID: El Estándar Universal

Mientras que GUID es el término de Microsoft, UUID ('Universally Unique Identifier' o 'Identificador Universalmente Único') es el nombre del estándar oficial, definido en el documento RFC 4122. En la práctica, un GUID es la implementación de Microsoft del estándar UUID. Por lo tanto, a menudo se usan indistintamente, pero es importante saber que UUID es el estándar que abarca diferentes versiones, cada una con un método de generación y propósito distintos.

What is a GUID number?

Versiones de UUID

Los UUIDs no son todos iguales. Se dividen en varias versiones:

  • Versión 1 (Basado en tiempo y MAC): Generado a partir de la dirección MAC de la tarjeta de red del ordenador y una marca de tiempo. Esto garantiza la unicidad, pero tiene una desventaja de privacidad, ya que puede revelar información sobre la máquina que lo generó.
  • Versión 2 (Reservado): Similar a la Versión 1, pero con información adicional de seguridad. Es raramente utilizado.
  • Versión 3 y 5 (Basado en nombres): Genera un UUID a partir de un 'namespace' y un nombre, utilizando los algoritmos de hash MD5 (V3) o SHA-1 (V5). Esto significa que siempre obtendrás el mismo UUID para la misma combinación de namespace y nombre, lo cual es útil para identificadores idempotentes.
  • Versión 4 (Aleatorio): Esta es la versión más común. Se genera utilizando números puramente aleatorios o pseudoaleatorios. No contiene información sobre el tiempo o el hardware, lo que lo hace ideal para la mayoría de los casos de uso donde solo se necesita unicidad.

ULID: La Evolución Ordenada y Legible

A pesar de la increíble utilidad de los GUID/UUID, tienen una desventaja importante en ciertos escenarios: no son ordenables cronológicamente (excepto la Versión 1, con sus problemas de privacidad). Si usas UUIDs aleatorios (V4) como claves primarias en una base de datos, cada nueva inserción puede ocurrir en cualquier lugar del índice, lo que lleva a una fragmentación y a una degradación del rendimiento. Aquí es donde brilla el ULID ('Universally Unique Lexicographically Sortable Identifier' o 'Identificador Universalmente Único Ordenable Lexicográficamente').

Un ULID es un identificador de 128 bits que combina lo mejor de ambos mundos:

  1. Componente de Tiempo (48 bits): Los primeros 48 bits representan una marca de tiempo en milisegundos desde la época Unix. Esto asegura que los ULIDs generados secuencialmente se puedan ordenar lexicográficamente.
  2. Componente Aleatorio (80 bits): Los 80 bits restantes son generados aleatoriamente, lo que garantiza la unicidad incluso si se generan múltiples ULIDs en el mismo milisegundo.

Además, los ULIDs utilizan una codificación Base32 (usando solo caracteres que no son ambiguos y son amigables con las URLs), lo que los hace más cortos y un poco más legibles para los humanos que la representación hexadecimal de un UUID. Un ULID se ve así:

01ARZ3NDEKTSV4RRFFQ69G5FAV

Tabla Comparativa: GUID vs. UUID vs. ULID

Para aclarar las diferencias clave, aquí tienes una tabla comparativa:

CaracterísticaGUID / UUIDULID
SignificadoIdentificador Global/Universalmente ÚnicoIdentificador Universalmente Único Ordenable Lexicográficamente
Tamaño128 bits128 bits
OrdenableNo (generalmente, con la excepción de V1)Sí, por marca de tiempo
Legibilidad HumanaBaja (formato hexadecimal con guiones)Moderada (cadena Base32 de 26 caracteres)
Componente PrincipalPrincipalmente aleatorio (en la popular V4)Marca de tiempo + Aleatorio
Casos de Uso ComunesClaves de base de datos, identificadores de componentes en sistemas distribuidos, APIs.Registros de eventos (logs), feeds de actividades, bases de datos que requieren inserciones secuenciales de alto rendimiento.

¿Cuál Deberías Usar en tu Proyecto?

La elección entre GUID, UUID y ULID depende enteramente de los requisitos de tu aplicación.

  • Usa GUID/UUID (Versión 4) cuando: La única necesidad es la unicidad. Es el estándar de facto y está soportado por prácticamente todos los lenguajes y plataformas. Es perfecto para identificar recursos en sistemas donde el orden de creación no es relevante. Si trabajas en un entorno puramente Microsoft, te referirás a él como GUID.
  • Usa UUID (Versión 1, 3 o 5) cuando: Necesitas un tipo de generación específico. La Versión 1 si el orden es importante y no te preocupa la privacidad de la MAC. Las Versiones 3 o 5 si necesitas generar identificadores de forma determinista a partir de una cadena de texto.
  • Usa ULID cuando: El orden cronológico es un requisito clave. Si estás construyendo un sistema de logs, un feed de noticias, o cualquier aplicación donde los datos se consultan y se muestran por orden de creación, un ULID es una opción superior. Su naturaleza ordenable mejora drásticamente el rendimiento de la indexación en las bases de datos en comparación con los UUIDs aleatorios.

Preguntas Frecuentes (FAQ)

¿Es realmente imposible que un GUID se repita?

En teoría, no es imposible, pero en la práctica, la probabilidad es tan infinitesimalmente pequeña que se considera despreciable para casi todas las aplicaciones del mundo real. Es más probable ser golpeado por un meteorito que generar una colisión de UUIDs V4 de forma aleatoria.

¿Puedo usar un GUID como clave primaria en mi base de datos?

Sí, y es una práctica muy común, especialmente en sistemas distribuidos. Sin embargo, ten en cuenta el impacto en el rendimiento. Como los GUIDs aleatorios no son secuenciales, pueden causar fragmentación en los índices de la base de datos, ralentizando las operaciones de escritura. Aquí es donde un ULID o una nueva versión de UUID (como la propuesta V6, que es reordenable) ofrecen una ventaja significativa.

What is a GUID number?
GUID stands for Globally Unique Identifier. It’s a 128-bit number used to uniquely identify information in computer systems. Commonly used in Microsoft technologies. Randomness: Primarily based on random or pseudo-random numbers. Uniqueness: Highly unique but not time-ordered. Readability: Not human-readable. Database keys.

¿Qué versión de UUID es la más recomendada?

La Versión 4 (aleatoria) es la más utilizada y recomendada para uso general. Proporciona una excelente unicidad sin las complicaciones de privacidad o dependencias de las otras versiones.

¿Por qué se dice que el ULID es más 'legible'?

Principalmente por dos razones: su representación como cadena es más corta (26 caracteres frente a 36 de un UUID con guiones) y utiliza una codificación (Base32) que evita caracteres ambiguos (como 1, I, L, 0, O) y es segura para usar en URLs sin necesidad de codificación adicional.

Conclusión

Elegir el identificador correcto es una decisión de arquitectura fundamental que puede afectar el rendimiento, la escalabilidad y la mantenibilidad de un sistema. Mientras que los GUIDs y UUIDs han sido los pilares de la unicidad durante décadas, ofreciendo una solución robusta y universalmente aceptada, la llegada de alternativas como ULID demuestra que la innovación continúa. Al entender las fortalezas y debilidades de cada uno, los desarrolladores pueden tomar decisiones informadas, asegurando que cada pieza de datos en su sistema tenga una identidad única, adecuada y eficiente para su propósito.

Si quieres conocer otros artículos parecidos a GUID, UUID y ULID: Las Claves de Identidad Única puedes visitar la categoría Tecnología.

Subir