En resumen: UUID v4 es la opción por defecto segura para ID únicos aleatorios, ULID es mejor cuando además quieres ID que se ordenan por fecha de creación, y NanoID es ideal cuando necesitas ID cortos y aptos para URL. Los tres evitan la coordinación entre sistemas, pero equilibran de forma distinta longitud, ordenación y comportamiento en los índices. Esta guía explica qué es cada uno y cuándo usarlo.

Un identificador único permite que sistemas independientes creen registros sin preguntar a un servidor central «¿cuál es el próximo número?». Esa independencia es lo esencial: dos servicios, o dos dispositivos sin conexión, pueden acuñar cada uno un ID con la certeza de que los valores no colisionarán.

Qué es realmente un UUID

Un UUID es un valor de 128 bits, escrito normalmente como 36 caracteres — 32 dígitos hexadecimales más cuatro guiones, como 550e8400-e29b-41d4-a716-446655440000. La versión que casi siempre quieres es UUID v4, que rellena 122 de esos bits con aleatoriedad. Eso da unos 5,3 × 10³⁶ valores posibles, así que una colisión no es algo que debas prever: tendrías que generar del orden de un trillón de miles de millones de UUID antes de que la probabilidad de un choque alcance siquiera el 50 %.

«Insignificante» no es «imposible», pero en la práctica v4 ofrece unicidad sin coordinación central alguna.

UUID v4 frente a v1

UUID v1 se construye a partir de un timestamp más la dirección de red (MAC) de la máquina generadora. Eso hace a v1 aproximadamente ordenado en el tiempo, pero puede filtrar dónde y cuándo se creó un ID — a veces una cuestión de privacidad. UUID v4 renuncia a todo eso en favor de la pura aleatoriedad: sin orden, sin metadatos incrustados, nada que filtrar. Para la mayoría de aplicaciones v4 es el valor por defecto correcto, y v1 solo compensa cuando quieres específicamente su componente temporal.

ULID: ordenable por diseño

Un ULID también es de 128 bits, pero codificado como 26 caracteres Crockford base32 en lugar de hexadecimal con guiones. Sus primeros 48 bits son un timestamp en milisegundos y los 80 restantes son aleatorios. Como el timestamp va delante, los ULID se ordenan lexicográficamente en el orden en que se crearon: ordena las cadenas y obtienes el orden cronológico gratis. Es una propiedad muy útil: abarata las consultas «más recientes primero» y mantiene las inserciones ordenadas en vez de dispersas.

NanoID: corto y apto para URL

Un NanoID usa por defecto 21 caracteres de un alfabeto URL-safe, así que entra en un enlace sin percent-encoding. La longitud es configurable, lo que te permite equilibrar tamaño y resistencia a colisiones: los ID más cortos son más limpios pero dejan menos aleatoriedad, así que mantenlos más largos para identificadores públicos o de alto volumen. NanoID destaca para enlaces de compartición, ID públicos breves y allí donde un UUID de 36 caracteres resultaría aparatoso en una URL.

¿Cuál para una clave de base de datos?

Aquí la elección tiene consecuencias reales de rendimiento. UUID v4 es perfectamente válido como clave primaria, pero su aleatoriedad hace que las filas nuevas se inserten en posiciones aleatorias de un índice B-tree, causando fragmentación y más divisiones de página a medida que crece la tabla. Los identificadores ordenados en el tiempo — ULID, o el más reciente UUID v7 — se insertan en orden aproximadamente creciente, lo que mantiene el índice compacto y las escrituras locales. Si eliges una clave para una tabla grande con muchas escrituras, prefiere un ID ordenado en el tiempo; en tablas pequeñas la diferencia rara vez importa.

Errores comunes que evitar

  • Exponer públicamente ID enteros secuenciales cuando querías ID no adivinables — eso es tarea de un ID aleatorio, no de un auto-incremento.
  • Usar UUID v4 aleatorio como clave agrupada de una tabla enorme y luego extrañarte de que las inserciones se ralenticen.
  • Truncar un UUID para «ahorrar espacio» — tiras la aleatoriedad que garantiza la unicidad.
  • Acortar demasiado un NanoID para un identificador de alto volumen y elevar el riesgo de colisión.

Ajusta el ID a la tarea: usa el Generador de UUID para crear valores v4, v1, ULID o NanoID, elige v4 para la unicidad general, ULID cuando importa el orden y NanoID cuando el ID debe vivir en una URL.