terça-feira, 22 de outubro de 2013

     Journaling é um recurso do MongoDB onde é mantido um arquivo de log de gravação antecipada para todas as operações. Em cenários em que o MongoDB não é encerrado corretamente é possível recuperar os dados a partir dos arquivos de journal.

     O MongoDB usa o journaling para garantir as operações de gravação e para fornecer resiliência à eventuais crashs. O MongoDB cria um journal para cada processo de escrita, que inclui a localização exata no disco dos bytes que mudaram durante a gravação. Assim, se você tiver uma falha no servidor, o journal pode ser usado para reproduzir qualquer escrita para os arquivos de dados.

     MongoDB usa arquivos de memória mapeados para gravar os dados no disco. Por padrão, os arquivos de dados do MongoDB são liberados para o disco a cada 60 segundos. O MongoDB também usa arquivos de memória mapeados para o journal. Por padrão, o journal é baixado no disco a cada 100 ms.. Para mais detalhes sobre a mecânica do journaling consulte a documentação oficial.

     Para habilitar o journaling, inicie o mongod e escreva o comando --journal. A partir da versão 2.0, para as versões de 64-bits, o journal está habilidado com default. Para habilitá-lo, adicione a linha journal=true no arquivo de configuração mongodb.config que é criado quando configuramos o MongoDB pela primeira vez
     Vamos fazer um teste. Considere os comandos:

1
2
>db.data.insert({"name":"testentry"});
>db.runCommand({"getLastError":1, "j":true});

   Ao habilitar o journalling, você poderá especificar se quer um 'apoio' no journaling do MongoDB. Isto implica que o mongod confirmará a operação de gravação apenas após o journaling. Porém temos aqui uma desvantagem - quando você especifica "j": true com GetlastError (linha 2 do exemplo) o mongod vai esperar cerca de 1/3 do tempo do journal antes de enviar os dados para escrita. Como o padrão é 100ms - o mongod esperará 30 ms para ter uma confirmação nos dados.

     A recomendação deste post é então que você trabalhe com o journaling. Sugere-se que cada instância do MongoDB deva ser executada com journaling habilitado (nas versões onde deva ser habilitado manualmente). Se você não tem journaling habilitado e seu servidor apresentar alguma falhas no processo o MongoDB não garantirá a integridade dos dados. Você precisará executar uma operação de "reparação" no banco de dados, que, dependendo da quantidade de dados, pode levar algumas horas para ser concluído (nos melhores casos). Desabilite o journal apenas se você realmente souber está fazendo.

Também recomendamos a leitura: How MongoDB’s Journaling Works

0 comentários:

Postar um comentário