Há décadas, bancos de dados re­la­ci­o­nais têm sido a solução preferida de ge­ren­ci­a­mento de dados. No entanto, a grande variedade de dados que compõem as apli­ca­ções web mais modernas tornou bancos de dados ori­en­ta­dos a do­cu­men­tos, como o MongoDB, sérios con­cor­ren­tes de soluções tra­di­ci­o­nais. Saiba tudo sobre MongoBD e conheça seus recursos e vantagens.

Por que o MongoDB é diferente?

Mongo deriva da palavra inglesa humongous (gi­gan­tesco) e DB nada mais é que databank (banco de dados). Assim sendo, podemos dizer que MongoDB é um gi­gan­tesco sistema de banco de dados orientado a do­cu­men­tos. Di­fe­ren­te­mente de bancos de dados re­la­ci­o­nais, que armazenam dados em tabelas es­tru­tu­ra­das, os bancos de dados do MongoDB são ar­ma­ze­na­dos em conjuntos não es­tru­tu­ra­dos (col­lec­ti­ons).

Outra de suas di­fe­ren­ças é que o MongoDB não usa SQL como linguagem de consulta. Por este motivo, ele é rotulado como um sistema de banco de dados NoSQL. A linguagem de consulta da solução é baseada em Ja­vaS­cript e se chama MongoDB Query Language (MQL). Seus registros, por outro lado, são ar­ma­ze­na­dos emBSON, moldado pelo formato JSON. Graças a essas con­fi­gu­ra­ções, todos os tipos de dados Ja­vaS­cript são su­por­ta­dos pelo MongoDB, o que o torna es­pe­ci­al­mente adequado a pla­ta­for­mas baseadas em Ja­vaS­cript.

Outro in­te­res­sante recurso do MongoDB é es­ca­la­bi­li­dade ho­ri­zon­tal de seus bancos de dados. Nele, dados são dis­tri­buí­dos a vários ser­vi­do­res ao invés de ficarem ar­ma­ze­na­dos em um único local central. O sistema aumenta a dis­po­ni­bi­li­dade dos dados e, con­se­quen­te­mente, o de­sem­pe­nho geral do banco. Escalonar dados desta forma costuma, inclusive, ser mais barato que dedicar, a um único servidor, um hardware de melhor de­sem­pe­nho (es­ca­lo­na­mento vertical).

Como o MongoDB funciona?

O MongoDB, di­fe­ren­te­mente do MySQL, é orientado a do­cu­men­tos, re­a­li­zando, portanto, um ar­ma­ze­na­mento de dados to­tal­mente diferente. Ao invés de armazenar dados em tabelas nas quais cada linha (a ser pre­en­chida por valores) tem o mesmo número de campos, o MongoDB armazena dados de forma não es­tru­tu­rada, em do­cu­men­tos BSON. Cada documento tem números de campos livres e não precisa cor­res­pon­der um ao outro. Assim sendo, do­cu­men­tos subs­ti­tuem as linhas de uma tabela SQL e os campos destes do­cu­men­tos subs­ti­tuem as colunas.

Várias fer­ra­men­tas pos­si­bi­li­tam o trabalho em bancos de dados MongoDB. Além do conhecido MongoDB Shell, existe também o MongoDB Compass, aplicação gráfica para o ge­ren­ci­a­mento de bancos de dados MongoDB. Este artigo se con­cen­trará em explorar pos­si­bi­li­da­des do Shell.

Como a linguagem MQL é baseada em Ja­vaS­cript, algumas funções já exis­ten­tes podem ser trans­fe­ri­das e usadas em consultas e comandos complexos. Im­por­tante destacar, contudo, que todos os comandos de gravação e leitura têm a mesma estrutura no MongoDB — o que poderá ser notado no exemplo abaixo. Além dos comandos listados, existem outros que permitem o ge­ren­ci­a­mento do banco de dados. Acesse a do­cu­men­ta­ção do MongoDB para explorá-los.

db.student.find({ Name: "Carlos" }) 
 db.student.updateOne({ Name: "Carlos" }, { $set: { Semester: 2 } }) 
 db.student.deleteOne({ Name: "Paulo" }) 
 db.student.insertOne({ 
 Name: "Maria", 
 Alter: 18, 
 Semester: 1
})

Observe, no exemplo acima, comandos su­ces­si­vos em um banco de dados MongoDB. Eles são si­na­li­za­dos com a estrutura db, que diz respeito à to­ta­li­dade do banco de dados. Por sua vez, student sinaliza a pasta onde a coleção a ser operada está lo­ca­li­zada. Por fim aparece o método a ser aplicado.

O método find() é usado para pesquisar um documento es­pe­cí­fico, mas se você deixar o campo de parâmetro vazio, todos os do­cu­men­tos dessa pasta serão apre­sen­ta­dos como resultado. No exemplo acima, todos os do­cu­men­tos são con­sul­ta­dos quando o campo “Name” (nome) ganha o valor “Carlos”. O método updateOne() é usado para atualizar valores em um documento. Nosso exemplo adiciona ao updateOne() dois ar­gu­men­tos: o primeiro diz respeito ao critério de seleção e o segundo apresenta o par de valores-chave a ser atu­a­li­zado. Assim, ao campo “Semester” (semestre) é adi­ci­o­nado um “2” em todos os casos em que um “student” (aluno) se chama “Carlos”.

