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 !
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