Categorias
banco de dados mongodb

mude para o MongoDB 3.0

No início do mês saiu a primeira versão oficial estável do MongoDB 3, que é compatível com a versão 2, com várias melhorias.

Por esse motivo tive que atualizar o meu livro de MongoDB !

cover

Recomendo que leiam o excelente artigo do Christiano Anderson sobre as novidades da versão 3.

Ao atualizar os arquivos binários de seu ambiente, o seu sistema estará rodando a versão 3, mas infelizmente usará a storage engine MMAPv1, que é mais antiga e não tem as melhorias da nova WiredTiger.

Entre melhorias como performance de 7 a 10 vezes superior, tem o interessante e tão desejado mecanismo de compactação melhorando até 80% em relação às versões anteriores.

Abaixo segue um guia rápido dessa migração… já executei várias vezes e não tive problemas até o momento.

Inicialmente, com o MongoDB 3 no ar, exportamos todos os dados com o comando mongodump:

root@cascao ~ > mongodump
2015-03-29T02:48:54.973-0300    writing test.filmes2 to dump/test/filmes2.bson
2015-03-29T02:48:54.981-0300    writing openshift.filmes to dump/openshift/filmes.bson
2015-03-29T02:48:54.981-0300    writing test.filmes to dump/test/filmes.bson
2015-03-29T02:48:54.981-0300    writing enron.messages to dump/enron/messages.bson
2015-03-29T02:48:57.973-0300    [###.....................]      test.filmes2   69718/511010  (13.6%)
2015-03-29T02:48:57.973-0300    [##......................]    enron.messages   13348/120477  (11.1%)
2015-03-29T02:48:57.973-0300    [##############..........]  openshift.filmes  305700/497316  (61.5%)
2015-03-29T02:48:57.973-0300    [######################..]       test.filmes  258411/271032  (95.3%)
...

Em seguida paramos o serviço e movemos os arquivos do banco atual para um diretório de backup.

root@cascao ~ > service mongodb stop
 * Stopping mongodb ...     
root@cascao ~ > mkdir ~/bkp-mongodb/
root@cascao ~ > mv  /var/lib/mongodb/*  ~/bkp-mongodb/

 

Depois alteramos o arquivo de configuração /etc/mongodb.conf , adicionando a linha engine: wiredTiger conforme o exemplo:

storage:
    dbPath: "/var/lib/mongodb"
    engine: wiredTiger

Depois da alteração, iniciamos o serviço do MongoDB:

root@cascao ~ > service mongodb start
 * Starting mongodb

Agora, já com a storage engine WiredTiger rodando, restauramos o backup com o comando mongorestore:

logpath
root@cascao ~ > mongorestore 
2015-03-29T02:52:59.544-0300    using default 'dump' directory
2015-03-29T02:52:59.547-0300    building a list of dbs and collections to restore from dump dir
2015-03-29T02:52:59.548-0300    reading metadata file from dump/enron/messages.metadata.json
2015-03-29T02:52:59.549-0300    restoring enron.messages from file dump/enron/messages.bson
2015-03-29T02:52:59.549-0300    reading metadata file from dump/test/filmes2.metadata.json
2015-03-29T02:52:59.550-0300    restoring test.filmes2 from file dump/test/filmes2.bson
2015-03-29T02:52:59.550-0300    reading metadata file from dump/blog/posts.metadata.json
2015-03-29T02:52:59.550-0300    restoring blog.posts from file dump/blog/posts.bson
...

Vamos ver como melhorou o espaço em disco:

root@cascao ~ > du -h /var/lib/mongodb/
714M    /var/lib/mongodb/
root@cascao ~ > du -h ~/bkp-mongodb/
14G     /root/bkp-mongodb/

 

No meu caso houve uma incrível compactação que reduziu em 20 vezes para 5% do tamanho original!

Finalmente depois de validar a base migrada podemos remover o diretório de backup:

rm -rf /bkp-mongodb/

Portanto migrem suas instâncias de MongoDB para recuperar muito espaço em disco!

Fernando Boaglio, para a comunidade