Codificação de cadastros – UUID

Nas versões mais novas de nossos sistemas passamos a utilizar UUID como chave primária de cadastros. Elaboramos este artigo para explicar o porque de usarmos estes códigos e como eles funcionam.

Independente do módulo, nossos sistemas utilizam UUID para codificar cadastros. Será comum você observar no topo da tela de qualquer cadastro um campo parecido com isso:

Este texto gigante é o UUID – universally unique identifier, ou traduzindo, identificador universal único. Salvo para registros criados internamente pelo sistema ou importados de outros sistemas, todos os cadastros terão códigos neste formato.

Em sistemas anteriores era comum usarmos um código sequencial numérico, que começava de 1 e ia incrementando, mas ele costumava gerar alguns problemas para nós, e até era comum alguns usuários não gostarem dos “buracos” que ficavam na sequência após a exclusão de algum registro, mesmo não sendo objetivo do campo o controle interno do usuário.

Com o identificador universal único, uma grande vantagem é a possibilidade de combinar diferentes bases de dados em uma só. Nossos sistemas até já acompanham funções de exportação e importação que podem se beneficiar deste recurso. Você pode ter várias pessoas cadastrando informações em computadores totalmente isolados, e depois gerar o arquivo xml destes cadastros e importar tudo num só, sem haver chance de duplicidade. Falando sobre a importação, note que em cadastros com foto a imagem não é incluída no xml.

O código UUID é gerado aleatoriamente, e devido ao seu grande tamanho e a aleatoriedade do algoritmo eles são praticamente únicos. Note que praticamente únicos não significa que realmente são únicos. Ainda que ínfima, existe a chance de um código que já foi registrado ser gerado novamente. Isso é chamado de “colisão”, e ao ocorrer isso você verá um erro “key violation” ao salvar o cadastro, ocasionando a perda das informações digitadas. Porém, a chance é tão remota que vale o risco.

Mas o quão remota é essa chance? Segundo este artigo na wikipedia, é possível gerar até 2122 códigos diferentes (2 seguido de 122 zeros) no uuid versão 4, o que utilizamos. Se tiver uma base com 103 trilhões de registros a chance de duplicar um código é de 1 em 1 bilhão. Caso gere 1 bilhão de registros por segundo, após 85 anos alcançará 50% de chance de duplicar o código. Para efeito de comparação, a maior base que já vimos em nossos clientes nestes 15 anos de existência da Soriodev tinha cerca de 2 milhões de registros numa única tabela. O normal é um número ainda bem menor que este. É bem mais provável que:

Do que consiga obter um erro com um código duplicado em nosso sistema. Creio que vale o risco em prol das vantagens.