UUID v4 vs v7: ¿qué identificador único elegir?
Un UUID es un identificador de 128 bits único sin coordinación central. La versión 4, totalmente aleatoria, domina desde hace años. La versión 7, más reciente (RFC 9562, 2024), integra una marca de tiempo al inicio para producir identificadores ordenados en el tiempo. Esta diferencia, aparentemente trivial, cambia radicalmente el rendimiento en base de datos. Veamos cuál elegir.
¿Qué es un UUID?
Un UUID (Universally Unique Identifier) es un número de 128 bits representado por 32 caracteres hexadecimales agrupados en cinco bloques, por ejemplo 550e8400-e29b-41d4-a716-446655440000. Su razón de ser: generar un identificador único sin pedirlo a una autoridad central, lo que lo hace ideal para los sistemas distribuidos. Puedes generar algunos con nuestro generador de UUID.
Existen varias versiones; las más pertinentes hoy para claves de registro son la v4 (aleatoria) y la v7 (ordenada en el tiempo).
UUID v4 (aleatorio)
El UUID v4 está formado por 122 bits aleatorios (el resto codifica la versión y el variant). La probabilidad de colisión es tan baja que es insignificante en la práctica. Es la versión por defecto en la mayoría de los lenguajes y bibliotecas.
- Impredecible: perfecto para tokens o identificadores públicos que no se quiere que sean adivinables
- Sin fuga de información: no revela ni fecha ni orden de creación
- Inconveniente: totalmente desordenado, lo que maltrata los índices de base de datos
UUID v7 (ordenado en el tiempo)
El UUID v7 coloca una marca de tiempo Unix en milisegundos en sus 48 primeros bits, seguida de bits aleatorios. Dos UUID v7 generados en instantes diferentes se ordenan, por tanto, en el orden de su creación, sin dejar de ser únicos y prácticamente imposibles de adivinar.
- Ordenable: el orden lexicográfico corresponde al orden cronológico
- Amigable para los índices: las inserciones se hacen al final del índice, como un autoincremento
- Contrapartida: revela el instante de creación, lo que puede ser indeseable para un identificador público
Tabla comparativa
| Criterio | UUID v4 | UUID v7 |
|---|---|---|
| Composición | 122 bits aleatorios | Marca de tiempo + aleatorio |
| Ordenado en el tiempo | No | Sí |
| Ordenable | No | Sí (cronológico) |
| Rendimiento de índice | Bajo (fragmentación) | Alto (inserciones secuenciales) |
| Imprevisibilidad | Total | Alta pero revela el instante |
| Fuga de información | Ninguna | Fecha de creación |
| Madurez / soporte | Universal | Reciente (RFC 9562, 2024) |
Impacto en las bases de datos
Este es el meollo del asunto. Las bases relacionales almacenan sus índices en árboles B (B-tree). Insertar claves aleatorias (v4) dispersa las escrituras por todo el índice, provocando fragmentación, divisiones de páginas y una caché menos eficaz. En grandes volúmenes, el rendimiento de inserción se degrada notablemente.
Las claves ordenadas (v7) se insertan siempre al final del índice, como un identificador autoincrementado. Se recuperan inserciones rápidas, una mejor localidad y un índice más compacto. Esto es especialmente notable con una clave primaria en InnoDB (MySQL), donde la clave primaria determina el orden físico de las filas.
Cuándo elegir uno u otro
Elegir UUID v4 cuando
- El identificador se expone públicamente y no debe revelar nada
- Generas tokens, enlaces de compartición, secretos
- El orden y la fecha de creación no deben ser adivinables
- Quieres la máxima compatibilidad con lo existente
Elegir UUID v7 cuando
- El UUID sirve de clave primaria en una base de datos
- El volumen de inserciones es alto y el rendimiento de índice cuenta
- Quieres ordenar por orden de creación sin una columna dedicada
- Revelar el instante de creación no es un problema
Recomendación
Para una clave primaria de base de datos, prefiere de ahora en adelante UUID v7: conservas la unicidad distribuida del UUID evitando la penalización de índice de la v4. Reserva UUID v4 para los identificadores públicos, tokens y secretos, donde priman la imprevisibilidad total y la ausencia de fuga temporal.
Comprueba de todos modos el soporte de la v7 en tu lenguaje y tu ORM: la RFC es reciente, pero la adopción avanza rápido.
Preguntas frecuentes
¿Es UUID v7 menos seguro que v4?
Sigue siendo muy difícil de adivinar gracias a sus bits aleatorios, pero revela el instante de creación a través de su marca de tiempo. Para un identificador público donde la fecha no debe filtrarse, o un secreto, prefiere la v4.
¿Por qué el UUID v4 ralentiza las bases de datos?
Porque sus valores aleatorios dispersan las inserciones por todo el índice B-tree, lo que fragmenta las páginas y reduce la eficacia de la caché. La v7, ordenada, inserta al final del índice y evita este problema.
¿Puedo migrar de v4 a v7?
Sí para los nuevos registros: ambos formatos coexisten en la misma columna UUID. No hace falta reescribir el histórico; simplemente cambia la generación de las nuevas claves a la v7.
¿Qué pasa con las versiones v1 y v6?
La v1 codifica la marca de tiempo y la dirección MAC, lo que plantea problemas de privacidad. La v6 reordena la v1 para hacerla ordenable. Para un nuevo proyecto, la v7 es la versión ordenada recomendada por la RFC 9562.