Sitemap

Utilizando UUID como Chave Primária: Uma Análise Crítica

2 min readOct 30, 2021

No vasto universo dos Sistemas de Gerenciamento de Banco de Dados Relacional (RDBMS), a identificação de registros através de um ID autoincremental do tipo Int/BigInt tem sido a norma. Entretanto, o UUID (Identificador Universalmente Único) vem ganhando espaço como chave primária (PK) em muitos esquemas de banco de dados. Este artigo se propõe a investigar se a adoção do UUID é uma escolha consciente ou meramente uma tendência, além de explorar seus impactos na performance dos sistemas.

Entendendo o UUID

O UUID é um padrão para a geração de identificadores únicos, consistindo em 128 bits. Segundo a especificação da RFC 4122, um UUID típico é representado por 32 caracteres hexadecimais, divididos em cinco grupos separados por hífens, resultando em um total de 36 caracteres (por exemplo, 2C553B92–9D28–4AFA-849B-18617ADBF8BA). A estrutura inclui representações para a versão do algoritmo utilizado, com o dígito mais significativo do terceiro grupo indicando esta versão (ex.: o 4 em 2C553B92–9D28–4**AFA-849B-18617ADBF8BA indica o uso do algoritmo UUIDv4).

Propósito do UUID

O principal objetivo do UUID é garantir a unicidade dos identificadores em sistemas distribuídos ou baseados em microserviços, onde registros são frequentemente criados em paralelo, em diferentes locais. O algoritmo do UUID permite a geração de identificadores únicos de forma descentralizada, eliminando a dependência de uma autoridade central para evitar colisões.

UUID como Mecanismo de Segurança

Em determinados contextos, o uso de IDs autoincrementais pode representar um risco de segurança, possibilitando a enumeração de endpoints e a extração indevida de dados. Ao optar por UUIDs, que são não sequenciais e imprevisíveis, esse risco é mitigado, aumentando a segurança dos dados.

Prós e Contras do Uso de UUID

A adoção do UUID como chave primária traz consigo tanto benefícios quanto desvantagens, que devem ser cuidadosamente avaliados pelos desenvolvedores.

Vantagens

  • Descentralização: Permite a geração de IDs únicos sem a necessidade de coordenação central.
  • Segurança: IDs não sequenciais oferecem uma camada adicional de segurança contra ataques de enumeração.
  • Flexibilidade: Facilita a integração e migração de dados entre diferentes sistemas.
  • Previsibilidade: O ID de um registro pode ser conhecido antecipadamente, mesmo antes de sua persistência.

Desvantagens

  • Consumo de Espaço: Como PK, o UUID requer mais espaço de armazenamento do que um Int/BigInt.
  • Performance: A falta de sequencialidade pode afetar negativamente a performance de operações de busca e indexação.
  • Complexidade de Processamento: A manipulação de strings de 128 bits pode exigir mais recursos computacionais.

A decisão de utilizar UUIDs como chaves primárias não deve ser tomada levianamente. É fundamental considerar as particularidades do projeto, a infraestrutura disponível e as exigências de performance antes de adotar essa abordagem.

Para aprofundar-se no tema e explorar comparações de performance e casos de uso específicos, recomenda-se a consulta de recursos adicionais, como o artigo da Percona sobre o impacto dos UUIDs na performance: https://www.percona.com/blog/2019/11/22/uuids-are-popular-but-bad-for-performance-lets-discuss/.

--

--

Fábio J L Ferreira
Fábio J L Ferreira

Written by Fábio J L Ferreira

Arquiteto de software, palestrante e um profundo admirador a filosofia do software livre...