Olá, estudante, agora que você já sabe o impacto dos requisitos culturais e políticos no desenvolvimento de software, irei lhe apresentar os formatos de armazenagem de dados! No mundo da tecnologia, o armazenamento de dados desempenha um papel crucial no desenvolvimento de software. Os programadores e engenheiros de software precisam entender os diferentes formatos de armazenagem de dados disponíveis para escolher a melhor abordagem de acordo com as necessidades de seus projetos. Nesta lição, nosso objetivo é explorar os principais formatos de armazenagem de dados e suas aplicações no desenvolvimento de software.
Você conhecerá e relembrará alguns desses formatos, como: texto (txt), json (JavaScript Object Notation), bancos de dados relacionais, banco de dados NoSQL, entre outros. A escolha do formato certo é crucial para o sucesso do projeto, pois afeta a eficiência, a escalabilidade e a capacidade de lidar com os dados de maneira eficaz. Com um entendimento sólido dessas opções, você estará bem equipado para tomar decisões informadas em seus futuros projetos de software.
Aqui, você verá como resolver problemas de armazenagem de dados com banco de dados NoSQL. Os dados desempenham um papel central em muitos aspectos do nosso mundo digital, desde aplicativos móveis até sistemas de comércio eletrônico e análise de big data. No entanto, com o aumento exponencial no volume e na complexidade dos dados, surge a necessidade de formatos de armazenagem mais flexíveis e escaláveis. Um problema que os bancos de dados NoSQL resolvem com eficácia é a gestão de dados semiestruturados e não estruturados.
Os dados semiestruturados e não estruturados são informações que não se encaixam facilmente em formatos de banco de dados tradicionais, como tabelas de um banco de dados relacional. Isso inclui documentos JSON, XML, dados de sensores IoT, registros de eventos, redes sociais e muito mais. Você normalmente optará por esse formato, pois eles resolvem problemas como escalabilidade – uma vez que, à medida que os dados semiestruturados e não estruturados se acumulam, as soluções de armazenamento tradicionais podem enfrentar dificuldades para escalonar e lidar com grandes volumes de dados de forma eficiente –, bem como a flexibilidade – pois a estrutura desses dados pode mudar com o tempo, tornando difícil a adaptação a alterações sem a necessidade de remodelagem completa do banco de dados. Tudo isso culmina no desempenho, pois a realização de consultas complexas em dados semiestruturados e não estruturados pode ser lenta em sistemas de banco de dados relacional.
Sendo assim, os bancos de dados NoSQL resolveram com êxito o desafio de armazenar e gerenciar dados semiestruturados e não estruturados. Sua flexibilidade, escalabilidade e capacidade de consulta eficiente tornam-se uma escolha poderosa para muitas aplicações modernas.
O case fictício da lição é a Tech Solutions, uma empresa fictícia de tecnologia que enfrentou desafios crescentes ao lidar com uma explosão de dados em sua plataforma de comércio eletrônico. Inicialmente, a empresa dependia de um banco de dados relacional tradicional para armazenar informações de produtos, registros de clientes e transações. No entanto, à medida que a empresa cresceu, ficou claro que esse sistema não conseguia mais atender às demandas de escalabilidade, flexibilidade e desempenho. Esse case fictício narra a jornada da Tech Solutions ao migrar para um banco de dados NoSQL para solucionar esses problemas.
A Tech Solutions enfrentava vários desafios com seu banco de dados relacional: escalabilidade limitada, esquema rígido e consultas lentas. Após uma extensa pesquisa e avaliação de diferentes opções, a equipe de engenharia optou por migrar para um banco de dados NoSQL, escolhendo o MongoDB devido à sua capacidade de lidar com dados semiestruturados e escalabilidade horizontal. As vantagens como escalabilidade horizontal, flexibilidade de esquema e consultas rápidas foram os principais tópicos que “pesaram” na decisão.
Como resultado da migração, a empresa obteve uma melhoria considerável de desempenho, uma escalabilidade sem esforço e inovação mais rápida, pois as consultas agora eram executadas em uma fração do tempo, melhorando drasticamente a experiência do usuário, a empresa agora pode lidar com picos de tráfego sazonal e aumentar a capacidade de armazenamento sem problemas e com a flexibilidade a empresa já conseguiu lançar novos recursos e serviços mais rapidamente. Sendo assim, por meio desse exemplo, vemos uma situação em que o conhecimento sobre os formatos de armazenamento foi necessário para solucionar problemas que a empresa vinha passando.
Formatos de armazenagem de dados se referem à estrutura e organização que os dados assumem quando são armazenados digitalmente. Entender esses formatos é crucial no desenvolvimento de software, pois determinam como os dados são organizados, acessados, lidos, gravados e processados por aplicativos e sistemas de software. Esses formatos de armazenagem de dados são importantes por várias razões:
Estruturação dos dados: os formatos de armazenagem de dados definem como os dados são estruturados, o que significa que eles determinam como as informações são organizadas em campos, registros, tabelas, documentos ou outros elementos de dados. Isso permite que os desenvolvedores organizem informações de maneira lógica e compreensível.
Eficiência de armazenamento: alguns formatos de armazenagem são mais eficientes do que outros em termos de espaço ocupado em disco. Escolher um formato de armazenagem adequado pode economizar recursos de hardware e reduzir custos de armazenamento.
Velocidade de acesso: a escolha do formato de armazenagem pode afetar a velocidade de acesso aos dados. Alguns formatos são otimizados para consultas rápidas e eficientes, enquanto outros podem ser mais lentos para recuperar informações.
Integridade dos dados: os formatos de armazenagem podem influenciar a integridade dos dados, garantindo que as informações sejam armazenadas e recuperadas sem erros ou perdas.
Interoperabilidade: a escolha do formato de armazenagem também pode afetar a interoperabilidade entre sistemas e aplicativos. Usar formatos de armazenagem padrão pode facilitar a troca de dados entre diferentes sistemas.
Adaptabilidade: os formatos de armazenagem podem ser adaptados para atender às necessidades específicas de um aplicativo ou sistema. Isso é importante quando os requisitos de dados mudam ao longo do tempo.
Segurança: alguns formatos de armazenagem permitem a aplicação de medidas de segurança, como criptografia de dados, o que é fundamental para proteger informações sensíveis.
Escalabilidade: a capacidade de escalonar e lidar com grandes volumes de dados também é influenciada pelo formato de armazenagem escolhido. Alguns formatos são mais adequados para cenários de alta escalabilidade.
A escolha do formato certo depende das necessidades específicas do projeto e das características dos dados que estão sendo manipulados. Portanto, o técnico em desenvolvimento de software deve considerar cuidadosamente os formatos de armazenagem de dados ao projetar sistemas de software para garantir que atendam aos requisitos do aplicativo de maneira eficaz e eficiente.
O formato TXT (texto) é um formato de armazenamento de dados simples e legível por humanos. Nesse formato, os dados são representados como texto puro, geralmente em um arquivo de texto simples, em que os valores são separados por espaços, tabulações ou quebras de linha. Não há estrutura ou formatação complexa associada ao formato TXT.
Algumas das aplicações de formato TXT são:
Configurações de aplicativos: o formato TXT é comumente usado para armazenar configurações e preferências de aplicativos de software, pois é fácil de ler e editar manualmente.
Registros de logs: é amplamente utilizado para registrar informações de log, como erros, eventos e atividades em sistemas de aplicativos.
Intercâmbio de dados simples: é usado para a troca de dados simples entre aplicativos e sistemas, especialmente quando a estrutura dos dados não é complexa.
Documentação e anotações: é útil para armazenar notas, documentação e informações de referência em texto simples.
Armazenamento temporário de dados: em alguns casos, o formato TXT pode ser usado como um formato temporário para armazenar dados que serão processados ou transformados posteriormente.
Compatibilidade universal: devido à sua simplicidade, o formato TXT é amplamente compatível com uma variedade de sistemas e aplicativos, tornando-o uma escolha versátil para armazenamento de dados básicos.
É um formato de armazenamento de dados leve e fácil de ler que é amplamente utilizado para troca de dados entre aplicativos, serviços web e sistemas. Segundo o MDN Web Docs (2023), trata-se de um formato baseado em texto padrão para representar dados estruturados com base na sintaxe do objeto JavaScript. É comumente usado para transmitir dados em aplicativos da web.
O JSON é estruturado em dois tipos principais de elementos: objetos e arrays. Vejamos, a seguir, uma explicação detalhada de como o JSON é estruturado:
Objeto JSON: um objeto JSON é delimitado por chaves “{}”. Ele consiste em um conjunto de pares chave-valor, em que cada chave é uma string entre aspas duplas e é seguida por “:” para separar a chave do valor. Os pares chave-valor são separados por vírgulas “,”.
Array JSON: um array JSON é delimitado por colchetes “[]”. Ele contém uma lista ordenada de valores, que podem ser strings, números, objetos, arrays, booleanos, null, etc. Os valores em um array são separados por vírgulas “,”.
Tipos de dados suportados: o JSON suporta vários tipos de dados, incluindo string, números, booleanos, objetos, arrays, null e outros valores primitivos. Strings devem ser delimitadas por aspas duplas “”. Os números podem ser inteiros ou de ponto flutuante. Os booleanos são representados como true ou false. O valor nulo é representado como null.
Aninhamento de objetos e arrays: o JSON permite aninhar objetos e arrays dentro de outros objetos e arrays, criando estruturas de dados complexas e hierárquicas.
O JSON é amplamente utilizado na comunicação entre sistemas distribuídos, armazenamento de configurações, intercâmbio de dados em APIs da web e muito mais, devido à sua simplicidade, facilidade de leitura e suporte em muitas linguagens de programação. Ele se tornou um formato padrão para muitos aplicativos que precisam transmitir e armazenar dados de forma eficiente e estruturada.
Os Bancos de Dados Relacionais (RDBMS - Relational Database Management System) são sistemas de gerenciamento de banco de dados que armazenam e gerenciam dados em uma estrutura de tabelas relacionadas. Eles são chamados de "relacionais". Segundo Date (2023), os dados são percebidos pelo usuário como tabelas e suas relações com outras tabelas e nada mais além de tabelas. Vejamos uma explicação mais detalhada:
no contexto dos bancos de dados relacionais, os dados são organizados em tabelas, que são estruturas bidimensionais compostas por linhas e colunas. Cada tabela representa uma entidade ou tipo de dados específico, como clientes, produtos ou pedidos em um sistema de comércio eletrônico. As colunas em uma tabela representam atributos ou campos de dados, como nome, idade ou preço de um produto.
o esquema de um banco de dados relacional define a estrutura das tabelas, incluindo os nomes das tabelas, as colunas em cada tabela, os tipos de dados aceitáveis e as relações entre as tabelas. Os esquemas garantem que os dados sejam armazenados de maneira consistente e que as relações entre as tabelas sejam definidas com precisão.
Alguns dos exemplos mais utilizados de bancos de dados relacionais são:
MySQL: é um dos bancos de dados relacionais mais populares e amplamente utilizados. É de código aberto e oferece uma combinação de desempenho sólido, escalabilidade e facilidade de uso.
PostgreSQL: é outro banco de dados relacional de código aberto que é conhecido por sua robustez, suporte a recursos avançados e conformidade com padrões.
SQL Server: é uma solução de banco de dados relacional desenvolvida pela Microsoft. É amplamente usado em ambientes corporativos e é conhecido por sua integração com outras ferramentas da Microsoft.
Os bancos de dados relacionais são comumente usados em cenários em que a integridade e a estrutura dos dados são críticas. São conhecidos por seu rigor na manutenção da integridade dos dados e na capacidade de realizar consultas complexas usando a linguagem SQL (Structured Query Language). Eles têm sido a base de muitos sistemas de informações empresariais ao longo dos anos, oferecendo confiabilidade e desempenho consistentes.
São sistemas de gerenciamento de banco de dados que diferem dos bancos de dados relacionais tradicionais em termos de modelagem, estrutura de dados e operações de consulta. Eles foram projetados para atender a requisitos específicos em cenários nos quais os bancos de dados relacionais podem ser menos eficientes. Um dos conceitos-chave dos bancos de dados NoSQL é a flexibilidade de esquema que é um conceito central nos bancos de dados NoSQL. Diferentemente dos bancos de dados relacionais, que exigem um esquema de dados rígido e predefinido, os bancos de dados NoSQL permitem que você armazene dados sem a necessidade de uma estrutura de tabela fixa. Isso significa que você pode adicionar campos ou alterar a estrutura dos dados conforme necessário, sem afetar drasticamente o funcionamento do banco de dados.
Segundo Paniz (2016), existem diversos bancos não relacionais e, normalmente, eles são rotulados de acordo com a forma como os dados são armazenados. Os principais tipos desses bancos são: chave-valor, colunar, documento e grafo. A flexibilidade de esquema oferece várias vantagens:
Acomodação de dados semiestruturados e não estruturados: os dados semiestruturados, como documentos JSON ou XML, são comuns nos bancos de dados NoSQL. A capacidade de armazenar esses tipos de dados sem a preocupação com a estrutura rígida é uma grande vantagem.
Agilidade no desenvolvimento: a capacidade de adicionar ou modificar campos de dados facilita o desenvolvimento ágil, permitindo que os desenvolvedores se adaptem às mudanças nos requisitos rapidamente.
Escalabilidade horizontal: muitos bancos de dados NoSQL são projetados para escalabilidade horizontal, o que significa que você pode adicionar servidores para acomodar grandes volumes de dados e tráfego sem uma remodelagem significativa do esquema.
Alguns dos exemplos mais utilizados de bancos de dados NoSQL são:
MongoDB: é um banco de dados NoSQL orientado a documentos que armazena dados em documentos JSON BSON (Binary JSON). Ele é amplamente utilizado para aplicativos da web e móveis devido à sua flexibilidade de esquema e escalabilidade.
Cassandra: é um banco de dados NoSQL orientado a colunas altamente escaláveis e distribuído. É usado em cenários em que a escalabilidade horizontal é crucial, como em aplicativos com grandes volumes de dados distribuídos.
Redis: é um banco de dados NoSQL de chave-valor que é extremamente rápido e eficiente para armazenamento em cache de dados em memória. Ele é amplamente utilizado para aplicativos que requerem alta velocidade de acesso aos dados.
Cada um desses exemplos demonstra como os bancos de dados NoSQL podem oferecer flexibilidade de esquema, permitindo que os desenvolvedores armazenem, modifiquem e acessem dados de maneira mais ágil e escalável do que os bancos de dados relacionais tradicionais.
Neste Saiba Aplicar, você implementará o uso de um dicionário de dados em Python que representa o armazenamento em JSON, apresentado nesta lição. É importante que você pratique o uso de JSON, pois ele é uma solução rápida para problemas simples que não necessariamente irão lhe “custar” o uso de banco de dados, sejam eles relacionais ou não. Essa implementação está simplificada em um único arquivo, mas está “aberta” para que você se desafie e amplie o contexto em que ela está inserida. Chega de conversa e mão na massa!
Siga o passo a passo a seguir para a implementação:
Abra seu navegador web e acesse o site OnlineGDB em: https://www.onlinegb.com.
Escolha a linguagem de programação que deseja usar – selecione Python na lista suspensa.
No editor de código, você pode escrever o código Python para calcular o fatorial de forma recursiva conforme a Figura 1.
Após escrever o código, você pode clicar no botão Run na parte superior do editor. Isso executará o código Python e mostrará o resultado na janela de saída.
Na janela de saída, você verá a saída do seu programa, que, nesse caso, será: “{“nome”: “Alice”, “idade”: 25, “cidade”: “São Paulo”}, {“nome”: “Alice”, “idade”: 25, “cidade”: “São Paulo”}”.
Vejamos algumas explicações sobre o código da Figura 1:
Linha 1: importação da biblioteca “json”, que nos permite trabalhar com JSON em Python.
Linhas 3 a 7: criação de um dicionário chamado “dados” com três pares chave-valor. Cada chave (por exemplo, “nome”) está associada a um valor (por exemplo, “Alice”). Esses dados simulam informações sobre uma pessoa.
Linha 9: uso da função json.dumps() para converter o dicionário “dados” em uma string JSON. Isso transforma os dados estruturados do Python em uma representação em texto no formato JSON. O resultado é armazenado na variável “dados_json”.
Linha 10: impressão da string JSON na tela. Isso nos permite ver como os dados foram convertidos em JSON.
Linha 11: uso da função json.loads() para converter a string JSON “dados_json” de volta em um dicionário Python. Isso é útil quando você recebe dados JSON de uma fonte externa e deseja processá-los em seu programa Python. O resultado é armazenado na variável “dados_de_volta”.
Linha 12: impressão do dicionário recuperado na tela. Isso nos permite verificar se a conversão da string JSON de volta para um dicionário foi bem-sucedida.
Essa aplicação é útil para armazenar e trocar dados estruturados em uma forma que seja fácil de transmitir e compreender.
DATE, C. J. Introdução a sistemas de bancos de dados. 8. ed. Rio de Janeiro: LTC, 2023.
MDN WEB DOCS. Trabalhando com JSON. 2023. JavaScript. Disponível em: https://developer.mozilla.org/pt-BR/docs/Learn/JavaScript/Objects/JSON#convers%C3%A3o_entre_objetos_e_texto. Acesso em: 9 fev. 2024.
PANIZ, D. NoSQL: como armazenar os dados de uma aplicação moderna. São Paulo: Casa do Código, 2016.