Introdução ao MongoDB
MongoDB é um banco de dados orientado a documentos que faz parte da família dos bancos de dados NoSQL1. Banco de dados orientados a documentos são ideais para o armazenamento e gestão de Big Data (Megadados) – um grande conjunto de dados estruturados e não estruturados. Documentos são representações agregadas de uma entidade de banco de dados, e são apropriados para o armazenamento de dados semi-estruturados que requerem o uso extensivo de ‘nulls‘ em SGBDRs (Sistemas gestor de banco de dados relacionais).
Um documento agregado pode ser acessado com uma chamada única ao banco de dados, em vez de se ter o join de múltiplas tabelas para responder à uma consulta. O schema2 nestes tipos de banco de dados são dinámicos, ao contrário dos bancos de dados relacionais, que requerem que o schema seja definido antes. Logo, para metodologias de desenvolvimento ágeis, tradicionais modelos relacionais são muitas vezes inapropriados, porque cada vez que se adiciona uma nova funcionalidade, o schema completo deve ser modificado.
Em MongoDB, um registo é um documento armazenado num formato binário (JSON3) e documentos são agrupados em colecções (collections). Colecções são análogos à tabelas de banco de dados relacionais. A tabela abaixo mostra uma comparação entre conceitos e/ou termos em SQL e MongoDB.
Termos/conceitos SQL | Termos conceitos MongoDB |
---|---|
Banco de dados (database) | Banco de dados (database) |
Tabela (table) | Colecção (colection) |
Linha (row) | documento ou documento BSON |
Coluna (column) | Campo (field) |
índice (index) | índice (index) |
Table joins | documentos embutidos e linkados |
Chave Primária (primary key) | Chave Primária (primary key) |
Qualquer coluna pode ser definida como campo único ou uma combinação de de colunas como chave primária | Em MongoDB a chave primária é automaticamente definida como _id |
As principais características do MongoDB são: alta performance por suportar modelos de dados embutidos e índices; alta disponibilidade através de um conjunto de réplicas (grupo de servidores MongoDB que mantém o mesmo conjunto de dados) para providenciar o failover4 automático e redundância dos dados, escalação automática através de fragmentação automática (para distribuir os dados através de um cluster de máquinas) e schema flexível (uma vez que o schema de um documento pode ser diferente do schema de um outro com a mesma collection).
Collections são agrupadas no banco de dados. Existem alguns bancos de dados reservados, tais como:
admin: Este é o banco de dados raiz. Existe certos comandos como readAnyDatabase, readWriteAnyDatabase. dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin, etc, que podem ser executados apenas a partir do banco de dados admin.
local: Na replicação, o banco de dados local armazena dados internos de réplicas para cada membro do conjunto de réplicas. Collections deste banco de dados não são replicadas.
config: Este banco de dados armazena informações sobre shards (fragmentos).
Componentes principais do pacote MongoDB
Mongod: Este é o processo principal do banco de dados que manipula as requisições dos dados, gere formatos dos dados e executa operações de gestão em background.
Mongos: Este é o controller e roteador de consulta (query router) para clusters fragmentados, e faz o serviço de roteamento para configurações do MongoDB shard, processa e consulta na camada da aplicação para determinar a localização dos dados no cluster fragmentado.
Mongo: Este shell interactivo do MongoDB provê uma interface poderosa para administradores de sistemas, assim como uma forma para os desenvolvedores testarem suas consultas e outras operações directamente no banco de dados.
Instalação do MongoDB
MongoDB pode ser instalado na maior parte das plataformas existentes (Linux, OS X, Windows, etc.), e suporta tanto arquitecturas de 32 bit como de 64 bit.
Neste artigo focarei apenas na instalação do MongoDB no Mac OS X e no Linux, uma vez que no windows o processo é bastante simples, ou seja, o famoso seguinte-seguinte.
A forma mais simples de se instalar o MongoDB no OS X é através do gestor de pacotes Homebrew. Para tal, basta rodar os seguintes comandos:
$ brew update
$ brew install mongodb
No Linux (Ubuntu no nosso caso), o processo é relativamente fácil também:
Comece por criar o arquivo /etc/apt/sources.list.d/mongodb-org-3.2.list com o seguinte conteúdo:
deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse
Agora importe a chave pública:
$ sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv EA312927
Actualize a base de dados local de pacotes:
$ sudo apt-get update
Agora sim, podes instalar a última versão disponível do MongoDB:
$ sudo apt-get install mongodb-org
E por último, inicie o serviço:
$ sudo service mongod start
Feito isso, estamos prontos para começar a usar o MongoDB. Para isso basta executarmos o seguinte comando:
$ mongo
E o resultado será como mostra a imagem abaixo:
Mais informações sobre a instalação em outras plataformas, visite: https://docs.mongodb.org/master/installation/
Por padrão, o shell do MongoDB irá conectar-se ao banco de dados “test”.
> db
test
Na imagem acima, podemos ver alguns comandos que podem usados nas operações CRUD (create, read, update, delete).
‘post‘ é um documento armazenado na collection ‘article’ no banco de dados. O comando find pode ser usado para fazer consultas numa collection. MongoDB não irá criar permanentemente um banco de dados até inserir dados a ele, e irá criar uma collection no seu primeiro uso. Logo, não é necessário criar uma collection antes de inserirmos dados (é o conceito de schema flexível que vimos anteriormente). Todo documento armazenado no MongoDB terá uma chave _id (o tipo padrão é ObjectID), que automaticamente será inserido no documento, e o seu valor será único para cada collection em particular.
Para actualizações, estão disponíveis os métodos db.collection.update() e o db.collection.save(). Estes métodos actualizam um único documento por padrão. Com a opção multi, update() pode actualizar todos os documentos numa collection que corresponde a uma determinada consulta:
db.article.update({title:”Introducão ao MongoDB”},{$set:{date:”23 March 2016″} })
Para remover documentos da collection, usamos o método db.collection.remove(), e podemos passar um critério de consulta para determinar quais documentos serão removidos.
MongoDB suporta escalabilidade horizontal e alta taxa de transferência através da fragmentação (sharding) – um método que permite armazenar dados através de múltiplas máquinas. Fragmentação é feita para aumentar a memória RAM disponível e o espaço em disco, reduz a carga do servidor, leitura e escrita de dados com uma taxa de transferência melhor, etc. Na fragmentação, dados são distribuídos entre múltiplos servidores. Cada shard executa menos operações e armazena menos dados na medida que o servidor for crescendo.
Na imagem acima, caso o banco de dados tenha 1 terabyte de dados, e com 4 shards, então cada shard deve armazenar apenas 256GB de dados. Se existir 40 shards, então cada shard deve armazenar 25GB de dados. Shards armazenam dados e provêm alta disponibilidade e consistência de dados.
MongoDB é um banco de dados que suporta escalabilidade horizontal ao adicionarmos mais e mais nós no cluster; As opções de segurança são limitadas ao nível do banco de dados. A opção de conceder permissões à nível das collections não está disponível.
Referências
1 – https://pt.wikipedia.org/wiki/NoSQL
2 – https://pt.wikipedia.org/wiki/Esquema_de_banco_de_dados
3 – https://pt.wikipedia.org/wiki/JSON
4 – https://en.wikipedia.org/wiki/Failover
https://docs.mongodb.org/manual/mongo/