O método deleteOne() recebe apenas um único argumento: o critério de seleção a ser usado para excluir do­cu­men­tos. No nosso exemplo, todos os alunos chamados “Paulo” são removidos do banco de dados. O método insertOne() também recebe um único argumento, mas que determina o documento (em conteúdo JSON) a ser inserido. Em processos de inserção no MongoDB, cada documento de uma coleção deve ganhar um número he­xa­de­ci­mal exclusivo de 12 bytes, que cor­res­ponde ao ID do objeto — caso este parâmetro não seja es­pe­ci­fi­cado pelo pro­gra­ma­dor, o MongoDB gerará um ID au­to­ma­ti­ca­mente.

Vantagens do MongoDB

O modo como o MongoDB estrutura do­cu­men­tos beneficia usuários, es­pe­ci­al­mente no que diz respeito à fle­xi­bi­li­dade e à es­ca­la­bi­li­dade. O ar­ma­ze­na­mento de dados baseado em do­cu­men­tos tem a vantagem de não exigir os mesmos atributos à todas as entradas, o que é ocorre nos bancos de dados re­la­ci­o­nais. Assim, o MongoDB consegue armazenar dados não es­tru­tu­ra­dos e se­mi­es­tru­tu­ra­dos. Ainda, do­cu­men­tos in­di­vi­du­ais podem ser re­es­tru­tu­ra­dos (por exemplo, com adição ou remoção de atributos/campos) sem que haja ne­ces­si­dade de re­es­tru­tu­rar os demais do­cu­men­tos da mesma pasta. Como todos os do­cu­men­tos são ar­ma­ze­na­dos no formato BSON, tem-se ainda a vantagem de que bancos de dados do MongoDB têm um alto grau de com­pa­ti­bi­li­dade com pla­ta­for­mas Ja­vaS­cript comuns.

Além de armazenar dados não es­tru­tu­ra­dos, o MongoDB também oferece um alto grau de es­ca­la­bi­li­dade ho­ri­zon­tal que não viola os prin­cí­pios do modelo ACID (ato­mi­ci­dade, con­sis­tên­cia, iso­la­mento, du­ra­bi­li­dade). Em bancos de dados dis­tri­buí­dos, muitas vezes é difícil manter a con­sis­tên­cia, já que nem todos os dados ficam ar­ma­ze­na­dos no mesmo servidor. Se vários do­cu­men­tos forem alterados ao mesmo tempo, essas al­te­ra­ções podem não ser adotadas de imediato por todos os ser­vi­do­res en­vol­vi­dos. Caso se trate de um grande volume de so­li­ci­ta­ções, alguns dados podem passar a ser até mesmo in­con­sis­ten­tes. Contudo, desde o lan­ça­mento, em 2019, do MongoDB 4.2, vários do­cu­men­tos em ser­vi­do­res diversos podem ser alterados, ao mesmo tempo, sem que con­sis­tên­cia e dis­po­ni­bi­li­dade sejam afetadas.

Dica

Se você precisa de um banco de dados baseado em do­cu­men­tos capaz de crescer na medida em que aumentam as ne­ces­si­da­des do seu projeto, a solução MongoDB é perfeita para você!

Em que áreas o MongoDB pode ser aplicado?

O MongoDB é uma excelente opção para quem quer im­ple­men­tar projetos web que contenham conjuntos de dados grandes e não es­tru­tu­ra­dos. Trabalhos baseados em do­cu­men­tos, que não estejam vin­cu­la­dos a um esquema, são de­sig­na­dos a di­fe­ren­tes tipos de dados, que precisam ser ar­ma­ze­na­dos e pro­ces­sa­dos ra­pi­da­mente.

Este sistema também suporta di­men­si­o­na­mento ho­ri­zon­tal e quase ilimitado, pois seus bancos de dados podem ser dis­tri­buí­dos com fa­ci­li­dade a vários ser­vi­do­res, sem que sua fun­ci­o­na­li­dade fique com­pro­me­tida. Para garantir segurança e dis­po­ni­bi­li­dade de dados a longo prazo, o MongoDB também pode ser usado para criar cópias de conjuntos de dados e dis­po­ni­bi­lizá-las em di­fe­ren­tes ser­vi­do­res. O banco de dados orientado a do­cu­men­tos também se destaca por conseguir combinar volumes de dados de mais de uma fonte.

Assim sendo, re­co­men­da­mos o MongoDB para projetos web que tenham os seguintes re­qui­si­tos:

  • Es­ca­la­bi­li­dade: Se o seu projeto web crescer, pro­va­vel­mente o número de so­li­ci­ta­ções aumentará, o que, por sua vez, aumentará a demanda do banco de dados.
  • Dis­po­ni­bi­li­dade: Se você precisa que sua aplicação esteja per­ma­nen­te­mente dis­po­ní­vel, mesmo em caso de falha do servidor.
  • Fle­xi­bi­li­dade: Se você precisa que seu projeto web seja adaptado di­na­mi­ca­mente, em di­fe­ren­tes momentos.

Se ainda não está certo sobre qual banco de dados é mais indicado ao seu projeto, não se preocupe! É possível combinar di­fe­ren­tes tipos em uma única solução, que pode ser perfeita para você.

Dica

Se você optou pelo MongoDB e quer começar a mexer com este banco de dados, acesse nosso tutorial que ensina como instalar o MongoDB.

Ir para o menu principal