terça-feira, 15 de julho de 2014

O MongoDB é um banco de dados de alta performance orientado a documentos e é gratuito. Por ser orientado a documentos (JSON) não possui transações nem joins. Resultado? Fazer consultas é algo relativamente simples - são mais fáceis de escrever e mais fáceis de ajustar. Ele também fazer parte da grande família de bancos NoSQL.

Antes de prosseguir com o MongoDB, o que é NoSQL?

Aparentemente, é uma pergunta simples. Mas sua resposta provoca um debate riquíssimo sobre o futuro dos bancos de dados. Para começar a responder, é preciso entender que NoSQL significa Not only SQL. E isto faz toda a diferença.

     A necessidade de lidarmos com grandes volumes de dados é um forte motivador para pensarmos em soluções que vão além do modelo relacional de dados. Neste caso, sistemas NoSQL tendem a apresentar melhor desempenho, escalabilidade e também são mais fáceis de programar. Um banco de dados NoSQL fornece um mecanismo para armazenamento e recuperação de dados que utiliza modelos mais flexíveis do que os bancos de dados relacionais tradicionais. Isto nos faz concluir que o NoSQL, pelo menos não nos próximos anos, não veio para substituir os bancos SQL. Ele se popularizou para uso em aplicações onde enfrentamos dificuldade de escalabilidade com os bancos relacionais. Insistindo neste ponto, concluímos que existem aplicações que se adaptam melhor em soluções relacionais e outras em que o universo não relacional faz toda a diferença. Bases de dados NoSQL são construídas para permitir a inserção de dados sem um esquema predefinido. Isso faz com que seja fácil realizar mudanças significativas em aplicações em tempo real, sem se preocupar com interrupções de serviço - o que significa que o desenvolvimento é mais rápido, a integração de código é mais confiável e é necessário menos tempo do administrador de banco de dados.

Voltando o debate para o MongoDB, o que o torna tão interessante? 

Frequentemente, em um sistema relacional, temos uma tabela. E certamente possuímos colunas nesta tabela como, por exemplo, informações sobre a venda de um produto: código do produto, nome, quantidade vendida, nome do vendedor. Às vezes, é necessário acrescentar alguma outra informação e, para isto, é necessário utilizar um comando do tipo ALTER TABLE, para adicionar uma nova coluna.

     No universo não relacional, com MongoDB, não é necessário fazer isto. Como este é orientado a documentos, cada um deles pode possuir um schema diferente. Isto faz com que o sistema seja facilmente adaptado conforme haja evolução, ou seja, quando é necessário fazer alguma mudança. O armazenamento sem esquema (schemaless) traz facilidades ao se lidar com dados não uniformes (dados que possuem conjuntos diferentes de campos). Em um ambiente relacional, no resultado de uma aplicação com dados não estruturados, geralmente termos muitas tabelas e muitas colunas, muitas delas esparsas (com muitos nulls) e isto torna a manipulação mais complicada. E esta é a grande vantagem de ter um modelo sem esquema.

     O ponto aqui é quando escrevemos um programa para acessar os dados (em Python, por exemplo), podemos perceber que há sempre um esquema implícito. Você terá que assumir que alguns campos estão presentes (ou ao menos prever em seu código algumas linhas para verificar a existência deles). Por isso costuma-se dizer que há um esquema implícito.  O que queremos dizer é que um banco sem esquema transfere o esquema para o aplicativo que o acessa e isto é um problema quando vários desenvolvedores trabalham em uma mesma aplicação. Por esta razão, será preciso pensar muito bem seu modelo de dados NoSQL e principalmente sua aplicação, como poderá ser feita e gerenciada.

Outras características que tornam o MongoDB tão interessante:
  • Auto - Sharding - o conceito de sharding é simples: quanto você trabalha com uma grande quantidade de dados e está no limite de disco e/ou a falta de espaço, a solução para este problema é ter os seus dados divididos entre várias máquinas.
  • Indexes - fáceis de criar e excelentes otimizadores de consultas - falaremos no futuro sobre como criar e gerenciar seus indexes.
  • Sem joins de alta complexidade – outra característica decorrente da não existência de um esquema.


Para entendermos ainda mais para que serve o MongoDB, vamos fazer outra pergunta: Quem está usando? Podemos citar alguns exemplos:

  • The New York Times: utiliza o MongoDB para sua aplicação de submissão de fotos;
  • Foursquare:  usa MongoDB para armazenar os locais, dados dos usuários e os "check-ins", dividindo os dados em cerca de 25 máquinas na Amazon EC2;
  • Expedia: uso em seu sistema de planejamento de viagens;
  • Linkedin: utiliza o MongoDB na LearnIn, sua plataforma interna de aprendizagem.
  • e-Harmony: com 51 milhões de usuários, o uso do MongoDB em seu sistema de pareamento de pretendentes reduziu o tempo de execução do algoritmo em 95%, de 2 semanas para apenas 12 horas.


Diante disto tudo, outro fator que nos leva a entender que tanto o MongoDB como o Python possuem relevância, é o destaque que eles vêm ganhando no mercado de trabalho. De acordo com o Jobs Trends do Indeed.com, temos uma tendência de alta na oferta de vagas para estes campos, sendo que estão correlacionadas também à oferta de empregos na área de Big Data.



Figura 1 – Jobs Trends – MongoDB, Python e Big Data

Um abraço e até o próximo post!

0 comentários:

Postar um comentário