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

MongoDB Implementação interna de indexação?


Eu acho que você está tendo uma idéia de que os índices são armazenados na RAM. E se eu disser que não são.

Antes de tudo precisamos entender o que são índices, índices são basicamente um ponteiro para dizer onde no disco está aquele documento. Assim como temos indexação em livro, para um acesso mais rápido podemos ver qual tópico está em qual número de página.

Então, quando os índices são criados, eles também são armazenados no disco, mas quando um aplicativo está em execução, com base no uso frequente e acesso ainda mais rápido, eles são carregados na RAM, mas há uma diferença entre carregado e criado.

Também carregar um índice não é o mesmo que carregar uma coleção ou registros na RAM. Se tivermos o índice carregado, saberemos o que todos os documentos pegarão do disco, ao contrário de carregar todos os documentos e verificar cada um deles. Portanto, os índices evitam a varredura de coleção.

A criação de índices é um processo único, mas cada gravação no documento pode alterar potencialmente a indexação, portanto, alguma parte pode precisar ser recalculada porque os registros podem ser embaralhados com base na alteração nos dados. é por isso que a indexação torna a gravação lenta e a leitura rápida.

Novamente pense como um livro, se você adicionar um novo tópico de, digamos, 2 páginas entre o livro, todos os índices após esse número de tópico precisam ser recalculados. adequadamente.
  • Não, os registros não são armazenados na RAM, ao criá-lo processa todo o documento da coleção e cria uma folha de índice, isso consumiria tempo compreensivelmente se houver muitos documentos, é por isso que há uma opção para criar índice em segundo plano.
  • O índice é criado uma vez, você pode excluí-lo e criá-lo novamente, mas ele não será recriado no aplicativo ou na reinicialização do banco de dados. isso seria insano para uma coleção enorme em ambiente fragmentado.
  • Novamente, isso não é verdade. _id vem como campo indexado, então o índice já está criado para a coleção vazia, pois quando você faz um write , ele recalcula o índice. Como é um índice exclusivo, o processamento seria mais rápido.
  • todos os registros seriam armazenados apenas na RAM quando você estiver usando o mecanismo de memória do MongoDB, que acho que vem como edição corporativa. Devido à indexação, ele não carregaria automaticamente o registro na RAM.