segunda-feira, 8 de outubro de 2012

The Little MongoDB Book - Introdução


Introdução

Não é minha culpa se os capítulos são tão curtos, MongoDB é simplesmente fácil de aprender.

Costuma-se dizer que a tecnologia caminha a passos alucinantes. É fato que há uma lista que cresce constantemente com novas tecnologias e técnicas recém lançadas. No entanto, faz tempo que minha opinião é de que as principais tecnologias utilizadas por programadores caminham a passos bastante lentos.  Pode-se perder anos estudando uma pequena parte e ainda assim será relevante.  O surpreendente, porém, é a velocidade com que essas tecnologias já consagradas têm sido substituídas.  Aparentemente da noite para o dia, tecnologias estabelecidas há anos, encontram-se ameaçadas por mudanças no foco do desenvolvedor.

Nada pode ser tão representativo para essas súbitas mudanças, que o processo das tecnologias NoSQL contra os banco de dados relacionais muito bem estabelecidos.  Parece até que num dia a web era dirigida por poucos RDBM, e no dia seguinte, cinco ou mais soluções NoSQL estabeleceram-se como soluções melhores.

Ainda que essas transições tenham acontecido de um dia para outro, na realidade elas podem levar anos para se tornar uma boa prática.  O entusiasmo inicial é impulsionado por um número pequeno de desenvolvedores e empresas.  Soluções são refinadas, lições são aprendidas e vendo que esta tecnologia veio para ficar, lentamente outros começam a experimentá-la.

Depois de tudo o que foi dito, é hora de explicar melhor o conceito do que é o NoSQL. É um termo abrangente que pode significar coisas diferentes para pessoas diferentes. Inicialmente, eu uso este termo para que entendam o papel que ele desempenha no armazenamento de dados. De outra forma, NoSQL (novamente, para mim), é a crença que a camada de persistência não é única responsável em um sistema. Onde os fabricantes de banco de dados relacional vem desde sempre tentando posicionar seus softwares como a solução que serve para tudo, NoSQL parte para a distribuição de responsabilidade através de unidades menores, que possam influenciar no resultado de um determinado trabalho. Então, sua camada NoSQL pode se beneficiar de um banco de dados relacional, digamos o MySQL, mas também pode conter o Redis com consultas persistentes de partes do sistema assim com o Hadoop, para processamento intensivo de dados. Simplificando, NoSQL é manter-se atento e aberto às alternativas, padrões adicionais e existentes, assim como ferramentas que gerenciem seus dados.

Você pode estar se perguntando: onde MongoDB se encaixa nisso tudo?  Como um banco de dados orientado a documentos, Mongo é uma solução NoSQL mais abrangente.  Deve ser visto como uma alternativa ao banco de dados relacional.  Assim, como os bancos de dados relacionais, ele também se beneficia por ser uma das soluções mais especializadas em NoSQL.  MongoDB tem vantagens e desvantagens, as quais abordaremos posteriormente neste livro.

Como você deve ter notado, usamos os termos MongoDB e Mongo alternadamente.

Primeiros Passos

A maior parte deste livro concentra-se no núcleo de funcionalidade do MongoDB. Portanto, vamos depender do shell do MongoDB para a maioria das atividades. Além de ser útil para o aprendizado, o shell pode ser utilizado como uma ferramenta administrativa.  Porém, os aplicativos que vier a desenvolver, sempre utilizarão um driver MongoDB.

Isso nos remete à primeira coisa que você deve aprender sobre o MongoDB: Os drivers.  MongoDB possui drivers oficiais para várias linguagens.  São equivalentes aos drivers de banco de dados relacionais que provavelmente você já esteja familiarizado.  A partir deles a comunidade desenvolveu outras bibliotecas. Por exemplo, a NoRM é uma biblioteca C# que implementa LINQ, e MongoMapper é uma biblioteca Ruby que é um ActiveRecord amigável.  Fica por sua conta, optar por programar diretamente com os drivers do MongoDB ou com alguma biblioteca de nível superior.  Digo isso porque os iniciantes em MongoDB ficam confusos com a existência de drivers oficiais e bibliotecas da comunidade.

Durante essa leitura, eu te desafio a iniciar o MongoDB, executar os exercícios propostos, bem como explorar as questões que possam surgir.  É fácil iniciar o MongoDB, levaremos apenas alguns minutos para configurá-lo.
  1. Abra a página oficial de download e baixe os arquivos binários (recomenda-se uma versão estável) para o sistema operacional a sua escolha.  Para fins de desenvolvimento você pode escolher tanto a versão para 32-bit como para 64-bit.
  2. Extraia o arquivo (em qualquer pasta) e vá até a subpasta bin.  Não execute nada ainda, saiba apenas que mongod é o servidor e mongo é o shell – esses são os dois executáveis que trabalharemos a maior parte do tempo.
  3. Crie um arquivo de texto na subpasta bin chamado mongodb.config
  4. Adicione, a este arquivo, uma única linha: dbpath=.  Onde pasta é o local onde os arquivos de dados serão gravados.  Por exemplo, no Windows, você pode fazer dbpath=c:\mongodb\data e no Linux você pode fazer dbpath=/var/lib/mongodb/dados.
  5. Verifique se o dbpath especificado existe;
  6. Execute mongod com o parametro -config
Para usuários do Windows, se você extraiu o arquivo baixado em c:\mongodb e criou c:\mongodb\data e então, dentro de c:\mongodb\bin\mongodb.config especificou dbpath=c:\mongodb\data, você poderia executar mongod a partir de um prompt de comando: c:\mongodb\bin\mongod -config c:\mongodb\bin\mongodb.config.

Fique a vontade para adicionar a pasta bin à sua variável de ambiente path, facilitando a execução dos programas do MongoDB.  Usuários de MacOSX e Linux podem seguir praticamente as mesmas instruções.  A única diferença são os caminhos.

Espero que agora você tenha o MongoDB instalado e funcionando.  Se você visualizar algum erro, leia-o cuidadosamente. O servidor é muito bom em explicar o que está errado.

Agora você pode iniciar o mongo (sem o d) o qual irá se conectar com o servidor que esta em execução.  Tente digitar db.version() para certificar-se que tudo esta funcionando como deveria.  É esperado visualizar o número da versão do servidor MongoDB que esta instalado.