Usando o MongoDB – parte 1

mongodb-1_abertura.png

Há muitos éons escrevi por aqui algo sobre o MongoDB e como foi um tanto quanto introdutório, acabei prometendo de voltar a este assunto no futuro. Porém, acabei por não fazê-lo.

Bem, pelo menos não até agora…  🙂

O que é MongoDB?

O MongoDB — de humongous, gigante — é um gerenciador de banco de dados do tipo NoSQL de código aberto e que trabalha com documentos em formato similar ao do JSON. Seu desenvolvimento teve início em 2007 pela empresa 10gen com a proposta de ser um serviço, dois anos depois o código fonte dele foi disponibilizado sob as licenças GNU Affero General Public License e também Apache License e no ano de 2013 a 10gen mudou de nome para MongoDB Inc.

O MongoDB está disponível em duas versões, a Community, que é aquela que se obtém baixando e compilando o código fonte, e Enterprise, que é oferecido como parte de uma assinatura e contém recursos como encriptação da base de dados em disco, maior performance, mais opções de segurança, suporte técnico etc.

Em ambas as versões estão disponíveis os recursos de replicação — replica set — como também de segmentação — sharding — de bases de dados.

Cada instância do MongoDB pode gerencia diversos “banco de dados” que consistem de um conjunto de coleções contendo diversos documentos cada — a ideia é análoga às tabelas que contém registros nos bancos relacionais. A principal diferença está no fato de que cada documento em uma coleção pode conter uma estrutura de chaves e valores distinta das demais — o tal do schemaless.

Instalação do MongoDB

Diferente do que fiz nas outras vezes não montarei uma “solução pronta”¹.

Sendo assim…

$ cd ~/Vagrant
$ git clone https://gist.github.com/3ba88bfdaba393528077b1c7ff84fb59.git mongodb
$ cd mongodb
$ vagrant up
$ vagrant ssh
Welcome to Ubuntu 17.10 (GNU/Linux 4.13.0-32-generic x86_64)
...
vagrant@ubuntu-artful:~$

É basicamente uma máquina virtual com a versão 17.10 do Ubuntu Linux e já que a versão corrente do MongoDB (3.6) não está assim tão distante daquela que foi empacotada na distribuição (3.4) é possível utilizá-la sem problemas.

$ sudo apt --yes install mongodb
Reading package lists... Done
Building dependency tree 
Reading state information... Done
...
Need to get 48.7 MB of archives.
After this operation, 211 MB of additional disk space will be used.

Daí aguardar os arquivos serem baixados e a instalação concluída.

...
Setting up mongodb-clients (1:3.4.7-1) ...
Setting up mongodb-server (1:3.4.7-1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/mongodb.se
rvice → /lib/systemd/system/mongodb.service.
Setting up mongodb (1:3.4.7-1) ...
Processing triggers for libc-bin (2.26-0ubuntu2.1) ...
Processing triggers for ureadahead (0.100.0-20) ...
Processing triggers for systemd (234-2ubuntu12.1) ...

(¹) As portas redirecionadas não serão usadas nesta parte.

Primeiros passos

Existem diversas ferramentas para o gerenciamento do MongoDB e entre elas uma fornecida pela própria MongoDB Inc., o MongoDB Atlas, porém a forma mais prática é através do MongoDB Shell.

$ mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
 http://docs.mongodb.org/
Questions? Try the support group
 http://groups.google.com/group/mongodb-user
Server has startup warnings
...
>

Mas não tem autenticação de usuário e senha? Sim, tem autenticação mas no momento o MongoDB está operando no modo chamado localhost exception e nele é possível acessar o servidor somente partir da interface de loopback (127.0.0.1). A função é permitir a criação do primeiro usuário do sistema, depois disto este modo é desabilitado.

Diferentemente dos bancos de dados relacionais que trabalham com algum dialeto de SQL, o MongoDB Shell é uma interface interativa que roda código em JavaScript.

> for (i=0; i<5; i++) { print(i) }
0
1
2
3
4

O que permite a automatização de tarefas, como a inserção de dados:

> use teste
switched to db teste
> for(i=0;i<1000;i++){
      db.numeros.insert({valor: Math.floor((Math.random()*100)+1)})
}
WriteResult({ "nInserted" : 1 })

O primeiro comando, o use, alterna para o banco de dados “teste” (se não existir, ele será criado), o laço for( … ) executará 1000 vezes o método insert( ) para armazenar um documento contendo a chave “valor” e um número inteiro aleatório entre 1 e 100.

Use o método find( ) para visualizar os documentos inseridos:

> db.numeros.find()
{ "_id" : ObjectId("5a7710f0f37b8e08a594b1b8"), "valor" : 86 }
{ "_id" : ObjectId("5a7710f0f37b8e08a594b1b9"), "valor" : 42 }
{ "_id" : ObjectId("5a7710f0f37b8e08a594b1ba"), "valor" : 79 }
{ "_id" : ObjectId("5a7710f0f37b8e08a594b1bb"), "valor" : 7 }
{ "_id" : ObjectId("5a7710f0f37b8e08a594b1bc"), "valor" : 45 }
...
Type "it" for more
>

A paginação é automática e vasta basta digitar o comando it para avançar.

Aqui é bom relembrar duas coisas a respeito do MongoDB:

  1. Ele trabalha com um formato similar de dados similar ao JSON mas que implementa outros tipos de dados² e
  2. Ele não é assim tão schemaless pois cada documento obrigatoriamente precisa ter a chave “_id” com um valor único. Isto pode ser definido manualmente ou então deixado para que ele o faça de forma automática.

Para sair do console simplesmente digite:

> exit
bye

Ou pressione «Control»+«D», o que achar mais cômodo.

(²) Apenas lembrando que no formato JSON apenas existem os tipos texto, numérico e booliano.

Fim desta parte

E por enquanto é só, não se esqueça de sair e desligar a máquina virtual! Na próxima parte será a vez de (re)ver as operações de inserção, recuperação, atualização e remoção — o tal do CRUD — das informações armazenadas no banco de dados. Inclusive comparando a sintaxe destes com sua equivalente em SQL quando for possível.

Até!

Anúncios

Um comentário sobre “Usando o MongoDB – parte 1

  1. Pingback: Usando o MongoDB – parte 2 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s