Generador de ULID
Generá identificadores ULID ordenables por tiempo, con modo monotónico opcional. Funciona enteramente en tu navegador: no se envía nada a ningún servidor.
Los identificadores creados en el mismo milisegundo siguen creciendo, así que un lote queda en orden de generación.
Acá aparecen los ULIDs generados
¿Qué es un ULID?
Un ULID es un identificador de 128 bits, del mismo tamaño que un UUID, escrito en 26 caracteres en vez de 36. Sus primeros 48 bits son el momento de creación en milisegundos y los 80 restantes son aleatorios, así que ordenar ULIDs como strings comunes los ordena por momento de creación. La codificación es Crockford Base32, que deja afuera la I, la L, la O y la U: eso evita tanto las confusiones entre dígitos y letras cuando alguien lee uno en voz alta, como la posibilidad de que un identificador termine deletreando algo desafortunado. Todo se genera en tu navegador con su fuente aleatoria criptográfica.
Cómo se reparten los 26 caracteres
Milisegundos desde la época Unix, big-endian. Esto es lo que hace que los ULIDs se ordenen cronológicamente, y es legible: la herramienta lo decodifica para cada valor que genera.
Bits aleatorios del generador criptográfico del navegador. Con el modo monotónico activado, dentro de un mismo milisegundo se incrementan en vez de volver a sortearse, lo que mantiene el lote en orden.
Ejemplos
Cómo generar ULIDs en los lenguajes que probablemente uses:
import { ulid } from "ulid";
ulid(); // 01ARZ3NDEKTSV4RRFFQ69G5FAVimport ulid
ulid.new().strimport com.github.f4b6a3.ulid.UlidCreator;
UlidCreator.getMonotonicUlid().toString();import "github.com/oklog/ulid/v2"
ulid.Make().String()use Ulid\Ulid;
Ulid::generate();-- store as a 16-byte value, not text
CREATE TABLE orders (id bytea PRIMARY KEY);Casos de uso
Claves primarias que no fragmentan el índice
Los UUID aleatorios caen por todos lados en un índice B-tree, así que cada inserción ensucia una página distinta. Los ULIDs están ordenados por tiempo, así que las inserciones se agregan cerca del final del índice: por eso se comportan mucho mejor como claves primarias con volumen.
Ordenar eventos sin una columna de timestamp aparte
Como el tiempo está embebido en el valor, las líneas de log, los eventos y los mensajes se ordenan bien solo por id, incluso cuando llegan desordenados o desde máquinas distintas.
Identificadores que aparecen en URLs o se dictan
26 caracteres en vez de 36, sin guiones, y sin I/L/O/U que se confundan con 1/0. Eso hace que los ULIDs sean bastante más fáciles de pegar en una URL, imprimir en una etiqueta o dictar por teléfono.
Ids generados en el cliente
Igual que los UUID, los ULIDs no necesitan coordinación: un navegador, una app móvil o un worker offline puede crear uno sin preguntarle a un servidor, y sigue siendo único cuando los datos se sincronizan.