Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Otimize e ajuste o desempenho do MongoDB com índices ocultos

Ado Kukic5 min read • Published Jan 17, 2022 • Updated Oct 01, 2024
MongoDBÍndices
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
MongoDB 4.4 é a maior versão do MongoDB até o momento e está disponível em beta no momento. Você pode testá-lo no MongoDB Atlas ou baixar a versão de desenvolvimento. Há muitas coisas novas para contar, desde novos recursos, como expressões de agregação personalizadas, melhorias na funcionalidade existente, como chaves de shard refináveis e muito mais.
Nesta postagem, veremos um novo recurso que chegará ao MongoDB 4.4 que ajudarão você a otimizar e ajustar melhor o desempenho de suas consultas à medida que seu aplicativo evolui, chamados de índices ocultos.
Os índices ocultos, como o nome indica, permitem ocultar um índice do planejador de consultas sem removê-lo, permitindo que você avalie o impacto de não usar esse índice específico.

Pré-requisitos

Para este tutorial, você precisará de:

Índices ocultos no MongoDB 4.4

A maioria das tecnologias de banco de dados, e o MongoDB não é diferente, depende de índices para acelerar o desempenho e executar queries com eficiência. Sem um índice, o MongoDB teria que executar uma verificação de coleção, o que significa escanear todos os documentos em uma coleção para filtrar aqueles que a consulta solicitou.
Com um índice, e muitas vezes com um índice correto, esse processo é muito rápido. Mas escolher os dados certos para indexar é uma arte e uma ciência própria. Se você quiser saber um pouco mais sobre as melhores práticas de indexação, consulte esta publicação doblog. Criar, manter e descartar índices pode consumir muito tempo e recursos, especialmente se você estiver trabalhando com um grande conjunto de dados.
Índices ocultos é um novo recurso que está sendo lançado no MongoDB 4.4 que permite medir facilmente o impacto que um índice tem em suas queries sem realmente excluí-lo e ter que reconstruí-lo se você achar que o índice é de fato necessário e melhora o desempenho.
O mais incrível sobre os índices ocultos é que, além de estarem ocultos do planejador de consultas, o que significa que não serão usados na execução da consulta, eles se comportam exatamente como um índice normal. Isso significa que os índices ocultos ainda são atualizados e mantidos mesmo quando estão ocultos (mas isso também significa que um índice oculto continua a consumir espaço em disco e memória; portanto, se você achar que ocultar um índice não tem impacto no desempenho, considere descartá-lo), os índices exclusivos ocultos ainda aplicam a restrição exclusiva aos documentos e os índices TTL ocultos ainda continuam a expirar os documentos.
Existem algumas limitações nos índices ocultos. A primeira é que você não pode ocultar o índice _idpadrão. A segunda é que você não pode executar umcursor.hint() em um índice oculto para forçar o MongoDB a usar o índice oculto.

Criando índices ocultos no MongoDB

Para criar um índice oculto no MongoDB 4.4 , você simplesmente passa um parâmetro hiddene define o valor comotrue dentro do argumento de opções db.collection.createIndex() . Para um exemplo mais concreto, vamos presumir que temos uma collectionmovies que armazena documentos em filmes individuais. Os documentos nesta collection podem ter a seguinte aparência:
1{
2 "_id": ObjectId("573a13b2f29313caabd3ac0d"),
3 "title": "Toy Story 3",
4 "plot": "The toys are mistakenly delivered to a day-care center instead of the attic right before Andy leaves for college, and it's up to Woody to convince the other toys that they weren't abandoned and to return home.",
5 "genres": ["Animation", "Adventure", "Comedy"],
6 "runtime": 103,
7 "metacritic": 92,
8 "rated": "G",
9 "cast": ["Tom Hanks", "Tim Allen", "Joan Cusack", "Ned Beatty"],
10 "directors": ["Lee Unkrich"],
11 "poster": "https://m.media-amazon.com/images/M/MV5BMTgxOTY4Mjc0MF5BMl5BanBnXkFtZTcwNTA4MDQyMw@@._V1_SY1000_SX677_AL_.jpg",
12 "year": 2010,
13 "type": "movie"
14}
Agora, vamos supor que queremos criar um índice totalmente novo sobre o título do filme e queremos que ele fique oculto por padrão. Para fazer isso, executaríamos o seguinte comando:
1db.movies.createIndex( { title: 1 }, { hidden: true })
Este comando criará um novo índice que ficará oculto por padrão. Isso significa que, se executarmos uma query como db.movies.find({ "title" : "Toy Story 3" }), o planejador de query executará uma verificação de collection. Usando MongoDB Compass, confirmarei que é o que acontece.
MongoDB Compass Collscan
A partir da captura de tela, podemos ver que collscan foi usado e que o tempo real de execução da query levou 8ms. Se navegarmos até a aba Índices no MongoDB Compass, também podemos confirmar que temos um 315title_1criado, que está consumindo .4kb e já foi usado 0 vezes.
Índices do MongoDB Compass
Este é o comportamento esperado, pois criamos nosso índice oculto desde o início. A seguir, aprenderemos como exibir o índice que criamos e ver se conseguimos melhorar o desempenho.

