É possível executar várias instâncias mongod em um único conjunto de arquivos de banco de dados

1

Temos grandes conjuntos de dados de vários gigabytes nos quais executamos consultas muito complexas, por exemplo

{ $or: [ { id: 30000001, ... }, { id: 30000005, ... }, ..., { id: 30001005, ... } ] }

Parece que a CPU é na verdade um gargalo neste ponto, então seria vantajoso poder executar várias instâncias de mongod no mesmo conjunto de arquivos de banco de dados.

Pensamos em usar conjuntos de réplicas para esse fim, mas preferimos não exigir o espaço extra em disco simplesmente por motivos de CPU.

    
por 9point6 09.12.2012 / 18:23

1 resposta

0

Não, isso não é possível, você não pode executar várias instâncias usando os mesmos arquivos no momento - a peça-chave da funcionalidade que você precisa (gerenciando qual instância tem a capacidade de gravar em um arquivo) não existe. Eu não acho que isso está na lista de solicitações de recursos (eu não consegui encontrá-lo), e dado o número de possíveis problemas que eu posso pensar em permitir que isso seja feito, pareceria um tiro no escuro em termos de um pedido, mas você é bem-vindo a solicitá-lo .

O exemplo de consulta $or que você lista (e sugere que você tenha mais complicado) executará várias consultas em paralelo e, pelo que parece, você basicamente aninhou o% lógico$or s listando vários _id em cada cláusula. Com várias varreduras para cada uma das cláusulas no $or , mesmo com uma consulta de índice coberto, ainda será um grande número de varreduras do índice quando essa matriz for grande.

Se você não estiver usando índices cobertos (procure indexOnly como true no seu explicado), isso significaria muita digitalização de documentos e a menos que todo o seu conjunto de dados caiba na memória, isso significará muita página com falha.

Como você já declara que essa é a "única maneira" de fazer isso em seu sistema (acho que uma revisão de esquema também seria uma boa ideia), então, atualmente, se você estiver com problemas de CPU em um único host, Em seguida, replicação ou fragmentação são suas duas opções para dimensionar horizontalmente. Eu também me certificaria de que a CPU está no terreno do usuário, não no sistema (a maneira mais fácil de fazer isso é instalar MMS com munin-node e rastrear usuário (geralmente mongod se for um sistema dedicado) versus CPU do sistema ao longo do tempo.

Antes de fazer isso, certifique-se de estar executando o 2.2 - uma das principais melhorias em 2.2 foi o alternar para TCMalloc - não posso ser certos, porque os problemas malloc podem ser difíceis de diagnosticar / definir no melhor dos tempos, mas se você estiver executando o 2.0, o TCMalloc pode ajudá-lo aqui.

    
por 10.12.2012 / 10:18

Tags