Processos em lote de baixa prioridade no banco de dados mongo ao vivo

1

Queremos executar o MapReduces em nosso banco de dados ao vivo do Mongo, principalmente para que possamos extrair métricas. No entanto, tivemos algumas más interrupções causadas por esses MRs sobrecarregando o servidor Mongo (em particular 100% de disco IO). Achamos que é devido a falta de índices.

É possível executar processos em lote como esses com baixa prioridade, de modo que ele não torne o banco de dados inacessível para nosso aplicativo ativo?

    
por marcog 30.11.2012 / 20:43

2 respostas

1

Não há como "agradar" os trabalhos de RM que você está executando - eles renderão etc. mas no final (especialmente se você tiver índices mal escolhidos) você impactará o primário removendo seu conjunto de trabalho da RAM , causando contenção de disco IO, etc. Assim, eu recomendaria definitivamente otimizar seus índices para evitar isso o máximo possível.

Em termos de aliviar o fardo, você pode executar trabalhos de RM na memória em secundários em vez de no primário. Tudo o que não requer a saída para um banco de dados pode ser executado dessa maneira (não há como escrever em um secundário).

Se isso não for uma opção, então, outra abordagem que vi inclui disponibilizar os dados para um cluster "analítico" especificamente para executar as tarefas de MR, deixando os bancos de dados de produção intactos. Existem várias abordagens a serem seguidas para manter o segundo cluster atualizado, a partir de instantâneos de sistemas de arquivos e outras técnicas de tipos de lote, até o uso de mongooplog ou um aplicativo personalizado e cursores disponíveis para replicar.

A outra abordagem que você poderia adotar seria dividir para aumentar sua capacidade em suas primárias. Se você estiver indo para a estrada, certifique-se que você está executando pelo menos 2.2 (2.2.2 a partir de escrever isso), o suporte para MR sharded foi melhorado consideravelmente com o release 2.2

    
por 03.12.2012 / 10:32
0

Como Adam afirmou, não há como executar trabalhos com menor prioridade no mongodb. Nós tivemos o mesmo problema com trabalhos caros, fazendo com que outras consultas se tornassem extremamente lentas. Resolvemos esse problema copiando os dados que precisavam ser processados por MR-jobs para um banco de dados de processamento dedicado em um host diferente.

Além dos métodos mongooplog e tailable cursor para copiar dados entre os bancos de dados mencionados por Adam, você também pode fazer isso diretamente via javascript para copiar apenas os dados necessários (possivelmente de forma incremental). Veja este post para mais informações: Qualidade de serviço no MongoDB . Você também pode querer usar mongodump e mongorestore mongodump .

    
por 08.01.2013 / 10:59