O que pode acontecer com MongoDB em 32bits

Utilizo uma estação de trabalho AMD 64bits no escritório, rodando Ubuntu e uma dezena de máquinas virtuais para realizar testes e simular ambientes diferentes. Mantenho bases MongoDB nessa máquina, algumas com milhões de registros e sempre rodou sem nenhuma surpresa.

Estou em fase final de entrega de um projeto que utiliza uma base enorme em MongoDB, são mais de 10 milhões de registros e diversos índices. Exportei essa base para meu notebook (32 bits, rodando Ubuntu) e consegui importar no MongoDB sem nenhum problema, inclusive continuei meu desenvolvimento utilizando o notebook nos períodos que ficava fora do escritório. Semanas atrás, escrevi o artigo MongoDB para iniciantes, com diversas dicas para quem está começando a trabalhar com bancos não relacionais.

Mesmo sabendo da limitação do MongoDB em sistemas 32bits, a base de 10 milhões de registros estava funcionando bem no meu notebook 32bits, até que hoje veio a grande surpresa: a aplicação parou de funcionar. Fui investigar e constatei o seguinte erro no shell do MongoDB:


Fri Jan 28 18:43:33 uncaught exception: assert failed : listDatabases failed:{

"errmsg" : "exception: can't map file memory - mongo requires 64 bit
build for larger datasets",

"code" : 10084,

"ok" : 0

}
Ou seja, a base de dados estourou o limite e deixou de funcionar em máquinas 32bits e ironicamente, escrevi um artigo sobre isso dias atrás, mas não imaginava cair nesse problema tão cedo.

Por sorte meu notebook é apenas um ambiente de desenvolvimento. Imediatamente fui verificar os servidores da empresa, a grande maioria (pelo menos todos que rodam MongoDB) já são 64bits, o que me deixou despreocupado.

A solução para continuar trabalhando nessa base enorme no notebook foi reduzir um pouco a quantidade de informações, deixar apenas o necessário e assegurando que os arquivos em disco não ultrapassem 2.5Gb de tamanho. Assim é possível continuar rodando em 32bits sem nenhum problemas.

Se você está usando MongoDB e pretende importar um volume grande de dados e muitos índices, já instale em um servidor 64bits para evitar quebrar sua aplicação. Por sorte tive esse problema em um ambiente controlado de testes, mas se fosse em produção, teria uma boa dor de cabeça para migrar rapidamente a aplicação.


Veja também