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

entender o sistema de cache MongoDB


Observação :Isso foi escrito em 2013, quando o MongoDB ainda era muito jovem, não tinha os recursos que tem hoje, enquanto essa resposta ainda vale para o mmap, não para as outras tecnologias de armazenamento que o MongoDB agora implementa, como WiredTiger, ou Percona.

Um bom lugar para começar a entender exatamente o que é um índice:http://docs.mongodb.org/manual/core/indexes/

Depois de revisar isso, você entenderá e por que eles são tão bons, no entanto, pulando para algumas das questões mais complexas.

Como podemos ter certeza de que os dados que consultamos virão da memória ou não?

Uma maneira é olhar para os yields campo em qualquer consulta explain() . Isso lhe dirá quantas vezes o leitor cedeu seu bloqueio porque os dados não estavam na RAM.

Outra maneira mais aprofundada é procurar programas como o mongostat e outros programas semelhantes. Esses programas informarão sobre quais falhas de página (quando os dados precisam ser paginados na RAM a partir do disco) estão ocorrendo em seu mongod .

Eu entendo que o MongoDB usa a memória livre para armazenar dados em cache sobre a memória que está livre no momento, mas alguém poderia explicar melhor o comportamento global?

Isso é realmente incorreto. É mais fácil dizer que o MongoDB faz isso, mas na realidade não. Na verdade, é o sistema operacional e seus próprios algoritmos de paginação, geralmente o LRU, que fazem isso para o MongoDB. O MongoDB faz planos de índice de cache por um certo período de tempo, para que não precise ficar constantemente verificando e testando os índices.

Nesse caso, seria melhor usar uma variável em nosso servidor de nós que armazena dados do que confiar no sistema de cache do MongoDB?

Não tenho certeza de como você espera que isso funcione ... quero dizer, os dois fazem coisas bem diferentes e se você pretende ler seus dados do MongoDB em seu aplicativo na inicialização nessa var, eu definitivamente não o recomendaria.

Além disso, os algoritmos do SO para gerenciamento de memória são extremamente maduros e rápidos, então está tudo bem.

Como você aconselha globalmente o uso do MongoDB para tráfego enorme?

Hmm, esta é uma pergunta tão grande. Realmente, eu recomendaria que você pesquisasse um pouco no Google sobre esse assunto, mas, como a documentação afirma, você precisa garantir que seu conjunto de trabalho se encaixe na RAM para um.

Aqui está um bom ponto de partida:O que significa encaixar "conjunto de trabalho" na RAM para MongoDB?