O que é UUID/GUID?
UUID (Universally Unique Identifier) e GUID (Globally Unique Identifier) são termos intercambiáveis para identificadores únicos de 128 bits. Criados para gerar IDs únicos sem necessidade de coordenação central, são amplamente usados em bancos de dados, APIs REST e sistemas distribuídos.
Versões de UUID
UUID v4 - Aleatório (Recomendado)
Gerado aleatoriamente usando criptografia forte. Probabilidade de colisão: ~1 em 2¹²² (trilhões de trilhões). Ideal para maioria dos casos: chaves primárias, tokens de sessão, identificadores de recursos.
Exemplo: 550e8400-e29b-41d4-a716-446655440000
UUID v1 - Baseado em Timestamp
Inclui timestamp (60 bits) + MAC address do computador (48 bits) + contador. Vantagem: ordenável cronologicamente. Desvantagem: revela informações do sistema (MAC address, horário de criação).
Exemplo: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Outras Versões (v3, v5, v6, v7)
v3/v5: Gerados por hash (MD5/SHA-1) de um namespace + nome. Determinísticos (mesmo input = mesmo UUID).
v6/v7: Propostas recentes que combinam timestamp ordenável com aleatoriedade segura.
Casos de uso comuns
🗄️ Chaves Primárias de Banco de Dados
Substitua auto-increment por UUIDs para facilitar merge de dados entre ambientes (dev, staging, prod) e sharding horizontal. MongoDB, PostgreSQL e MySQL suportam nativamente.
🔗 URLs de Recursos REST
/api/users/550e8400-e29b-41d4-a716-446655440000
UUIDs em URLs evitam enumeration attacks e mantêm URLs imprevisíveis.
🎫 Tokens de Sessão e Autenticação
Tokens OAuth, session IDs, reset tokens. UUIDs são criptograficamente seguros e impossíveis de adivinhar (ao contrário de sequências numéricas).
📦 Identificadores de Eventos/Mensagens
Rastreamento de eventos em microservices, message queues (RabbitMQ, Kafka), logs distribuídos. Correlation IDs entre serviços.
📁 Nomes de Arquivos Únicos
Uploads de imagens, backups, arquivos temporários. Evita conflitos e permite uploads simultâneos sem lock.
UUID vs Auto-increment: Prós e Contras
Característica | UUID | Auto-increment (INT) |
---|---|---|
Tamanho | 16 bytes (128 bits) | 4 bytes (32 bits) ou 8 bytes (64 bits) |
Geração distribuída | ✓ Sim, sem coordenação | ✗ Requer controle central |
Previsibilidade | Imprevisível (seguro) | Previsível (enumeration risk) |
Performance índice | Mais lenta (128 bits aleatórios) | Mais rápida (sequencial, cache-friendly) |
Ordenação cronológica | Não (v4), Sim (v1, v6, v7) | Sim (sequencial) |
Merge de bancos | ✓ Trivial (sem colisão) | ✗ Complexo (conflitos de ID) |
Ideal para | Sistemas distribuídos, APIs, segurança | Sistemas monolíticos, performance crítica |
Como usar UUID em diferentes linguagens
JavaScript/Node.js
// Nativo (Node.js 14.17+) import { randomUUID } from 'crypto'; const uuid = randomUUID(); // Com biblioteca 'uuid' import { v4 as uuidv4 } from 'uuid'; const uuid = uuidv4();
Python
import uuid # UUID v4 uuid_v4 = uuid.uuid4() print(uuid_v4) # 550e8400-e29b-41d4-a716-446655440000 # UUID v1 uuid_v1 = uuid.uuid1() print(uuid_v1) # 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Java
import java.util.UUID; // UUID aleatório UUID uuid = UUID.randomUUID(); System.out.println(uuid.toString());
PostgreSQL
-- Habilitar extensão CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- Gerar UUID SELECT uuid_generate_v4(); -- Criar tabela com UUID CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), name VARCHAR(100) );
FAQ - Perguntas Frequentes
1. UUIDs são realmente únicos? Pode haver colisão?
UUIDs v4 têm 2¹²² combinações possíveis. A chance de colisão é astronomicamente baixa (1 em 5 bilhões após gerar 1 bilhão de UUIDs). Para fins práticos, considere-os únicos. Bancos de dados modernos detectam colisões através de constraints UNIQUE.
2. UUID v1 é seguro? Posso usá-lo em produção?
UUID v1 revela timestamp de criação e MAC address da máquina, considerado vazamento de informação. Não use para tokens de segurança ou em contextos onde privacidade é crítica. Prefira v4 para segurança, ou v6/v7 se precisar ordenação cronológica sem expor MAC address.
3. UUID impacta performance do banco de dados?
Sim, mas geralmente aceitável. UUIDs aleatórios causam fragmentação de índice B-tree (não são sequenciais). Para PostgreSQL, use UUID v7 ou ULID (Universally Unique Lexicographically Sortable Identifier). Para casos extremos de performance (bilhões de registros), mantenha auto-increment.
4. Devo usar hífens ou remover?
Depende do contexto. Com hífens (padrão RFC 4122): mais legível, compatível com bibliotecas padrão. Sem hífens: economiza 4 bytes em armazenamento string, útil para URLs curtas ou tokens. PostgreSQL armazena binário (16 bytes) independente da formatação.
5. Posso usar UUID como URL shortener?
Tecnicamente sim, mas ineficiente. UUIDs têm 36 caracteres (com hífens) ou 32 sem. Para URL shorteners, use encodings mais curtos: base62 (A-Za-z0-9) gera IDs de 6-8 caracteres, suficientes para bilhões de URLs.
6. UUID funciona em sistemas offline?
Sim! É uma das principais vantagens. Clientes offline (apps mobile, IoT) geram UUIDs localmente sem conexão ao servidor. Quando sincronizam, não há conflitos de ID. Ideal para CRDTs e sync multi-device.