MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Você deve habilitar o diário do MongoDB?

O MongoDB usa um diário em disco para garantir operações de gravação e fornecer resiliência a falhas. O MongoDB também cria um diário para cada gravação que inclui a localização exata do disco e os bytes que foram alterados na gravação. Assim, se houver uma falha no servidor, o diário poderá ser usado para reproduzir quaisquer gravações que ainda não tenham sido gravadas nos arquivos de dados.

O MongoDB usa arquivos mapeados em memória para gravar seus dados no disco. Por padrão, os arquivos de dados do MongoDB são liberados para o disco a cada 60 segundos. Eles também usam arquivos mapeados de memória para o diário e, por padrão, o diário é liberado para o disco a cada 100 ms. Como os arquivos de dados finais são liberados no disco a cada 60 segundos, o diário não precisa rastrear gravações por mais de um minuto. Para mais detalhes sobre a mecânica do registro no diário, consulte a documentação oficial. Para entender mais detalhadamente como o mapeamento de visualização funciona, você pode conferir o blog da Kristina.

Fazer registro no diário

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

Ao ativar o registro no diário do MongoDB, você também pode especificar uma preocupação de gravação no MongoDB de 'Journaled' para suas operações do MongoDB. Isso implica que o MongoDB confirma a operação de gravação somente depois de confirmar no diário. No entanto, isso tem uma desvantagem – quando você especifica “j”:true com getLastError, o MongoDB aguardará cerca de 1/3 do commit interno do diário antes de confirmar os dados do diário. O intervalo de confirmação do diário padrão é 100ms – então o MongoDB aguardará 30ms e confirmará os dados. Isso significa essencialmente que em um único encadeamento, você pode obter apenas cerca de 33,3 gravações/segundo, e a prática recomendada é agrupar suas gravações. Por exemplo, se você tiver 50 gravações, use a configuração “j”:true apenas na última gravação – isso reconhecerá que todas as 50 gravações anteriores foram feitas.

Resumo

Todas as instâncias de produção do MongoDB devem ser executadas com o journaling ativado. Se você não tiver o journaling ativado e seu servidor ou processo do MongoDB travar, o MongoDB não poderá garantir a integridade dos dados. Você precisará executar uma operação de “reparo” no banco de dados, que, dependendo da quantidade de dados, pode levar algumas horas para ser concluída. Desligue-o apenas se você realmente souber o que está fazendo. No ScaleGrid, todas as nossas instâncias seguem a configuração de práticas recomendadas do MongoDB e têm o journaling ativado por padrão.