Ao contrário do UUID, que é baseado em números aleatórios ou baseados em data/hora, o ULID é levemente parecido com o SnowFlake, sendo fortemente baseado em data/hora e em números aleatórios.
O ULID foi projetado para resolver os problemas do UUID em determinados cenários e fornecer vantagens adicionais.
Isso torna o ULID muito útil em cenários que exigem classificação, mantendo a exclusividade global, como classificação de logs, chaves primárias de banco de dados, etc., em sistemas distribuídos.
O ULID é composto de duas partes principais:
- Carimbo de Data/Hora: Os primeiros 48 bits de um ULID são dedicados ao carimbo de data/hora, medido em milissegundos desde a era Unix (1º de janeiro de 1970). Esta precisão em milissegundos permite que o ULID ordene os identificadores de forma cronológica, proporcionando uma visão temporal clara de quando cada identificador foi gerado.
- Componente Aleatório: Após o carimbo de data/hora, os próximos 80 bits são preenchidos com números aleatórios. Esta grande espaço de números (1,21e+24 possíveis combinações por milissegundo) garante que cada ULID seja único, mesmo que múltiplos ULIDs sejam gerados no mesmo milissegundo.
O ULID é composto por 26 caracteres e utiliza o esquema de codificação Base32 de Crockford, que exclui alguns caracteres facilmente confundidos, como “l” minúsculo e o número “1”, “O” maiúsculo e o número “0”, tornando o ULID mais fácil de distinguir visualmente, e diminui as chances de erros ao digitar manualmente, e suficientemente curto para ser convenientemente armazenado e exibido em logs e bancos de dados.
Os ULIDs são notavelmente exclusivos graças à sua combinação de uma assinatura precisa de data/hora e números aleatórios, o que elimina duplicações, mesmo quando vários são gerados no mesmo milissegundo.
Sua assinatura de data/hora possui precisão de milissegundos, refletindo exatamente o momento de sua geração. Isso não apenas os torna temporais, mas também facilita a classificação e recuperação de entidades.
Além disso, o processo de geração de ULIDs é autônoma, não requerendo acesso à rede.
O ULID e UUID têm o mesmo tamanho de 128 bits e são compatíveis com o padrão UUID existente, garantindo interoperabilidade em diversos sistemas.
Utiliza-lo como um identificador globalmente exclusivo, aumenta a classificação e ao mesmo tempo garante a exclusividade, Tornando-o ideal para aplicações modernas que exigem identificadores exclusivos de alto desempenho.
À medida que os sistemas distribuídos e as arquiteturas de microsserviços se tornam mais populares, o ULID se tornará ainda mais popular.
Seja o primeiro a comentar