Repositório de Dados Relacional ou NoSQL?: Este artigo apresenta os ganhos da utilização de uma abordagem NoSQL quando se tem como principal objetivo disponibilizar um ambiente escalável, performático e flexível diante das inúmeras exigências do mercado.
Em que situação o tema é útil: A composição de uma boa arquitetura de software é realizada por meio de uma seletiva escolha de
plataformas tecnológicas e componentes, os quais são responsáveis por prover meios para execução do software durante sua utilização. Ao conhecer novas soluções e abordagens
para persistência de dados, ampliam-se as condições de proporcionar um ambiente compatível, estável e seguro para atender as necessidades de negócio.
Durante os últimos anos, o formato de armazenamento de informações manteve-se estável e aderente às necessidades expostas pela sociedade. Neste período ocorreram evoluções tecnológicas, porém, conforme apresentado na Figura 1, o ritmo destas evoluções não refletiu as necessidades de um ambiente altamente conectado formado por uma grande e crescente massa de informação.
O acesso à internet e aos seus recursos relacionados, como sistemas de software destinados ao mercado corporativo ou de entretenimento, fizeram com que o volume de informações se multiplicasse de forma exponencial, trazendo consigo os benefícios associados com a inovação tecnológica. Por outro lado surgiram os imprevistos, representados por situações não vivenciadas anteriormente, interpretadas como falhas sistêmicas e responsáveis pela motivação de novas soluções.
A necessidade de se manter a continuidade funcional e segura de um sistema de software é vital para o bom andamento dos negócios, e em casos de problemas é fundamental ter sempre um bom plano de ação. Este deve ser elaborado e aplicado para que o cenário ou resultado desejado, composto por um conjunto de atributos de qualidade, possa ser reestabelecido e volte a operar normalmente.
Os atributos de qualidade de um sistema de software podem ser classificados e apresentados por meio de diversas categorias, que podem estar relacionadas com segurança, performance, facilidade de manutenção, usabilidade, tolerância a falhas, entre outros itens. A boa qualidade de um sistema de software é reconhecida como estímulo para evolução do mesmo ou elaboração de um novo produto.
Para saber mais sobre atributos de qualidade e requisitos não funcionais de um sistema de software, recomenda-se uma breve consulta à norma ISO-9126.
Portanto, o tema deste artigo está relacionado com performance e escalabilidade, tendo como proposta apresentar um novo formato de armazenamento de dados não relacional, utilizando como solução a base de dados Neo4j. Será apresentado ainda um caso prático que estabelece um comparativo entre as duas abordagens, relacional e NoSQL.
Bases de Dados Relacionais
Após realizar o levantamento e o desenvolvimento dos requisitos de um sistema de software, caminhamos para a etapa de análise e design, onde serão concebidos os modelos do sistema, definindo sua estrutura e seu respectivo comportamento.
O comportamento de um software é representado por suas funções, enquanto que sua estrutura é representada pelo conjunto de informações que o mesmo vai receber, persistir e manipular. Para realizar a persistência, no mundo relacional, é necessário planejar e projetar um modelo normalizado e consistente, capaz de armazenar tais informações.
Ao planejar e projetar um modelo normalizado, o Modelo de Entidades e Relacionamentos (MER), primeiramente é necessário elencar as possíveis informações existentes no domínio do problema para posteriormente abstraí-las e classificá-las como entidades. As relações estabelecidas entre as entidades são materializadas por meio de relacionamentos, responsáveis por realizar a ligação consistente das informações.
O processo mencionado no parágrafo anterior tem como característica a criação de um MER para posterior utilização, ou seja, primeiramente deve-se criar a estrutura de tabelas e seus relacionamentos, para depois iniciar o processo de inserção das informações. As soluções NoSQL trabalham de forma diferenciada. Ao invés de realizar o processo de definição da estrutura para em seguida promover a inserção das informações, estas são inseridas no repositório e, aos poucos, de acordo com suas respectivas associações, são responsáveis por compor e modificar o modelo de dados.
O modelo relacional, baseado em entidades e relacionamentos, foi criado em 1976 por Peter Chen,
Quais são as deficiências do Modelo Relacional?
Para melhor compreensão e contextualização das exigências comerciais e tecnológicas envolvidas com o processo de armazenamento de informações, serão elencados e apresentados a seguir os principais fatores presentes em um ambiente relacional, responsáveis por motivar a elaboração de uma nova proposta de trabalho:
- Solicitação de Mudança: Modelos de dados relacionais, independente de sua maturidade e consistência, não estão totalmente aderentes às novas metodologias e processos de desenvolvimento de software, as quais estão inseridas em um contexto de evolução constante e condicionadas a acomodar mudanças durante o ciclo de desenvolvimento de um novo produto ou manutenção evolutiva;
- Custo de Escalabilidade: A escalabilidade em um banco de dados relacional pode ocorrer de duas formas: horizontal e vertical. A forma horizontal ocorre pela utilização de mais equipamentos e particiona a estrutura de dados de acordo com critérios estabelecidos. A forma vertical ocorre pelo aumento da capacidade do equipamento em que o sistema gerenciador de banco de dados está instalado. Bases de dados NoSQL têm como um de seus motivadores o baixo custo para realizar uma escalabilidade horizontal, o que torna possível o uso de equipamentos mais acessíveis. Além disso, proporciona um modelo de particionamento nativo (Sharding);
- O paradigma OO, a Fragmentação e o Alto Custo do Join: Ao longo de toda a história, desde a sua concepção, os modelos relacionais sofreram mudanças relativamente pequenas para acomodar exigências oriundas de requisitos de negócio. Paralelamente, a programação sofreu grandes mudanças, desde a programação estruturada, a programação orientada a objetos e a programação orientada a aspectos.
Esta grande lacuna formada entre os dois mundos, os quais precisam trabalhar em conjunto, torna-se responsável por gerar modelos de dados não aderentes à estrutura flexível do software. Por exemplo: a programação orientada a objetos utiliza conceitos de generalização e especialização, representadas por recursos de herança para definir entidades específicas, as quais compartilham atributos genéricos também presentes em outras entidades, conforme apresentado na Figura 2. Esta mesma abordagem, quando aplicada em um modelo de dados relacional, pode ser feita de duas formas: ou uma tabela de dados é criada, contendo todos os atributos e, para alguns registros, algumas informações não são preenchidas (causando a fragmentação em partes da tabela de dados), ou então, uma tabela adicional é criada para acomodar as informações específicas, relacionadas por uma chave estrangeira. No caso da criação da tabela adicional, evitamos a fragmentação, porém, ao ser criada, as consultas realizadas deverão utilizá-la, gerando um custo adicional para um novo Join. Como se sabe, a junção de duas tabelas (Join) em um banco de dados relacional representa um alto custo de processamento.
O banco de dados relacional utilizado no projeto apresentado neste artigo é o MySQL, versão 5.5. A escolha desta solução foi realizada com base em sua maturidade e grande aceitação no mercado corporativo.
Bases de Dados NoSQL (Not Only SQL)
O surgimento de bases de dados NoSQL está ligado a questões de escalabilidade de armazenamento e processamento de um enorme volume de dados que cresce em ritmo expressivo diariamente.
Dessa forma, todos os canais utilizados para captação de informação disponíveis no mundo digital, são responsáveis por compor e ditar a velocidade na qual a grande massa de dados deve ser absorvida, gerida e compartilhada. A importância de se obter uma Engenharia Simultânea, representada por um alto grau de paralelismo e a distribuição de sistemas em uma escala global, conduz à adoção de soluções robustas com grande potencial de desempenho.
Engenharia Simultânea representa o desenvolvimento integrado de produto e processo, sendo responsável por reduzir e/ou otimizar as etapas dos processos, aumentando a qualidade do produto e reduzindo seu custo final.
Nesse contexto, informações históricas relacionadas com fatores de performance e escalabilidade antes não atingidos em nível satisfatório, conforme mencionado no livro “Spring Data”, foram novamente avaliadas e alternativas foram propostas na busca por melhores resultados. Entretanto, um ponto importante responsável por atingir níveis de escalabilidade desejados está relacionado com o termo Consistência em Momento Indeterminado (Eventual Consistency).
A Consistência em Momento Indeterminado está relacionada com a importância de se disponibilizar um dado independente de sua consistência naquele determinado momento, ou seja, para as bases de dados NoSQL é mais importante disponibilizar a informação do que ter a garantia de sua consistência. Essa propriedade é fundamental para que as soluções NoSQL consigam atingir um alto nível de escalabilidade e performance.
...Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.