Guía de UUID: Versiones, Formatos y Mejores Prácticas
Los UUID (Identificadores Únicos Universales) son identificadores de 128 bits diseñados para ser únicos en el espacio y el tiempo sin una autoridad central. Son la opción estándar para sistemas distribuidos donde generar IDs de forma independiente — sin coordinación — es esencial.
Formato de UUID
Un UUID es un número de 128 bits que se muestra como 32 dígitos hexadecimales en cinco grupos separados por guiones:
550e8400-e29b-41d4-a716-446655440000
^^^^^^^^ ^^^^ ^^^^ ^^^^ ^^^^^^^^^^^^
time-low mid hi clk node
+ver +var
- Total: 128 bits (16 bytes)
- Longitud de cadena: 36 caracteres (32 hex + 4 guiones)
- Versión: Codificada en el carácter 13 (el nibble "hi")
- Variante: Codificada en el carácter 17
Genera UUIDs al instante con nuestro Generador de UUID.
Versiones de UUID
UUID v1: Basado en Tiempo
Generado a partir de la marca de tiempo actual y la dirección MAC de la máquina.
// Structure: timestamp (60 bits) + clock sequence (14 bits) + node (48 bits)
6ba7b810-9dad-11d1-80b4-00c04fd430c8
Ventajas: Ordenable naturalmente por tiempo de creación, unicidad garantizada por máquina. Desventajas: Expone la dirección MAC (problema de privacidad), puede revelar el tiempo de creación. Úsalo cuando: Necesites ordenamiento temporal y estés en un entorno controlado.
UUID v4: Aleatorio
Generado a partir de números aleatorios criptográficamente seguros. Esta es la versión más ampliamente utilizada.
// 122 random bits (6 bits reserved for version and variant)
f47ac10b-58cc-4372-a567-0e02b2c3d479
Ventajas: Simple, sin filtración de información, no requiere coordinación. Desventajas: No es ordenable, rendimiento de índice de base de datos ligeramente peor que los IDs secuenciales. Úsalo cuando: Propósito general — esta es la opción predeterminada para la mayoría de las aplicaciones.
UUID v7: Aleatorio Ordenado por Tiempo (Nuevo Estándar)
La versión más reciente (RFC 9562, 2024), que combina una marca de tiempo Unix con datos aleatorios.
// Structure: timestamp (48 bits) + random (74 bits)
018e7b50-4a00-7000-8000-000000000001
Ventajas: Ordenado naturalmente por tiempo, excelente rendimiento de índice en base de datos, sin filtración de información más allá de precisión de milisegundos. Desventajas: Más nuevo, algunas bibliotecas pueden no soportarlo aún. Úsalo cuando: Necesites IDs únicos que se ordenen cronológicamente — ideal para claves primarias de base de datos.
Otras Versiones
- UUID v3: Hash MD5 de un namespace y un nombre. Determinístico.
- UUID v5: Hash SHA-1 de un namespace y un nombre. Determinístico y preferido sobre v3.
- UUID v6: v1 reordenado para mejor ordenabilidad. Reemplazado por v7.
- UUID Nil: Todos ceros (
00000000-0000-0000-0000-000000000000). Usado como valor centinela.
Probabilidad de Colisión
¿Qué tan probable es que dos UUIDs (v4) generados aleatoriamente colisionen? Con 122 bits aleatorios:
- Después de generar 1 mil millones de UUIDs: probabilidad ≈ 1 en 10^18
- Para tener un 50% de probabilidad de colisión: necesitarías aproximadamente 2.7 × 10^18 UUIDs
- A 1 mil millones de UUIDs por segundo: tomaría aproximadamente 86 años
Para todos los propósitos prácticos, las colisiones de UUID v4 no ocurrirán. Es mucho más probable que experimentes una falla de hardware.
UUID vs Otros Formatos de ID
| Formato | Longitud | Ordenable | Único | URL-Safe |
|---|---|---|---|---|
| UUID v4 | 36 chars | No | Sí | Sí |
| UUID v7 | 36 chars | Sí | Sí | Sí |
| ULID | 26 chars | Sí | Sí | Sí |
| nanoid | 21 chars | No | Probable | Sí |
| Auto-increment | Variable | Sí | Por tabla | Sí |
| Snowflake ID | 18-19 chars | Sí | Por sistema | Sí |
ULID (Identificador Único Universal Lexicográficamente Ordenable)
Los ULID son una alternativa compacta: marca de tiempo de 48 bits + 80 bits aleatorios, codificados como 26 caracteres Crockford Base32. Se ordenan lexicográficamente por tiempo de creación.
Cuándo Usar IDs Auto-Incrementales
Los IDs secuenciales son más simples y eficientes para aplicaciones de una sola base de datos. Usa UUIDs cuando necesites:
- IDs generados por múltiples sistemas de forma independiente
- IDs que no revelen el orden de inserción a usuarios externos
- IDs compatibles con fusión para bases de datos distribuidas
Consideraciones de Rendimiento en Base de Datos
Los UUIDs aleatorios (v4) causan fragmentación del índice B-tree porque las inserciones ocurren en posiciones aleatorias. Esto puede degradar el rendimiento de escritura de 2 a 5 veces comparado con IDs secuenciales en tablas grandes.
Soluciones:
- Usa UUID v7: Los UUIDs ordenados por tiempo se insertan secuencialmente, igualando el rendimiento de auto-incremento
- Almacena como binario: Usa
BINARY(16)en lugar deCHAR(36)para ahorrar 55% de almacenamiento - Usa ULID: Ordenable y más compacto que los UUIDs
-- PostgreSQL: native UUID type (16 bytes, efficient)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
-- MySQL: store as BINARY(16) for performance
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
Generando UUIDs
Línea de Comandos
# macOS/Linux
uuidgen
# Python one-liner
python3 -c "import uuid; print(uuid.uuid4())"
JavaScript
// Built-in (Node.js 19+, modern browsers)
crypto.randomUUID();
// For UUID v7 (using uuid package)
import { v7 } from 'uuid';
const id = v7();
Python
import uuid
uuid.uuid4() # Random
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com') # Name-based
Para generación rápida sin código, nuestro Generador de UUID crea UUIDs v4 al instante en tu navegador.
FAQ
¿Debería usar UUID o entero auto-incremental para la clave primaria de mi base de datos?
Para aplicaciones de una sola base de datos, los enteros auto-incrementales son más simples y rápidos. Para sistemas distribuidos, microservicios, o cuando necesites generar IDs del lado del cliente antes de la inserción en base de datos, los UUIDs (preferiblemente v7) son la mejor opción. Si usas PostgreSQL, el soporte nativo de UUID hace que la diferencia de rendimiento sea insignificante.
¿Se pueden usar los UUIDs como tokens de seguridad?
UUID v4 usa 122 bits de aleatoriedad de una fuente criptográfica, lo que proporciona buena entropía. Sin embargo, para tokens de seguridad (claves API, IDs de sesión), es mejor usar formatos de token diseñados específicamente con propiedades adicionales como checksums, codificación de expiración o identificación por prefijo. Los UUIDs son para identidad, no para autenticación.
Recursos Relacionados
- Generador de UUID — Genera UUIDs al instante en línea
- Comparación de Algoritmos Hash — Entendiendo las funciones hash detrás de UUID v3 y v5
- Patrones de Diseño de API JSON — Usando UUIDs efectivamente en respuestas de API