Utilizar chaves primarias inteiras ou GUIDs?
Tags: architecture, programming, backend, braziliandevs
Published: 2023-02-19 16:11:25

## Introdução

A escolha entre chaves primárias inteiras ou GUIDs pode ser uma decisão importante ao projetar um banco de dados. Ambas as opções têm seus prós e contras, e a escolha certa depende das necessidades específicas do projeto em questão. Neste artigo, vamos explorar os pontos positivos de se utilizar chaves primárias inteiras em detrimento de GUIDs, em termos de tamanho de armazenamento, desempenho, confiabilidade e outros fatores importantes. Além disso, vamos discutir quando os GUIDs podem ser mais adequados, especialmente em sistemas distribuídos ou em casos onde a coleta de dados ocorre offline. Por fim, vamos discutir a diferença entre GUIDs aleatórios e sequenciais e como essa escolha pode impactar o índice utilizado.

## Tamanho de armazenamento

As chaves primárias inteiras são mais compactas em termos de armazenamento do que os GUIDs. Isso significa que elas requerem menos espaço no disco e na memória, o que pode ser importante em bancos de dados com muitos registros ou em sistemas com recursos limitados.

## Desempenho

As chaves primárias inteiras são mais eficientes do ponto de vista do desempenho do que os GUIDs. Isso ocorre porque as operações de pesquisa e junção são mais rápidas com chaves primárias inteiras, já que elas têm um tamanho menor e são mais fáceis de comparar.

## Confiabilidade

As chaves primárias inteiras são mais confiáveis do que os GUIDs em algumas situações. Por exemplo, se um banco de dados é replicado ou restaurado de um backup, as chaves primárias inteiras permanecem consistentes, enquanto os GUIDs podem ser diferentes entre as diferentes instâncias.

## Ordenação

As chaves primárias inteiras podem ser ordenadas facilmente, o que pode ser útil em consultas que exigem a ordenação dos resultados.

## Restrição de tamanho

As chaves primárias inteiras têm um tamanho máximo, o que pode limitar o número de registros que podem ser armazenados em uma tabela.

## Possibilidade de conflito

Se duas tabelas diferentes usarem as mesmas chaves primárias inteiras, pode ocorrer um conflito, o que pode levar a erros e problemas de integridade de dados.

## Sistemas distribuídos e replicados

GUIDS são úteis em sistemas distribuídos ou replicados porque são globalmente únicos e podem ser gerados independentemente por cada instância do banco de dados. Isso permite fácil replicação e sincronização de dados em várias instâncias. 

## Coleta de dados off-line

Ao coletar dados off-line, não há garantia de que a chave primária será exclusiva em todas as instâncias do banco de dados. Os GUIDs fornecem uma maneira confiável de gerar IDs exclusivos, mesmo quando desconectados da rede.

## Mesclando dados de diferentes bancos de dados

Os GUIDs podem ser usados para mesclar dados de diferentes bancos de dados porque eles são garantidos como globalmente exclusivos. Isso pode ser útil em situações em que vários bancos de dados precisam ser combinados.

## Geração de GUID aleatório ou sequencial

Um GUID aleatório é gerado de forma totalmente aleatória e não segue nenhum padrão específico. Ele é criado com base em fatores como a hora atual do sistema, o endereço MAC do computador, o número do processo do sistema operacional e outros dados do ambiente. Como resultado, a probabilidade de gerar dois GUIDs aleatórios idênticos é extremamente baixa. Caso opte por esse opção, provavelmente o index deve ser non-clustered.

Por outro lado, um GUID sequencial é gerado seguindo um padrão específico. Normalmente, um GUID sequencial é gerado usando um contador e o endereço MAC do computador. Isso garante que cada GUID sequencial seja único e aumenta a eficiência do armazenamento em bancos de dados, uma vez que os GUIDs sequenciais tendem a ser mais previsíveis e podem ser ordenados de forma mais fácil .Caso opte por esse opção, provavelmente o index deve ser clustered.

## Conclusão

A escolha entre utilizar chaves primárias inteiras ou GUIDs depende das necessidades específicas de cada aplicação e do seu ambiente. As chaves primárias inteiras são mais compactas e eficientes em termos de desempenho, mais confiáveis em algumas situações e podem ser facilmente ordenadas. No entanto, elas têm um tamanho máximo e podem apresentar problemas de conflito se duas tabelas diferentes usarem as mesmas chaves primárias. Por outro lado, os GUIDs são úteis em sistemas distribuídos e replicados, coleta de dados off-line e mesclagem de dados de diferentes bancos de dados. Os GUIDs podem ser gerados aleatoriamente ou sequencialmente, e cada método tem suas próprias vantagens e desvantagens. Portanto, é importante considerar cuidadosamente as necessidades e limitações de cada aplicação ao escolher entre chaves primárias inteiras e GUIDs, bem como decidir qual método de geração de GUID usar e qual tipo de índice aplicar.