Nos últimos anos vem se falado muito sobre os bancos de dados NoSQL e de como eles podem ser eficientes com o armazenamento de grandes volumes de dados pela facilidade de escalabilidade e a velocidade na recuperação de dados. Esses bancos têm objetivos distintos e estão em diferentes classificações tais como: pares chave-valor, orientados à coluna, orientados a grafos ou ainda orientados a documentos.
O MongoDB, que pertence à classificação de banco orientado a documento, é o que vem tendo uma maior adoção pela comunidade NoSQL. Seu desenvolvimento foi realizado pela empresa norte americana 10Gen sediada em Nova Iorque - USA, tendo seu código escrito em C++. Provendo o armazenamento dos documentos no formato JSON, assim como na maioria dos bancos de dados NoSQL, o MongoDB tem uma arquitetura schemaless, assim não sendo necessários se preocupar com a definição de schema, como tipo de dados, nome de colunas ou relacionamento entre as tabelas. O MongoDB e os demais bancos NoSQL não oferecem suporte a instruções SQL, entretanto, ele oferece suporte a consultas a documentos usando uma linguagem específica para pesquisa que é quase tão poderoso quanto o SQL. Suas consultas, além de poderosas, são facilmente convertidas às tradicionais SQL, fazendo com que a transição de um banco relacional para o MongoDB seja melhor assimilada.
Banco de dados orientado a documentos
Os bancos de dados orientados a documentos são bem diferentes dos tradicionais, onde o armazenamento é feito em um conjunto definido de colunas. Em vez disso, os dados são armazenados em documentos previamente definidos, tendo como características o armazenamento de estruturas autocontidas e auto descritivas. Outra característica é que as coleções não possuem um relacionamento explícito entre outras coleções, ferindo os princípios da normalização.
Outra diferença fundamental é que bancos de dados orientados a documentos incentivam a redundância de dados, evitando a criação de tabelas relacionais para armazenar dados que serão reutilizados, como uma tabela de tags na modelagem de uma estrutura para armazenar posts. Ao invés de se criar uma tabela de tags que terá seu id relacionado com os posts, essas tags são colocadas diretamente na coleção do post, realizando agregações de dados em uma única estrutura.
Os bancos orientados a documentos, diferente dos tradicionais que são compostos por uma estrutura contendo tabela, linha e coluna, são representados por estruturas definidas como coleção-documento, na qual uma coleção pode ser a representação de uma tabela e é nela que ocorre o armazenamento dos documentos. Em uma mesma coleção pode existir documentos com diferentes representações. Ao contrário das tecnologias relacionais que possuem uma visão horizontal da tabela, pode-se dizer que a visão do banco de dados orientado a documentos é vertical, como pode ser observado na Listagem 1.
Listagem 1. Coleção Pessoa X Tabela Pessoa.
COLECAO PESSOA
{
nome : “Gutierry”
sobrenome : “Pereira”
email: “GutierryDsn@hotmail.com”
}
{
nome : “Amanda”
sobrenome : “vitor”
telefone : (21)9999-1010
}
TABELA PESSOA
+-------------+-----------+-----------------------------+----------------------+
| Gutierry | Pereira | GutierryDsn@hotmail.com | Null |
| Amanda | Vitor | Null | (21)9999-1010 |
+-------------+-----------+-----------------------------+----------------------+
A partir dessa listagem podemos observar uma série de diferenças entre as duas estruturas. Além da forma de visão, observem que no segundo documento da coleção de pessoa, além de não conter o atributo email, apresenta um atributo a mais, sendo ele o telefone. Em uma tabela relacional, é necessário definir a coluna email e telefone, que será apresentada para todos os registros independente se fazem ou não uso desse atributo, fazendo com que os valores fiquem como Null. Sabe-se que colunas com valores Null além de ocuparem espaço em disco, podem prejudicar o desempenho das consultas SQL. Em um banco de dados orientado a documento, os atributos são declarados apenas quando utilizados, obtendo assim uma estrutura mais objetiva e performática.
JSON
JSON (JavaScript Object Notation) é um formato de documento para armazenamento e transmissão de dados. Ele surgiu como uma alternativa ao XML e se tornou muito popular devido a sua semântica ser muito mais legível à compreensão humana. O JSON contém uma estrutura de coleção de pares (atributo: valor), onde os atributos podem ser dos tipos: String, Number, Object, Array ou Boolean. Outro fator que ajudou a popularizar o JSON é o fato dele estar baseado em um subconjunto da linguagem de programação JavaScript e possuir convenções familiares às linguagens C, C++, C#, Java, JavaScript, Perl, Python entre outras. O JSON suporta desde estruturas relativamente simples a estruturas complexas com uma infinidade de coleção de objetos e sub-objetos, permitindo as mais diversas combinações.
Conceito da modelagem para MongoDB
Modelar uma estrutura para o MongoDB é mais simples do que uma modelagem para um banco de dados relacional, porém esse trabalho pode ficar complicado se pensarmos de forma relacional. Um dos maiores problemas enfrentados pelas pessoas ou empresas que adotam o MongoDB é trocar de banco pelas vantagens oferecidas pela tecnologia, porém ainda trabalhar com as convicções e conhecimentos absorvidos ao logo do desenvolvimento com bancos de dados relacionais.
...Confira outros conteúdos:
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.