Gerador de ULID
Gere identificadores ULID ordenáveis por tempo, com modo monotônico opcional. Funciona totalmente no seu navegador: nada é enviado a nenhum servidor.
Identificadores criados no mesmo milissegundo continuam crescendo, então um lote fica na ordem de geração.
Os ULIDs gerados aparecem aqui
O que é um ULID?
Um ULID é um identificador de 128 bits, do mesmo tamanho que um UUID, escrito em 26 caracteres em vez de 36. Seus primeiros 48 bits são o momento de criação em milissegundos e os 80 restantes são aleatórios, então ordenar ULIDs como strings comuns os ordena por momento de criação. A codificação é Crockford Base32, que deixa de fora I, L, O e U: isso evita tanto as confusões entre dígitos e letras quando alguém lê um em voz alta, quanto a chance de um identificador soletrar algo infeliz. Tudo é gerado no seu navegador com a fonte aleatória criptográfica dele.
Como os 26 caracteres são divididos
Milissegundos desde a época Unix, big-endian. É isso que faz os ULIDs ordenarem cronologicamente, e é legível: a ferramenta decodifica esse valor para cada identificador que gera.
Bits aleatórios do gerador criptográfico do navegador. Com o modo monotônico ligado, dentro de um mesmo milissegundo eles são incrementados em vez de sorteados de novo, o que mantém o lote em ordem.
Exemplos
Como gerar ULIDs nas linguagens que você provavelmente vai usar:
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
Chaves primárias que não fragmentam o índice
UUIDs aleatórios caem por todo lado em um índice B-tree, então cada inserção suja uma página diferente. ULIDs são ordenados por tempo, então as inserções se acumulam perto do fim do índice: por isso se comportam muito melhor como chaves primárias em volume.
Ordenar eventos sem uma coluna de timestamp separada
Como o tempo está embutido no valor, linhas de log, eventos e mensagens ordenam corretamente só pelo id, mesmo quando chegam fora de ordem ou de máquinas diferentes.
Identificadores que aparecem em URLs ou são ditados
26 caracteres em vez de 36, sem hifens, e sem I/L/O/U para confundir com 1/0. Isso torna os ULIDs bem mais fáceis de colar em uma URL, imprimir em uma etiqueta ou ditar por telefone.
Ids gerados no cliente
Assim como os UUIDs, ULIDs não precisam de coordenação: um navegador, um app móvel ou um worker offline pode criar um sem perguntar a um servidor, e ele continua único quando os dados sincronizam.