Guia de UUID: Versões, Formatos e Boas Práticas
Os UUIDs (Universally Unique Identifiers) são identificadores de 128 bits concebidos para serem únicos no espaço e no tempo sem uma autoridade central. São a escolha padrão para sistemas distribuídos onde gerar IDs de forma independente — sem coordenação — é essencial.
Formato do UUID
Um UUID é um número de 128 bits apresentado como 32 dígitos hexadecimais em cinco grupos separados por hífenes:
550e8400-e29b-41d4-a716-446655440000
^^^^^^^^ ^^^^ ^^^^ ^^^^ ^^^^^^^^^^^^
time-low mid hi clk node
+ver +var
- Total: 128 bits (16 bytes)
- Comprimento da string: 36 caracteres (32 hex + 4 hífenes)
- Versão: Codificada no 13.º carácter (o nibble "hi")
- Variante: Codificada no 17.º carácter
Gere UUIDs instantaneamente com o nosso Gerador de UUID.
Versões do UUID
UUID v1: Baseado no Tempo
Gerado a partir do timestamp atual e do endereço MAC da máquina.
// Estrutura: timestamp (60 bits) + sequência de relógio (14 bits) + nó (48 bits)
6ba7b810-9dad-11d1-80b4-00c04fd430c8
Vantagens: Naturalmente ordenável por hora de criação, unicidade garantida por máquina. Desvantagens: Expõe o endereço MAC (preocupação de privacidade), pode revelar a hora de criação. Utilizar quando: Necessita de ordenação temporal e está num ambiente controlado.
UUID v4: Aleatório
Gerado a partir de números aleatórios criptograficamente seguros. Esta é a versão mais amplamente utilizada.
// 122 bits aleatórios (6 bits reservados para versão e variante)
f47ac10b-58cc-4372-a567-0e02b2c3d479
Vantagens: Simples, sem fuga de informação, sem necessidade de coordenação. Desvantagens: Não ordenável, desempenho de índice de base de dados ligeiramente inferior ao dos IDs sequenciais. Utilizar quando: Uso geral — esta é a escolha predefinida para a maioria das aplicações.
UUID v7: Aleatório Ordenado por Tempo (Novo Padrão)
A versão mais recente (RFC 9562, 2024), combinando um timestamp Unix com dados aleatórios.
// Estrutura: timestamp (48 bits) + aleatório (74 bits)
018e7b50-4a00-7000-8000-000000000001
Vantagens: Naturalmente ordenado por tempo, excelente desempenho de índice de base de dados, sem fuga de informação além da precisão de milissegundos. Desvantagens: Mais recente, algumas bibliotecas podem ainda não o suportar. Utilizar quando: Necessita de IDs únicos que se ordenem cronologicamente — ideal para chaves primárias de base de dados.
Outras Versões
- UUID v3: Hash MD5 de um namespace e nome. Determinístico.
- UUID v5: Hash SHA-1 de um namespace e nome. Determinístico e preferível ao v3.
- UUID v6: v1 reordenado para melhor ordenação. Substituído pelo v7.
- UUID Nulo: Todos zeros (
00000000-0000-0000-0000-000000000000). Utilizado como valor sentinela.
Probabilidade de Colisão
Qual é a probabilidade de dois UUIDs (v4) gerados aleatoriamente colidirem? Com 122 bits aleatórios:
- Após gerar 1 mil milhão de UUIDs: probabilidade ≈ 1 em 10^18
- Para ter 50% de probabilidade de colisão: necessitaria de aproximadamente 2,7 × 10^18 UUIDs
- A 1 mil milhão de UUIDs por segundo: demoraria cerca de 86 anos
Para todos os efeitos práticos, as colisões de UUID v4 não acontecerão. É muito mais provável sofrer uma falha de hardware.
UUID vs Outros Formatos de ID
| Formato | Comprimento | Ordenável | Único | Seguro para URL |
|---|---|---|---|---|
| UUID v4 | 36 caract. | Não | Sim | Sim |
| UUID v7 | 36 caract. | Sim | Sim | Sim |
| ULID | 26 caract. | Sim | Sim | Sim |
| nanoid | 21 caract. | Não | Provavelmente | Sim |
| Auto-incremento | Variável | Sim | Por tabela | Sim |
| Snowflake ID | 18-19 caract. | Sim | Por sistema | Sim |
ULID (Universally Unique Lexicographically Sortable Identifier)
Os ULIDs são uma alternativa compacta: timestamp de 48 bits + 80 bits aleatórios, codificados como 26 caracteres Crockford Base32. Ordenam-se lexicograficamente por hora de criação.
Quando Utilizar IDs de Auto-Incremento
Os IDs sequenciais são mais simples e eficientes para aplicações com uma única base de dados. Utilize UUIDs quando necessitar de:
- IDs gerados por múltiplos sistemas de forma independente
- IDs que não revelem a ordem de inserção a utilizadores externos
- IDs compatíveis com fusão para bases de dados distribuídas
Considerações de Desempenho em Base de Dados
Os UUIDs aleatórios (v4) causam fragmentação de índice B-tree porque as inserções ocorrem em posições aleatórias. Isto pode degradar o desempenho de escrita em 2-5x comparado com IDs sequenciais em tabelas grandes.
Soluções:
- Utilizar UUID v7: UUIDs ordenados por tempo inserem-se sequencialmente, igualando o desempenho do auto-incremento
- Armazenar como binário: Utilizar
BINARY(16)em vez deCHAR(36)para poupar 55% de armazenamento - Utilizar ULID: Ordenável e mais compacto do que UUIDs
-- PostgreSQL: tipo UUID nativo (16 bytes, eficiente)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
-- MySQL: armazenar como BINARY(16) para desempenho
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
Gerar UUIDs
Linha de Comandos
# macOS/Linux
uuidgen
# Python one-liner
python3 -c "import uuid; print(uuid.uuid4())"
JavaScript
// Built-in (Node.js 19+, modern browsers)
crypto.randomUUID();
// Para UUID v7 (utilizando o pacote uuid)
import { v7 } from 'uuid';
const id = v7();
Python
import uuid
uuid.uuid4() # Aleatório
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com') # Baseado em nome
Para geração rápida sem código, o nosso Gerador de UUID cria UUIDs v4 instantaneamente no seu navegador.
FAQ
Devo utilizar UUID ou inteiro de auto-incremento para a chave primária da minha base de dados?
Para aplicações com uma única base de dados, os inteiros de auto-incremento são mais simples e rápidos. Para sistemas distribuídos, microsserviços ou quando precisa de gerar IDs do lado do cliente antes da inserção na base de dados, os UUIDs (preferencialmente v7) são a melhor escolha. Se estiver a utilizar PostgreSQL, o suporte nativo a UUID torna a diferença de desempenho negligenciável.
Os UUIDs podem ser utilizados como tokens de segurança?
O UUID v4 utiliza 122 bits de aleatoriedade de uma fonte criptográfica, o que proporciona boa entropia. No entanto, para tokens de segurança (chaves API, IDs de sessão), é preferível utilizar formatos de tokens construídos para esse fim, com propriedades adicionais como checksums, codificação de expiração ou identificação por prefixo. Os UUIDs são para identidade, não para autenticação.
Recursos Relacionados
- Gerador de UUID — Gere UUIDs instantaneamente online
- Comparação de Algoritmos de Hash — Compreender as funções de hash por trás do UUID v3 e v5
- Padrões de Design de API JSON — Utilizar UUIDs eficazmente em respostas de API