Ir para o conteúdo PET Sistemas de Informação Ir para o menu PET Sistemas de Informação Ir para a busca no site PET Sistemas de Informação Ir para o rodapé PET Sistemas de Informação
  • International
  • Acessibilidade
  • Sítios da UFSM
  • Área restrita

Aviso de Conectividade Saber Mais

Início do conteúdo

PostgresSQL JSON types



Fala pessoal, no PET Redação desta semana iremos abordar e entender melhor sobre uma das formas de armazenamento  de dados do RDBMS (Relational Database Management System) PostgreSQL, o JSON types.

O que é JSON?

JSON,  sigla para JavaScript Object Notation, é um formato compacto e simples de troca de dados entre sistemas amplamente utilizado em diversas linguagens e tecnologias. Destaca-se pela facilidade de leitura e interpretação para humanos e pelo desempenho na análise e geração para as máquinas. Exemplo de um JSON:

O conjunto desses dados que estão dentro dos parênteses é chamado de objeto e, como mostra a imagem, o JSON é organizado na forma de atributo-valor, por exemplo, o campo “nome” é um atributo e o “João da Silva” é o valor. Na imagem, percebe-se a utilização de valores em strings (texto), numbers (números) e arrays (vetores), mas o JSON aceita os outros valores, como booleanos (true ou false) e outros objetos JSON, por exemplo.

Introdução    

Atualmente, todo mundo que vai iniciar um projeto, que necessita de um banco de dados, acaba entrando no questionamento do SQL e NoSQL. Como já falado anteriormente, o PostgreSQL é um RDBMS, ou seja, ele pertence ao grupo dos bancos de dados relacionais (SQL), porém a partir dos JSON types é possível armazenar dados em um banco de dados relacional (SQL) de forma semelhante a um não relacional (NoSQL). Antes de entrar no assunto principal dessa redação, faz-se necessário entender de modo geral um pouco sobre SQL e o NoSQL.

Diferenças de SQL e NoSQL

SQL: SQL é a sigla para “Structured Query Language”, traduzindo ficaria “Linguagem de Consulta Estruturada”, o qual tem o objetivo de tornar viável o modelo relacional de banco de dados, que é uma maneira direta de representar dados em tabelas,  e fornecendo acesso a pontos de dados relacionados entre si.

NoSQL:  NoSQL significaria “Not Only SQL”, traduzindo seria “Não somente SQL”, criado com o objetivo de ter uma performance melhor que o modelo SQL e de forma não relacional, e uma escalabilidade mais horizontal para suprir necessidades onde os bancos relacionais não são eficazes.

Existem 4 tipos de bancos de dados NoSQL:

  • Documento: São dados no modo chave-valor, sendo armazenados como documentos. Exemplo: JSON. Um exemplo de banco de dados desse tipo seria o MongoDB;

  • Chave-valor: É a que mais suporta quantidade de dados, onde um valor pode ser acessado por uma chave identificadora única. Exemplo de banco de dados desse tipo seria o Riak;

  • Colunas: São armazenados em linhas particulares de tabelas de disco, suportando assim, várias linhas e colunas e permitindo sub-colunas. Exemplo de banco de dados desse tipo seria o Cassandra;

  • Grafos: São armazenadas em forma de grafos (vértices e arestas). Exemplo de banco de dados desse tipo seria o Neo4j.

 

Para complementar, o modelo relacional (SQL) tem como base guardar dados dentro de tabelas, diferente do modelo não-relacional (NoSQL), o qual tem como aplicagem o modelo schema, que é usado uma chave de valor para recuperar valores, colunas ou documentos. Com isso, devemos levar em consideração a modelagem do sistema para sabermos qual das duas formas usar. Por exemplo, a escalabilidade no NoSQL é bem maior que no SQL, ou seja, para sistemas mais complexos utilizamos o NoSQL, pois não compensa fazer o uso do mesmo em um sistema simples, isso geraria perda na performance.


Introdução aos
JSON types do PostgreSQL

No PostgreSQL, JSON types são as formas de armazenar JSON em um banco de dados. A vantagem de guardar um JSON com essa tipagem, ao invés de um simples campo de texto, é que ele será validado de acordo com regras do JSON. Além disso, existem funções e operadores específicos para o tratamento de JSON types.

