¿Qué es ULID?
ULID (Identificador Sorteable Lexicográficamente Universalmente Único) es un formato de identificador de 128 bits diseñado para superar las limitaciones de los UUIDs. Consiste en:
- Marca de tiempo: 48 bits de tiempo Unix con precisión de milisegundos
- Aleatoriedad: 80 bits de datos aleatorios criptográficamente seguros
- Codificación: Representación en Base32 (26 caracteres)
Ejemplo de formato: 01ARZ3NDEKTSV4RRFFQ69G5FAV
Cómo funciona ULID
- Genera 48 bits para la marca de tiempo (tiempo Unix en milisegundos)
- Genera 80 bits de datos aleatorios criptográficamente seguros
- Combina la marca de tiempo (más significativa) con la aleatoriedad (menos significativa)
- Codifica el valor completo de 128 bits usando el alfabeto Base32 de Crockford
- El resultado es una cadena de 26 caracteres (los primeros 10 caracteres son la marca de tiempo, los últimos 16 son aleatoriedad)
Ventajas y Consideraciones
Ventajas | Consideraciones |
---|---|
|
|
Estructura de ULID
Componente | Bits | Caracteres | Descripción |
---|---|---|---|
Marca de tiempo | 48 bits | 10 caracteres | Marca de tiempo Unix (ms) codificada en Base32 |
Aleatoriedad | 80 bits | 16 caracteres | Bytes aleatorios codificados en Base32 |
Comparación entre ULID y UUID
Característica | ULID | UUID v1 | UUID v4 | UUID v7 |
---|---|---|---|---|
Tamaño | 128 bits | 128 bits | 128 bits | 128 bits |
Longitud de cadena | 26 caracteres | 36 caracteres | 36 caracteres | 36 caracteres |
Basado en tiempo | ✅ | ✅ | ❌ | ✅ |
Ordenación natural | ✅ | ❌ | ❌ | ✅ |
Seguro para URL | ✅ | ❌ | ❌ | ❌ |
Exposición de dirección MAC | ❌ | ✅ | ❌ | ❌ |
Componente aleatorio | ✅ | ❌ | ✅ | ✅ |
Estándar canónico | ❌ | ✅ | ✅ | ⚠️ Borrador |
Casos de uso comunes
- Claves primarias de bases de datos: Índices optimizados para rendimiento
- Sistemas distribuidos: Generación sin coordinación
- APIs: Identificadores limpios y seguros para URL
- Datos de series temporales: Ordenación cronológica nativa
- Sistemas de registros: Identificadores de eventos ordenables
- Aplicaciones modernas: Donde las limitaciones de UUID son problemáticas
¿Por qué elegir ULID?
- Ordenación: Se ordena lexicográficamente por tiempo de creación
- Seguridad para URL: No necesita codificación URL (a diferencia de los UUID con guiones)
- Compacidad: 26 caracteres frente a 36 para UUID
- Insensibilidad a mayúsculas/minúsculas: Reduce errores de entrada del usuario
- Monotonicidad: Ordenación monotónica opcional dentro del mismo milisegundo
- Sin caracteres especiales: Formato simple, solo alfanumérico
Preguntas frecuentes
¿Cómo se compara ULID con UUID v7?
Ambos utilizan marcas de tiempo Unix para ordenación y tienen componentes aleatorios. Las diferencias clave son la codificación (Base32 vs hexadecimal), el formato (26 caracteres vs 36) y la estandarización (UUID v7 está en especificación RFC en borrador).
¿Puedo extraer el tiempo de creación de un ULID?
Sí. Los primeros 10 caracteres representan una marca de tiempo Unix con precisión de milisegundos que puede decodificarse y convertirse a un formato de fecha y hora estándar.
¿Son los ULIDs compatibles con campos UUID de bases de datos?
No. Los ULIDs utilizan un formato diferente y necesitarían almacenarse como cadenas o datos binarios en lugar de en tipos nativos UUID de bases de datos.
¿Qué es la monotonicidad en ULIDs?
Algunas implementaciones de ULID ofrecen una opción monotónica que asegura un orden de clasificación secuencial incluso dentro del mismo milisegundo, incrementando el componente aleatorio para ULIDs creados en la misma marca de tiempo.
¿Qué conjunto de caracteres utiliza ULID?
ULID utiliza la codificación Base32 de Crockford (0-9, A-Z excluyendo I, L, O, U) que está diseñada para minimizar la confusión y los errores de transcripción cuando los IDs se leen o ingresan manualmente.
Recursos
Alfabeto Base32 de Crockford
Valor de codificación | Carácter | Notas |
---|---|---|
0-9 | 0-9 | Dígitos decimales |
10-31 | A-Z | Excluyendo I, L, O, U para mejor legibilidad |
Caracteres: 0123456789ABCDEFGHJKMNPQRSTVWXYZ
Esta codificación es insensible a mayúsculas/minúsculas para decodificación (pero los ULIDs típicamente se generan en mayúsculas).