Exibindo índices no MongoDB 4.4

Para medir o impacto que um índice tem no desempenho da nossa consulta, vamos mostrá-lo. Temos algumas opções diferentes sobre como fazer isso. É claro que podemos usar db.runCommand() em conjunto com collMod, mas também temos vários ajudantes do mongo shell que acho muito mais fáceis e menos detalhados de trabalhar. Nesta seção, usaremos o último.
Para exibir um índice, podemos usar o métododb.collection.unhideIndex() passando o nome do índice ou as chaves do índice. Vamos exibir nosso índice de títulos usando as chaves de índice. Para fazer isso, executaremos o seguinte comando:
1db.movies.unhideIndex({title: 1})
Nossa resposta ficará assim:
MongoDB Unhide Index
Se executarmos nossa consulta para encontrar Toy História 3 no MongoDB Compass agora e visualizar o Plano de Explicação, veremos que em vez de um collscan ou exame de coleção, nossa consulta agora usará o ixscan ou verificação de índice , o que significa que usará o índice. Obtemos os mesmos resultados, mas agora nosso tempo real de execução da query é 0ms.
MongoDB Compass Ixscan
Além disso, se olharmos nossa aba Índices, veremos que nosso índicetitle_1 foi usado uma vez.

Trabalhando com índices existentes no MongoDB 4.4

Quando você cria um índice no MongoDB 4.4, por padrão, ele será criado com a propriedadehidden definida como falsa, que pode ser substituída para criar um índice oculto desde o início, como fizemos neste tutorial. Mas e os índices existentes? Você pode ocultá-los e exibi-los? Pode acreditar!
Assim como o método auxiliardb.collection.unhideIndex(), existe um método auxiliardb.collection.hideIndex()e permite ocultar um índice existente por meio de seu nome ou chaves de índice. Ou você pode usar o db.runCommand() em conjunto com collMod. Vamos ocultar nosso índice de títulos, desta vez usando o db.runCommand().
1db.runCommand({
2 collMod : "movies"
3 index: {
4 keyPattern: {title:1},
5 hidden: true
6 }
7})
A execução desse comando ocultará mais uma vez nosso índicetitle_1 do planejador de queries; portanto, quando executarmos queries e procurarmos filmes por título, o MongoDB executará a collscanmuito mais lenta ou verificação de coleção.
MongoDB Hide Index

Conclusão

Índices ocultos no MongoDB 4.4 torná-lo mais rápido e eficiente para você ajustar o desempenho à medida que seu aplicativo desenvolve. Acertar os índices é metade arte, metade ciência e, com índices ocultos, você pode tomar decisões melhores e mais informadas com muito mais rapidez.
Independentemente de você usar ou não o recurso de índices ocultos, certifique-se de criar e usar índices em suas collections, pois eles terão um impacto significativo no desempenho de sua query.
Declaração de Porto Seguro
O desenvolvimento, lançamento e cronograma de quaisquer recursos ou funcionalidades descritos para produtos MongoDB permanecem a critério exclusivo da MongoDB. Esta informação destina-se apenas a delinear a direção geral do nosso produto e não deve ser invocada na tomada de uma decisão de compra nem é um compromisso, promessa ou obrigação legal de entregar qualquer material, código ou funcionalidade. Exceto conforme exigido por lei, não assumimos nenhuma obrigação de atualizar quaisquer declarações prospectivas para refletir eventos ou circunstâncias após a data de tais declarações.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Início rápido

Início rápido: tipos de dados BSON - Decimal128


Sep 23, 2022 | 2 min read
Artigo

O custo de não conhecer o MongoDB


Nov 11, 2024 | 23 min read
Tutorial

Como construir um aplicativo web Go com Gi, MongoDB e AI


Aug 30, 2024 | 11 min read
Início rápido

MongoDB e Node.js 3.3.2 Tutorial - Operações CRUD


Oct 01, 2024 | 17 min read
Sumário