O que é ULID e como usar em seus projetos
Se você trabalha com desenvolvimento de software, banco de dados ou arquitetura de sistemas, já deve ter esbarrado em identificadores únicos. O UUID é o mais famoso deles, mas nos últimos anos um novo formato vem ganhando espaço: o ULID. Mas o que exatamente é um ULID, por que ele foi criado e quando faz sentido usá-lo no lugar do UUID? É isso que você vai descobrir neste artigo.
O que é ULID?
ULID é a sigla para Universally Unique Lexicographically Sortable Identifier, ou seja, um identificador universalmente único que pode ser ordenado lexicograficamente. Em termos práticos, é uma sequência de 26 caracteres gerada de forma aleatória, mas com uma diferença crucial em relação ao UUID: os primeiros 10 caracteres carregam um timestamp em milissegundos.
Isso significa que, ao contrário de um UUID puro, um ULID gerado agora virá antes de um ULID gerado daqui a 5 minutos — mesmo sem precisar de um campo de data separado. Essa propriedade é chamada de ordenação natural por tempo de criação.
A estrutura de um ULID fica assim:
- Primeiros 10 caracteres: representam o timestamp Unix em milissegundos
- Últimos 16 caracteres: são gerados de forma aleatória, garantindo unicidade
O alfabeto usado é o Crockford Base32, que evita caracteres ambíguos como `I`, `L`, `O` e `U`, tornando o identificador mais legível e menos propenso a erros de digitação.
ULID vs UUID: qual a diferença?
A principal diferença entre os dois formatos está na ordenabilidade. Um UUID v4 (o mais comum) é completamente aleatório — não existe relação de ordem entre dois UUIDs gerados em sequência. Já o ULID embute o momento de criação, o que traz vantagens concretas:
- Melhor desempenho em bancos de dados: identificadores sequenciais causam menos fragmentação em índices B-tree, melhorando a performance de inserções
- Ordenação sem campo extra: você pode ordenar registros por ID e obter a ordem cronológica de criação
- Legibilidade maior: o ULID usa apenas letras maiúsculas e números, sem hífens — mais limpo visualmente
- Compatibilidade com UUID: um ULID pode ser armazenado no mesmo espaço de um UUID (128 bits)
Se você ainda não conhece bem o UUID, vale a leitura do nosso artigo sobre o que é UUID e para que serve para entender melhor as bases antes de comparar os dois.
Quando usar ULID?
O ULID não é um substituto universal do UUID — cada um tem seu lugar. Use o ULID quando:
- Você precisa de ordenação cronológica sem depender de um campo `created_at` separado
- Está trabalhando com sistemas distribuídos onde múltiplos serviços geram IDs de forma independente
- Quer melhorar a performance de inserções em tabelas grandes com índices
- Precisa de um identificador que seja fácil de copiar e compartilhar sem risco de confundir caracteres
Evite o ULID se o seu sistema exige compatibilidade estrita com o formato UUID padrão (com hífens e letras minúsculas), ou se a ordenação por tempo de criação não é relevante para o seu caso de uso.
Como gerar um ULID válido
Gerar um ULID manualmente seria trabalhoso: você precisaria capturar o timestamp atual, convertê-lo para Crockford Base32 e concatenar com 80 bits aleatórios. Por isso, o ideal é usar uma ferramenta pronta.
No Geratudo, você pode usar o Gerador de ULID para criar identificadores válidos instantaneamente, sem instalar nada. Basta acessar, clicar em gerar e copiar o resultado.
Se você trabalha com testes e precisa de dados fictícios mais completos, as ferramentas de Gerador de UUID e Gerador de Pessoa também podem ser úteis no seu fluxo de desenvolvimento.
ULID em linguagens de programação
A maioria das linguagens modernas já conta com bibliotecas para gerar ULIDs:
- JavaScript/Node.js: pacote `ulid` no npm
- Python: biblioteca `python-ulid`
- Go: pacote `oklog/ulid`
- PHP: `robinvdvleuten/ulid`
- Java: `azam/ulid4j`
A adoção é simples e, na maior parte dos casos, você substitui a chamada de geração de UUID pela equivalente de ULID sem grandes mudanças no restante do código.
Cuidados ao usar ULID
Apesar das vantagens, o ULID tem um ponto de atenção: como o timestamp está embutido no identificador, é possível inferir aproximadamente quando um registro foi criado apenas olhando para o ID. Em sistemas onde isso é sensível do ponto de vista de privacidade, avalie se essa exposição é aceitável.
Além disso, a geração de múltiplos ULIDs no mesmo milissegundo incrementa o componente aleatório de forma monotônica para garantir ordenação — o que é um comportamento esperado, mas que precisa ser tratado corretamente pelas bibliotecas.
Conclusão
O ULID é uma excelente alternativa ao UUID quando você precisa de identificadores únicos que também sejam ordenáveis por tempo de criação. Ele combina o melhor dos dois mundos: unicidade garantida e sequência cronológica natural, tudo em um formato legível e compacto.
Se você quer testar na prática, acesse agora o Gerador de ULID do Geratudo e comece a usar em seus projetos sem complicação.