UUIDs: Cuando Auto-Incremento No Es Suficiente
Por qué los identificadores únicos importan y cuándo usarlos en lugar de IDs secuenciales.
Tu base de datos usa IDs auto-incrementables. 1, 2, 3, 4... Simple.
Luego fusionas dos bases de datos. O expones IDs en URLs. O alguien descubre que pueden adivinar datos de otros usuarios incrementando el ID en la URL.
Los IDs secuenciales tienen problemas. Los UUIDs resuelven algunos de ellos.
¿Qué es un UUID?
Universally Unique Identifier (Identificador Universalmente Único). Un número de 128 bits, típicamente mostrado como 32 caracteres hexadecimales con guiones:
550e8400-e29b-41d4-a716-446655440000
La matemática detrás de la generación de UUID hace las colisiones astronómicamente improbables. Puedes generar UUIDs en diferentes máquinas, en diferentes momentos, sin coordinación, y no colisionarán.
¿Por Qué No Solo Usar Auto-Incremento?
Seguridad. Los IDs secuenciales filtran información. Si tu ID de usuario es 15847, los atacantes saben que hay al menos 15846 otros usuarios. Pueden enumerar recursos probando IDs secuenciales.
Sistemas distribuidos. Múltiples servidores generando IDs necesitan coordinación para evitar duplicados. Los UUIDs no necesitan coordinación.
Fusionar datos. Combinar bases de datos con IDs secuenciales es una pesadilla. Los UUIDs se fusionan limpiamente.
Creación offline. Las aplicaciones móviles pueden crear registros offline con UUIDs. No necesitan esperar por un ID asignado por el servidor.
Versiones de UUID
No todos los UUIDs se crean de la misma manera.
Versión 1: Basado en timestamp y dirección MAC. Único, pero revela cuándo y dónde fue creado.
Versión 4: Aleatorio. Más común. Sin filtración de información.
Versión 7: Basado en timestamp pero ordenable. Las bases de datos más nuevas se benefician de esto.
Para la mayoría de usos, versión 4 (aleatorio) es la elección correcta.
Los Compromisos
Los UUIDs no son gratis.
Tamaño. 128 bits vs 32 bits para un entero. Índices más grandes, más almacenamiento.
Legibilidad. usuario/15 es más fácil de recordar que usuario/550e8400-e29b-41d4-a716-446655440000.
Rendimiento. Los UUIDs aleatorios causan fragmentación de índice en algunas bases de datos. UUID v7 aborda esto.
Depuración. Buscar un UUID en logs es tedioso comparado con números simples.
Cuándo Usar Qué
Usa auto-incremento cuando:
- Solo interno, nunca expuesto a usuarios
- Aplicaciones simples, base de datos única
- La legibilidad humana importa
Usa UUIDs cuando:
- Los IDs aparecen en URLs o APIs
- Múltiples sistemas crean registros
- La seguridad por oscuridad ayuda
- Fusionar datos es posible
Consejos Prácticos
No uses UUIDs como claves primarias en MySQL. Úsalos como columna única secundaria en su lugar. Los índices agrupados de MySQL rinden mal con UUIDs aleatorios.
Considera UUID v7. Si tu base de datos lo soporta, los UUIDs ordenables por timestamp te dan lo mejor de ambos mundos.
Elimina guiones para URLs. 550e8400e29b41d4a716446655440000 sigue siendo un UUID válido y más corto en URLs.
Los UUIDs resuelven problemas reales que los IDs secuenciales no pueden. Pero no siempre son la elección correcta. Elige según tus requisitos reales, no porque los UUIDs suenen más profesionales.