¿Qué es UUID/GUID?
UUID (Universally Unique Identifier) y GUID (Globally Unique Identifier) son términos intercambiables para identificadores únicos de 128 bits. Creados para generar IDs únicos sin necesidad de coordinación central, son ampliamente utilizados en bases de datos, APIs REST y sistemas distribuidos.
Versiones de UUID
UUID v4 - Aleatorio (Recomendado)
Generado aleatoriamente usando criptografía fuerte. Probabilidad de colisión: ~1 en 2¹²² (trillones de trillones). Ideal para la mayoría de los casos: claves primarias, tokens de sesión, identificadores de recursos.
Ejemplo: 550e8400-e29b-41d4-a716-446655440000
UUID v1 - Basado en Timestamp
Incluye timestamp (60 bits) + dirección MAC del ordenador (48 bits) + contador. Ventaja: ordenable cronológicamente. Desventaja: revela información del sistema (dirección MAC, hora de creación).
Ejemplo: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Otras Versiones (v3, v5, v6, v7)
v3/v5: Generados por hash (MD5/SHA-1) de un espacio de nombres + nombre. Determinísticos (mismo input = mismo UUID). v6/v7: Propuestas recientes que combinan timestamp ordenable con aleatoriedad segura.
Ejemplo:
Casos de uso comunes
🗄️ Claves Primarias de Base de Datos
Reemplace auto-increment por UUIDs para facilitar la fusión de datos entre entornos (dev, staging, prod) y sharding horizontal. MongoDB, PostgreSQL y MySQL lo soportan nativamente.
🔗 URLs de Recursos REST
/api/users/550e8400-e29b-41d4-a716-446655440000
Los UUIDs en URLs evitan ataques de enumeración y mantienen URLs impredecibles.
🎫 Tokens de Sesión y Autenticación
Tokens OAuth, session IDs, reset tokens. Los UUIDs son criptográficamente seguros e imposibles de adivinar (a diferencia de secuencias numéricas).
📦 Identificadores de Eventos/Mensajes
Rastreo de eventos en microservicios, colas de mensajes (RabbitMQ, Kafka), logs distribuidos. Correlation IDs entre servicios.
📁 Nombres de Archivos Únicos
Subidas de imágenes, copias de seguridad, archivos temporales. Evita conflictos y permite subidas simultáneas sin bloqueos.
UUID vs Auto-increment: Pros y Contras
| Característica | UUID | Auto-increment (INT) |
|---|---|---|
| Tamaño | 16 bytes (128 bits) | 4 bytes (32 bits) o 8 bytes (64 bits) |
| Generación distribuida | ✓ Sí, sin coordinación | ✗ Requiere control central |
| Previsibilidad | Impredecible (seguro) | Predecible (riesgo de enumeración) |
| Rendimiento de índice | Más lento (128 bits aleatorios) | Más rápido (secuencial, cache-friendly) |
| Ordenación cronológica | No (v4), Sí (v1, v6, v7) | Sí (secuencial) |
| Fusión de bases de datos | ✓ Trivial (sin colisión) | ✗ Complejo (conflictos de ID) |
| Ideal para | Sistemas distribuidos, APIs, seguridad | Sistemas monolíticos, rendimiento crítico |
Cómo usar UUID en diferentes lenguajes
JavaScript/Node.js
// Nativo (Node.js 14.17+)
import { randomUUID } from 'crypto';
const uuid = randomUUID();
// Con biblioteca 'uuid'
import { v4 as uuidv4 } from 'uuid';
const uuid = uuidv4();Python
import uuid # UUID v4 uuid_v4 = uuid.uuid4() print(uuid_v4) # 550e8400-e29b-41d4-a716-446655440000 # UUID v1 uuid_v1 = uuid.uuid1() print(uuid_v1) # 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Java
import java.util.UUID; // UUID aleatorio UUID uuid = UUID.randomUUID(); System.out.println(uuid.toString());
PostgreSQL
-- Habilitar extensión CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- Generar UUID SELECT uuid_generate_v4(); -- Crear tabla con UUID CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), name VARCHAR(100) );
FAQ - Preguntas Frecuentes
1. ¿Los UUIDs son realmente únicos? ¿Puede haber colisiones?
Los UUIDs v4 tienen 2¹²² combinaciones posibles. La probabilidad de colisión es astronómicamente baja (1 en 5 mil millones después de generar mil millones de UUIDs). Para fines prácticos, considérelos únicos. Las bases de datos modernas detectan colisiones mediante restricciones UNIQUE.
2. ¿UUID v1 es seguro? ¿Puedo usarlo en producción?
UUID v1 revela el timestamp de creación y la dirección MAC de la máquina, considerado fuga de información. No use para tokens de seguridad o en contextos donde la privacidad es crítica. Prefiera v4 para seguridad, o v6/v7 si necesita ordenación cronológica sin exponer la dirección MAC.
3. ¿UUID impacta el rendimiento de la base de datos?
Sí, pero generalmente aceptable. Los UUIDs aleatorios causan fragmentación del índice B-tree (no son secuenciales). Para PostgreSQL, use UUID v7 o ULID (Universally Unique Lexicographically Sortable Identifier). Para casos extremos de rendimiento (miles de millones de registros), mantenga auto-increment.
4. ¿Debo usar guiones o eliminarlos?
Depende del contexto. Con guiones (estándar RFC 4122): más legible, compatible con bibliotecas estándar. Sin guiones: ahorra 4 bytes en almacenamiento de cadenas, útil para URLs cortas o tokens. PostgreSQL almacena binario (16 bytes) independientemente del formato.
5. ¿Puedo usar UUID como acortador de URLs?
Técnicamente sí, pero ineficiente. Los UUIDs tienen 36 caracteres (con guiones) o 32 sin. Para acortadores de URL, use codificaciones más cortas: base62 (A-Za-z0-9) genera IDs de 6-8 caracteres, suficientes para miles de millones de URLs.
6. ¿UUID funciona en sistemas offline?
¡Sí! Es una de las principales ventajas. Los clientes offline (apps móviles, IoT) generan UUIDs localmente sin conexión al servidor. Cuando sincronizan, no hay conflictos de ID. Ideal para CRDTs y sincronización multi-dispositivo.