O Postgres possui dois tipos de dados para JSON: json e jsonb. Ambos são praticamente idênticos, mas a diferença está na forma que cada um é armazenado. Enquanto o json é guardado como uma cópia exata do texto JSON, o jsonb é armazenado numa forma binária decomposta. 


Comparação
json e jsonb

Os principais benefícios do jsonb são:

  • Maior eficiência;
  • Consideravelmente mais rápido para processar;
  • Suporta indexação.

As principais desvantagens do jsonb são:

  • Um pouco mais lento para inserção (por causa da conversão);
  • Ocupa mais espaço de disco em alguns casos;
  • Algumas consultas (principalmente as agregadas, como AVG (média), COUNT (contador) e SUM (soma)) podem ser mais lentas.

 

Consultas com json e jsonb

Para fazer consultas SQL, é necessário baixar o PostgreSQL e configurá-lo. Após isso, pode-se iniciar a criação do banco de dados e a criação das tabelas com os campos json e jsonb. Abrindo o pgAdmin e colocando a senha definida na configuração, é possível criar um banco de dados dessa forma:

Seguidamente, deve-se somente nomear a database e clicar em “save”. Posteriormente, para implementar as tabelas do nosso banco de dados deve-se abrir o “Query Tool”, de acordo com imagem abaixo:

Logo, é necessário executar o seguinte query para fazer a criação da tabela “aluno”, que vai ter um campo id, tipo serial e chave primária (identificador único de cada registro da tabela),  e um campo dados, tipo jsonb ou json, como na figura a seguir:

Para executar a query, deve-se clicar “F5” no teclado. Pode-se visualizar que a tabela foi criada a partir da sequência:

Nome do banco de dados → Schemas → Tables

Agora, para inserir um registro na database, é necessário rodar o comando INSERT passando um id e depois um JSON. Ficando assim:

Foi utilizado um JSON reduzido do mostrado no início da redação, para ficar fácil de visualizar. O JSON deve estar entre aspas simples, sem espaçamento e quebra de linha. 

Após inserir mais alguns registros, para visualizarmos somente o nome e a idade dos alunos inseridos, por exemplo, utiliza-se uma consulta de SELECT, como essa:

Após o SELECT, deve-se informar quais os dados que são desejados e após o FROM, informa-se em qual tabela deve ser procurado. A seta depois do dados indica qual parte do JSON é requerida. Pode-se visualizar o resultado dessa consulta na figura abaixo:

A seguir, para realizar um SELECT filtrado pela matrícula, por exemplo, deve-se acrescentar o WHERE na consulta e a matrícula do aluno desejado. Dessa forma:

Percebe-se que após informar qual a tabela que será consultada é passado o filtro pela matrícula do aluno “João da Silva”. A matrícula deve estar entre aspas duplas e aspas simples e deve retornar isso:

Por último, para realizar uma alteração em algum campo específico ou todo o JSON, que já estão registrados na database é possível utilizar o UPDATE. Como no exemplo abaixo: 

Após o UPDATE, informa-se qual a tabela que possui o registro desejado. O SET serve para passar qual atributo será alterado e qual vai ser a alteração. Nesse caso, trocou-se o atributo nome, que está no JSON, de “João da Silva” para “Felipe Carvalho”. A função jsonb_set recebe três parâmetros: o campo da tabela, o atributo que deve ser alterado nesse campo e a alteração em si. Para o UPDATE saber qual registro deve ser modificado é preciso filtrar, com o WHERE, pela matrícula ou pelo nome, da mesma forma que é feito no SELECT.

Posteriormente, pode-se realizar o primeiro SELECT mostrado na redação novamente para visualizar todos os registros e verificar a alteração feita. Ficando assim:

Percebe-se que o aluno que tinha o nome “João da Silva” agora possui o nome “Felipe Carvalho”.

Conclusão

Com isso, foi possível compreender mais sobre os benefícios  dessa funcionalidade que facilita diversas situações, permitindo “colocar” um pouco de NoSQL dentro de um banco de dados PostgreSQL e implementar as consultas básicas de um sistema. Existem diversas outras formas de consultas utilizando o JSON no PostgreSQL que encontram-se nos links das referências.

 

Referências:

 

          Francisco Palermo

Divulgue este conteúdo:
https://ufsm.br/r-791-3199

Publicações Relacionadas

Publicações Recentes