Mostrando postagens com marcador mongodb. Mostrar todas as postagens
Mostrando postagens com marcador mongodb. Mostrar todas as postagens

quinta-feira, 22 de novembro de 2012

MongoDB - Instalação

A instalação do MongoDB é um dos passos mais complexos em todo o processo de aprendizagem do banco. Requer bastante experiência na área de TI para conseguir fazer.

Para facilitar a sua leitura, deixei em negrito arquivos, diretórios e comandos.

Como explicado na Introdução, o MongoDB possui versões de 32 e 64bits para Windows, Linux, OSX e Solaris. A versão utilizada nesse artigo é a 2.2.1, para OSX.

O primeiro passo para realizar a instalação é acessar a página de downloads do produto e selecionar a versão que mais se adequa ao seu sistema operacional.

Após o download ser concluído, deve-se extrair o conteúdo do arquivo em seu diretório predileto, no meu caso, criei um diretório em /opt/mongodb

Ao descompactar, você encontrará a seguinte estrutura:


Onde GNU-AGPL-3.0 são os termos de licença pública, README são informações sobre como instalar o produto, pra que serve cada executável que está na pasta bin, etc. e THIRD-PARTY-NOTICES são os termos de licença de uso de softwares de terceiros dentro do MongoDB.

No nosso caso, o mais importante está no diretório bin. Entre na pasta bin e encontrará todos os executáveis do MongoDB, por exemplo: mongo e mongod [terminal e daemon, respectivamente], mongoexport, mongoimport, mongorestore, entre outros. Nesse momento, você está quase com a instalação completa, vamos iniciar o bicho?

./mongod

Ops, acho que não funcionou. Você recebeu o erro: ERROR: dbpath (/data/db/) does not exist ? Isso ocorre pois, por padrão, o MongoDB tenta iniciar suas dbs, collections, index, journals em /data/db e para resolver isso temos duas opções: criar o diretório /data/db [é uma abordagem que eu não gosto muito, pois é necessário criar um diretório na raíz do seu disco] ou simplesmente usar o parâmetro: --dbpath. Para isso, criei no diretório de instalação uma pasta chamada data:

mkdir /opt/mongodb/data

Acho que agora podemos iniciar sem problemas:

./mongod --dbpath=/opt/mongodb/data/

Pronto, você deve ter recebido "[initandlisten] waiting for connections on port 27017", isso significa que o seu MongoDB está pronto para receber conexões na porta 27017. Não acredita? Vamos testar.

Abrindo um novo terminal, vamos novamente entrar no diretório de executáveis do seu banco, no meu caso em /opt/mongodb/bin e entrar no terminal do MongoDB:

./mongo

Agora você acessou o terminal do MongoDB, que infelizmente está vazio mas mesmo assim, você pode digitar seu primeiro comando: help()

Viu como foi complexo? Nos próximos passos, vamos dar uma leve pincelada sobre JSON e BSON, vamos também criar nosso primeiro documento.

quarta-feira, 21 de novembro de 2012

MongoDB - Introdução

Vou começar a publicar uma série sobre o MongoDB, o banco NoSQL que é a novidade do momento e que vem agradando pela sua facilidade, velocidade e suporte da comunidade.





O MongoDB é um banco de dados open source, criado a cerca de 5 anos, escrito em C++, desenvolvido pela 10gen e que vem com um grande poder de escalabilidade e alta-performance (ou como o proprio fabricante o denomina: Agil e Escalável).

Um banco de dados que possui algumas características interessantes. Possui uma aproximação com um memcached, não possui tantas funções quanto um Oracle/SQL Server/MySQL/RDBMs mas definitivamente é muito mais simples que ambos.


Ele possui grandes virtudes como armazenamento baseado em documentos (Documents-Oriented Storage), suporte a index, sharding, schemaless, Map/Reduce, etc. features que serão abordadas com mais profundidade em posts posteriores.


Possuindo versões de 32 e 64bits, pode ser instalado em Windows, OSX, Linux e Solaris. O MongoDB utiliza a storage engine baseado em memory-mapped files, por isso, para bases de dados maiores que 2GB, é necessário utilizar a versão de 64bits.

O shell do banco de dados é baseado em JavaScript, mas não se assuste, é muito simples de utiliza-lo e você [quase] nunca terá de usar a linguagem.


O MongoDB trabalha com o padrão JSON, isso deixa os documentos mais legíveis e permite a flexibilidade nos documentos, não sendo necessário a criação de "campos" para armazenamento. Seus dados são armazenados em formato BSON, que trás algumas vantagens como maior quantidade de datatypes e acesso ao dado com mais velocidade, mas também algumas desvantagens como limitação no tamanho de um documento em 16MB.

Uma coisa que muitos DBA's se assustam quando escutam pela primeira vez sobre MongoDB é a falta de JOINs nativos [é possível fazer JOINs com algumas magias negras] e principalmente a não existência de transações. O que parece ruim, em alguns casos é bom.

Com a ausência de JOINs foi possível criar um banco de dados que não possui campos fixos, ou seja, é possível criar documentos com características diferentes, por exemplo, estamos criando um catálogo de produtos para a grande rede de lojas "Casas Amazonenses", uma rede muito grande com uma grande variedade de produtos eletrônicos, produtos para casa, informática, etc. Teríamos assim, em um modelo relacional parecido com:


Nesse modelo um produto tem um tipo, que pode ou não ser reutilizado. Para buscar um produto com seu tipo basta fazer um Join, tudo muito bonito e simples, porém, esse modelo mostra como estamos preso ao schema. Para adicionar uma informação, seria necessário mudar a estrutura dos dados, ou seja, para adicionar uma coluna "descricao" ao produto, os metadados seriam modificados, o bloco contendo a tupla seria realocado e para cada registro, existiria a possibilidade de ter uma descrição. Isso é apenas um exemplo do quão amarrados ao schema o banco relacional nos deixa.


id
nome
descricao
tipo
1
Cama casal
Linda cama de casal
Casa
2
Cama solteiro

Casa [tive que descrever pois não posso deixar FK vazia]
3
TV Tubo, 29”

Eletrônicos
4

TV Led, 40”, HD, 3D, cheia de coisa
Eletrônicos


Esse mesmo modelo, no MongoDB, seria simples [não vou colocar em JSON, para não pular explicações e nem acabar com a surpresa] como:

"id" : 1, "nome" : "Cama casal", "descricao" : "Linda cama de casal", "tipo" : "Casa";
"id" : 2, "nome" : "Cama solteiro";
"id" : 3, "nome" : "TV Tubo, 29”", "tipo" : "Eletrônicos";
"id" : 1, "descricao" : "TV Led, 40”, HD, 3D,  "cheia de coisa", "tipo" : "Casa";

A falta de transações atrapalha em alguns casos. O MongoDB apenas obedece o "D" do ACID, isso se você possuir o journaling ativo, que por sinal, só na versão 64bits, ou seja, se o seu projeto depende em 100% de ACID compliance, o MongoDB não vai te ajudar muito.

Bom, acho que consegui uma breve introdução ao MongoDB, nos próximos posts, vamos começar a mexer mais na prática.