Quando usar UUIDs?

Sumário

Quando usar UUIDs?


Por: Kallil Souza

O uso de identificadores únicos (IDs) em bancos de dados é uma prática comum para garantir a unicidade de registros e facilitar o relacionamento entre tabelas. Tradicionalmente, IDs inteiros (INT) gerados de maneira sequencial pelo próprio banco (através de campos de autoincremento) são amplamente utilizados, mas identificadores únicos universais (UUIDs) também podem ser (e são) bastante utilizados. Mas o que deve determinar a escolha de utilizar essa alternativa?

O que são campos de autoincremento?

Em um banco de dados SQL, o campo de autoincremento é utilizado para gerar automaticamente um valor único e sequencial para uma coluna em uma tabela, geralmente usada como chave primária. Isso é muito útil para garantir a unicidade dos registros sem a necessidade de especificar manualmente um valor para essa coluna a cada vez que um novo registro é inserido.

Em diferentes sistemas de gerenciamento de banco de dados (SGBD), os campos podem ter nomes distintos, mas a ideia é a mesma. No caso do MySQL, por exemplo, chama-se AUTO_INCREMENT, como mostra o exemplo abaixo:

CREATE TABLE Persons (
    Personid int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (Personid)
);

Por padrão, a sequência para um campo de autoincremento é 1, aumentando em 1 a cada registro. Para que a sequência se inicie em um número diferente, a seguinte declaração SQL pode ser utilizada:

ALTER TABLE Persons AUTO_INCREMENT=100;

Ao inserir novos dados na tabela, o campo de autoincremento será preenchido automaticamente:

INSERT INTO Persons (FirstName, LastName)
VALUES ('Lars', 'Monsen');

Quando devem ser usados?

Fatores que podem determinar a escolha pelo uso de IDs inteiros gerados de maneira autoincremental:

  • Desempenho: IDs inteiros são mais eficientes em termos de desempenho. Eles são menores em tamanho comparados aos UUIDs e são mais rápidos para indexar e comparar. Isso pode ser importante para bancos de dados em larga escala com muitas operações de leitura/escrita.
  • Simplicidade: Para aplicativos mais simples, especialmente aqueles que não são distribuídos ou não precisam de um nível extra de segurança, IDs inteiros são diretos e fáceis de trabalhar.
  • Ordenação Natural: IDs inteiros são sequenciais, o que pode ser útil para manter uma sequência ordenada de registros. Isso é frequentemente importante para classificação e paginação.
  • Espaço de Armazenamento: IDs inteiros ocupam menos espaço de armazenamento em comparação com UUIDs (4 bytes para INT vs. 16 bytes para UUID).

Casos de uso nos quais o uso de IDs autoincrementais pode ser mais adequado:

  • Aplicativos web simples ou de servidor único.
  • Aplicativos de alto desempenho, onde o desempenho do banco de dados é crítico.
  • Aplicativos que requerem ordenação natural dos registros.

O que é um UUID?

Um Identificador Único Universal (UUID) é um rótulo usado para identificar de forma exclusiva um recurso entre todos os outros recursos desse tipo. Sistemas de computador geram UUIDs localmente, usando números aleatórios muito grandes. Em teoria, os IDs podem não ser globalmente únicos, mas a probabilidade de duplicatas é extremamente pequena. Se os sistemas realmente precisarem de IDs absolutamente únicos, estes podem ser alocados por uma autoridade central.

UUIDs são valores de 128 bits que são representados canonicamente como uma string de 36 caracteres no formato 123e4567-e89b-12d3-a456-426614174000 (5 strings hexadecimais separadas por hifens). Existem várias versões que diferem ligeiramente na forma como são calculadas; por exemplo, a inclusão de informações temporais.

UUIDs podem ser gerados pelos sistemas de gerenciamento de banco de dados (SGBD) ou pelas aplicações. No MySQL, por exemplo, a função UUID() pode ser utilizada:

SELECT UUID() AS UUID_Value;

Quando usar UUIDs?

Alguns fatores que podem determinar a escolha pelo uso de UUIDs:

  • Unicidade em Sistemas Distribuídos: UUIDs são únicos em diferentes sistemas sem necessidade de coordenação. Isso é particularmente útil em bancos de dados distribuídos, arquiteturas de microsserviços ou sistemas onde os registros podem ser criados independentemente em vários nós.
  • Segurança e Ofuscação: Se você precisa evitar IDs sequenciais previsíveis (o que pode ser um risco de segurança), UUIDs podem fornecer um nível de ofuscação. É mais difícil para os usuários adivinharem quantos registros existem ou acessar registros que não deveriam.
  • Mesclagem de Dados de Múltiplas Fontes: Quando os dados precisam ser mesclados de vários bancos de dados ou sistemas, UUIDs ajudam a evitar conflitos de ID.
  • Migração de Dados: Durante a migração de dados, onde registros são transferidos entre sistemas, UUIDs ajudam a manter a unicidade dos registros.

Casos de uso nos quais o uso de UUIDs pode fazer mais sentido:

  • Aplicações baseadas em microsserviços, onde diferentes serviços precisam criar registros independentemente.
  • Aplicações que exigem alta segurança e privacidade, como sistemas financeiros ou aplicativos que lidam com dados sensíveis.
  • Sistemas onde dados de múltiplas fontes (por exemplo, vários escritórios ou regiões) precisam ser mesclados.

Conclusão

Escolher entre UUIDs e IDs inteiros regulares depende dos requisitos específicos e das restrições do seu aplicativo. Se você precisa de unicidade global, segurança e capacidade de mesclar dados de múltiplas fontes, UUIDs são a melhor escolha. Para aplicativos sensíveis ao desempenho, onde simplicidade e eficiência são fundamentais, IDs inteiros regulares são tipicamente mais apropriados.

Está tendo dificuldade com UUIDs e outros assuntos técnicos? Fale conosco!
https://b2bit.company/

Compartilhe
Facebook
Twitter
LinkedIn
WhatsApp

Aproveite e leia também