Qual o melhor tipo de ID para seu sistema? AUTO_INCREMENT, UUIDv4, UUIDv7 ou ULID?
🔑 AUTO_INCREMENT vs UUIDv4 vs UUIDv7 vs ULID
Ao construir bancos de dados e arquiteturas escaláveis, a escolha do tipo de ID
é estratégica. Neste guia prático, você vai entender as diferenças entre:
AUTO_INCREMENT
(inteiro sequencial)UUIDv4
(aleatório)UUIDv7
(tempo + aleatório)ULID
(ordenável + legível)
🧠 Comparativo Geral
Critério | AUTO_INCREMENT | UUIDv4 | UUIDv7 | ULID |
---|---|---|---|---|
🔢 Tipo | Inteiro | Aleatório | Timestamp + Aleatório | Timestamp + Aleatório |
🧭 Ordenável | ✅ Sim | ❌ Não | ✅ Sim | ✅ Sim |
🌍 Única no mundo | ❌ Não | ✅ Sim | ✅ Sim | ✅ Sim |
🚀 Performance | ✅ Alta | ⚠️ Fraca em índices | ✅ Alta | ✅ Alta |
🔐 Previsibilidade | ❌ Sim | ✅ Não previsível | ✅ Não previsível | ✅ Não previsível |
🧾 Legibilidade | ✅ Boa | ❌ Ruim | ⚠️ Média | ✅ Alta |
🧩 Padrão UUID | ❌ Não | ✅ Sim | ✅ Sim | ❌ Não (formato próprio) |
📌 Quando usar cada um?
🔹 AUTO_INCREMENT
Simples e eficaz em bancos monolíticos. Ótimo para sistemas pequenos ou controlados.
⚠️ Desvantagem: fácil de prever, não funciona bem em ambientes distribuídos.
✅ Vantagem: ordenável e ocupa poucos bit.
🔹 UUIDv4
Totalmente aleatório. Funciona bem em sistemas distribuídos que não precisam de ordenação.
⚠️ Desvantagem: quebra a ordenação de índices → performance pior em bancos com muitas escritas.
✅ Vantagem: difícil previsibilidade.
🔹 UUIDv7
Usa timestamp + entropia randômica. É ordenável e globalmente único.
✅ Ideal para: APIs modernas, sistemas distribuídos, logs auditáveis e banco de dados com ordenação por
createdAt
.
🔹 ULID
Alternativa moderna e legível. Ordenável por tempo e ótimo para debug humano.
✅ Ideal para: sistemas onde legibilidade e ordenação importam (ex: logs, IDs visíveis em URL).
⚠️ Desvantagem: não utiliza padrão UUID.
✨ Exemplos reais de cada tipo de ID
Tipo | Exemplo |
---|---|
AUTO_INCREMENT | 1 , 2 , 3 , 4 , 5 , ... |
UUIDv4 | f47ac10b-58cc-4372-a567-0e02b2c3d479 |
UUIDv7 | 68414cb4-cd2f-7d25-bf69-9d8f3ee2c41a |
ULID | 01HSHZK5WFP0RKNJ6XCVZ5R1AB |
🏆 UUIDv7
🔍 Anatomia da UUIDv7 — Como ela funciona?
A UUIDv7 é uma evolução moderna do padrão UUID, que combina ordenabilidade por tempo com unicidade garantida via entropia aleatória.
Ela mantém os 128 bits tradicionais dos UUIDs, mas reorganiza esses bits de forma estratégica.
📐 Estrutura técnica da UUIDv7
Campo | Bits | Significado |
---|---|---|
Timestamp | 48 | Tempo atual em milissegundos desde 1970 (Unix Epoch) |
Versão | 4 | Sempre 0111 (decimal 7) — indica que é um UUIDv7 |
Variante | 4 | Bits reservados para compatibilidade com o padrão UUID/RFC |
Random | 74 | Entropia aleatória para garantir unicidade mesmo no mesmo milissegundo |
🧪 Exemplo prático de UUIDv7
68414cb4-cd2f-7d25-bf69-9d8f3ee2c41a
🧪 Gerando UUIDv7 em Node.js
import { v7 as uuidv7 } from 'uuidv7';
const id = uuidv7();
console.log(id); // Ex: 01890d4c-cd2f-7d25-bf69-9d8f3ee2c41a
//EXPLICAÇÃO
//[68414cb4] → Timestamp (milissegundos desde 1970)
//└── hex: 68414cb4
// └── decimal/timestamp: 1749109940
// └── ISO 8601: 2025-06-05T07:52:20.000Z
//[cd2f] → Parte randômica
//[7d25] → Versão + variante
//[bf69-9d8f3ee2c41a] → Mais 74 bits de entropia aleatória
💙 💻 ☕️ 😎 Se você chegou até aqui, espero ter colaborado em algo útil para você tomar as próxima decisões. Abraços!
Fonte: https://uuid7.com/