DEV Community

Dominique Morem
Dominique Morem

Posted on

Identificador Único Universal (UUID): o que a pgcrypto e a sua mãe têm em comum...

Sim eu sei, a comparação entre a sua mãe e uma extensão do PostgreSQL pode soar um tanto quanto estranha e bizarra, mas sim... ela é possivel!

Vou traçar um paralelo entre o que a pgcrypto*1 proporciona e o que a sua mãe proporciona e você vai entender a comparação! Para tal, vou me munir de todo o arsenal argumentativo que o Davide Santangelo traz sobre as vantagens e desvantagens do uso de UUIDs em sua fabulosa postagem...

Mas espera aí, o que que é pgcrypto e porque você está falando de UUIDs? Está tudo meio solto, não estou entendendo...

Vamos contextualizar: a pgcrypto é uma extensão do PostgreSQL que te permite criptografar, descriptografar, gerar hashes e criar assinaturas digitais dentro do seu banco de dados (fonte: TigerData). Mais do que isso, é ela quem te permite trabalhar com UUIDs na sua aplicação Rails (vide a documentação - Dá para usar a extensão uuid-ossp também, mas atualmente não é lá muito recomendável*3). Essa extensão, como a sua, a minha, as nossas mães pode nos trazer algo, uma ferramenta poderosa para nos dar paz de espírito em alguns momentos. Está curioso para saber? Vem comigo que eu te mostro, mas antes de partirmos lembre-se "A pgcrypto te possibilita gerar UUIDs", guarde isso! Vamos às semelhanças:

1 - Nada de vida fácil aos predadores!

Assim como muitas mamães escondem os seus filhotinhos de predadores no reino animal, a pgcrypto também esconde o que lhe é caro (os IDs)! Ela vai encriptografar os IDs das suas tabelas, conferindo aleatoriedade e imprevisibilidade a eles. Como uma mãe protetora, ela mascara os IDs da sua aplicação, tornando os identificadores mais dificeis de ler e manusear*1

2 - Te impede de entrar em conflitos!

Quem nunca ouviu um "Se brigar na escola, vai apanhar 2 vezes. Uma na rua e a outra quando chegar em casa..."? A saudosa Rochelle, mãe do Chris - de 'Todo mundo odeia o Chris' - é um clássico exemplo disso! Bordões à parte, Santangelo explica que os UUIDs são gerados para serem globalmente únicos, ou seja, eles promovem uma maior garantia de que registros de diferentes bancos de dados - ou sistemas distribuídos - nunca entrem em conflito.

3 - Se tem, o que tem, quanto tem e onde tem... não interessa! Ou pelo menos não a quem vem de fora.

Vanessa da Mata, Leandra Leal, Adele e Sandy são alguns exemplos de mães que optaram por preservar a privacidade, o sigilo e o anonimato de seus filhos, muitas vezes por uma questão óbvia de segurança. Não é incomum que celebridades que sejam mães e pais mantenham seus filhos fora dos holofotes, o recente caso do ataque à filha de Roberto Justus nas redes ilustra bem isso.

Manter a privacidade de quanto tem, o que tem e onde tem pode te poupar de uma série de problemas e essas pessoas famosas - mães ou não - sabem disso. Pois bem, o mesmo princípio das mães discretas também se aplica ao uso do UUID em projetos. Isso fica claro da fala de Eliaseas, em um debate num tópico do TabNews, quando o desenvolvedor revela que o UUID cria:

[...] segurança por obscuridade. Você pode não querer dar visibilidade ao usuário sobre a quantidade de pedidos que tem no seu sistema. Então ao invés de usar um id de pedido sequencial, você randomiza usando um UUID.

Mas nem tudo são flores!

1 - Coração de mãe é grande, sempre cabe mais um!

Pois é, enquanto que na vida real a frase tem uma conotação positiva e acolhedora, aqui na analogia que eu tracei ela não é tão 'simpática' assim. Isso porque, em comparação aos inteiros autoincrementais o UUID possui um tamanho de armazenamento aumentado, o que consome mais do banco de dados. UUIDs possuem 128 bits, enquanto que os Inteiros possuem apenas 32 bits.

2 - "Onde estás, meu senhor. Onde estás? Onde estás?" (Diáspora - Tribalistas)

O trecho acima é de uma música dos Tribalistas que ilustra bem os desafios de quem emigra de um lugar para o outro. Quase sempre o processo de migração - quer seja para as casas de nossos pais ou não - é trabalhoso, muito trabalhoso e, às vezes, demorado, burocrático e pode deixar a gente meio perdido (como no trecho da canção).

É necessário passar por uma série de adequações, mudanças e processos nessa migração de uma casa para a outra. De um lugar para o outro. Tanto quanto demostrado na música acima, migrar as chaves primarias e estrangeiras de um banco de dados de inteiros para UUID pode ser um processo um tanto quanto burocrático, trabalhoso e delicado. A migração de dados, caso você esteja em uma aplicação já existente e queira realizar o processo de mudança, apesar de trabalhosa é possivel.

"Está bagunçado, mas tem gerência!"

Para finalizar a postagem, trago esse bordão da mãe de uma amiga minha. Ela sabia brincar quando era para brincar, mas sabia passar muita informação séria e educativa também. Como ela, eu quis trazer aqui algo que tivesse essa pegada, leve e informativa (e se eu não consegui trazer, ao seu ver, peço perdão!). Apesar da postagem possuir um fundo humorístico, o intuito era mesclar algumas infomações técnicas também.

Caso tenha se interessado pela temática dos Identificadores Únicos Universais trabalhados com o PostgresSQl e com o Ruby on Rails. Deixo aqui duas referências, que eu pude acompanhar e que são ótimas:

  • Se você quiser saber como utilizar UUID no Rails 7 com PostgreSQL: https://dev.to/xandekk/usando-uuid-no-rails-7-com-postgresql-223o. O texto é bem objetivo, claro e didático.

  • Caso queira ver na prática ali na tela, no ao vivo, como se faz esse processo de implantação e o porque fazê-lo. Sugiro o curso 'Ruby on Rails 7.x para Iniciantes' do Professor Jackson Pires: https://videosdeti.com.br/. Em uma de suas aulas ele ensina a como configurar a aplicação para aplicar o UUID aos ID das tabelas.

Sobre os asteríscos no texto (são aprofundamentos)...

  • 1 - Aprofundando - Universally unique identifier ou Identificador Único Universal traduzindo para o português. É um identificador universalmente exclusivo, que consiste em um número de 128 bits representado por 32 dígitos hexadecimais, que são exibidos em cinco grupos e que são separados por hifens segundo Paixão (2018)

  • 2 - Aprofundando - Davide fala que uso de UUIDs pode melhorar a segurança da sua aplicação, pos dificulta que agentes maliciosos prevejam ou adivinhem valores das chaves primárias. E para além disso, os UUIDs não expõem informações sobre a sequência ou estrutura de outros identificadores.

  • 3 - Aprofundando: - Observação, você pode utilizar a extensão uuid-ossp do PostgreSQL, também presente na documentação do Rails, mas ela só é indicada caso você esteja trabalhando com uma versão abaixo da 9.4 do Postgres, depois dessa versão ela foi substituída pela pgcrypto. A própria documentação do Rails também faz essa recomendação. Caso deseje um comparativo mais objetivo sobre as duas extensões e porquê utilizar cada uma ou não, segue uma tabelinha que eu pedi pro Chat GPT gerar... ps: lembre-se de que IAs podem alucinar, portanto, nem tudo que está ali pode ser fato.

Imagedescription

Top comments (0)