UUID explicado: versoes, casos de uso e como gerar

Os UUIDs estao em todo o lado no software, bases de dados, APIs, sistemas de ficheiros. Aprenda a diferenca entre as versoes de UUID, quando usar cada uma e como gerar uma instantaneamente.

O que e um UUID?

Um UUID (Universally Unique Identifier) e um identificador de 128 bits normalizado pelo RFC 4122. Tem este aspeto:

550e8400-e29b-41d4-a716-446655440000

Cinco grupos de caracteres hexadecimais separados por hifens, sempre com 36 caracteres de comprimento. A parte "universalmente unico" resulta da combinacao de tempo, aleatoriedade e/ou espaco de nomes, consoante a versao.

Os UUIDs sao usados quando e preciso gerar IDs sem uma autoridade central (um contador de auto-incremento de base de dados). Sao ideais para sistemas distribuidos, IDs gerados pelo cliente e casos em que nao se pode dar ao luxo de uma viagem ao servidor para obter o proximo ID.

Versoes de UUID

Existem varias versoes oficiais de UUID, cada uma usando uma estrategia de geracao diferente:

UUID v1, Baseado em tempo

Gerado a partir do timestamp atual combinado com o endereco MAC da maquina geradora. Garantido como unico entre maquinas no mesmo momento, mas o endereco MAC revela a identidade da maquina, uma preocupacao de seguranca em alguns contextos.

UUID v3, Baseado em nome (MD5)

Determinista: o mesmo nome + espaco de nomes produz sempre o mesmo UUID. Usa hash MD5. Util para gerar IDs estaveis para recursos conhecidos (um URL especifico, um nome de dominio). O MD5 e considerado criptograficamente fraco, por isso o v5 e preferido para novos projetos.

UUID v4, Aleatorio (o mais comum)

Gerado a partir de 122 bits de dados aleatorios. A versao mais usada. A probabilidade de colisao entre dois UUIDv4 e astronomicamente baixa (cerca de 1 em 5,3 x 10^36 para quaisquer dois IDs). Use este a menos que tenha uma razao especifica para nao o fazer.

UUID v5, Baseado em nome (SHA-1)

Igual ao v3 mas usa SHA-1 em vez de MD5. Preferido ao v3 para trabalho novo. Excelente para gerar identificadores estaveis e reproduziveis a partir de strings de entrada.

UUID v7, Aleatorio ordenado por tempo (novo padrao)

Introduzido na revisao de 2022 do RFC. Combina um prefixo de timestamp com precisao de milissegundos com bits aleatorios. O prefixo de timestamp significa que os UUIDv7 ordenam cronologicamente, uma grande vantagem para chaves primarias de bases de dados (melhor desempenho de indice do que o v4 aleatorio). Esta e a escolha recomendada para IDs de bases de dados daqui em diante.

Quando usar UUIDs

  • Chaves primarias de bases de dados, especialmente em sistemas distribuidos onde varios nos inserem registos simultaneamente
  • Identificadores de recursos de API, expor inteiros sequenciais revela informacao sobre o volume de dados; os UUIDs nao
  • Nomes de ficheiros e ativos, nomes resistentes a colisao para ficheiros enviados sem um servidor de coordenacao
  • Chaves de idempotencia, gerar uma chave do lado do cliente para repetir com seguranca um pedido de pagamento ou mutacao

UUID vs ULID vs NanoID

O UUID v4 e aleatorio mas nao ordenavel. Surgiram alternativas para casos de uso especificos:

ULID (Universally Unique Lexicographically Sortable Identifier): um ID de 128 bits semelhante ao UUID mas ordenavel por tempo. Objetivo semelhante ao UUID v7.

NanoID: mais pequeno (21 caracteres por defeito), seguro para URL, alfabeto configuravel. Util quando se quer IDs curtos nos URLs. A probabilidade de colisao e ajustavel ao alterar o comprimento.

Para a maioria do trabalho em bases de dados de backend, o UUID v7 e a melhor pratica moderna. Para IDs curtos amigos dos URLs, o NanoID e uma escolha popular. O UUID v4 continua a ser a opcao com maior suporte universal quando a compatibilidade e a prioridade.

Gerar UUIDs no browser

Pode gerar UUID v4 (e outras versoes) instantaneamente com o Gerador de UUID deste site, sem registo, sem viagem ao servidor, funciona inteiramente no browser.

Em codigo: o JavaScript tem crypto.randomUUID() nativamente nos browsers modernos e Node.js >= 14.17. O Python tem o modulo da biblioteca padrao uuid.

Resumo

Os UUIDs sao identificadores de 128 bits resistentes a colisao com varias versoes para diferentes estrategias: baseado em tempo (v1), aleatorio (v4), baseado em nome (v5) e aleatorio ordenado por tempo (v7). O UUID v4 e a escolha de uso geral mais comum; o UUID v7 e a melhor escolha para chaves primarias de bases de dados onde a ordem de classificacao importa.