Continuando a série de posts sobre as novidades do MongoDB 4.2, hoje vamos conversar sobre as views materializadas, recurso bem fofo que se utilizado corretamente vai melhorar bastante o desempenho das suas consultas.
Imagine que você precisa processar um grande volume de dados, para exibir um relatório extremamente importante para o seu negócio. Com as views materializadas você pode armazenar os dados já processados, para que o relatório seja exibido de forma mais rápida.
O Aggregation Framework
O MongoDB é um SGBD muito poderoso, com ele além de armazenar dados, podemos fazer análises complexas usando o Aggregation Framework.
No Aggregation Framework os dados são transformados em etapas, passando por um pipeline, onde o resultado de um estágio é o insumo (entrada) do estágio seguinte.
On-Demand Materialized Views ou simplesmente Views Materializadas
Uma das novidades do Aggregation Framework é o novo estágio chamado de $merge, que armazena em uma coleção o resultado do pipeline (sim, ele é o coração da view materializada!).
E uma coisa legal é que podemos escolher se nas execuções futuras queremos acrescentar dados na coleção, se queremos mesclar os novos dados ou simplesmente substituir os dados existentes.
Para entender este recurso, vamos criar uma view materializada e vamos atualizá-la. Precisaremos do MongoDB 4.2 e o MongoDB Compass Versão Beta (versão 1.19).
Eu tenho uma instância do MongoDB rodando da porta 27018. Para iniciar o serviço, usei o seguinte comando:
mongod –port 27018
O primeiro passo será importar o arquivo people.json (que eu creio ter baixado de um dos cursos da MongoDB University) para o nosso banco de dados, usando o aplicativo mongoimport.exe.
O comando que eu usei foi:
mongoimport –port 27018 –collection people –db demos –file “C:\people.json”
Agora vamos para o MongoDB Compass.
Preencha os dados de login:
Veja que a base de dados demo está listada, e clique sobre ela;
Clique na coleção people.
E depois no menu Aggregations
Vamos selecionar todas as pessoas que moram no estado de Colorado, para isso usamos o estágio $match.
No segundo estágio faremos o agrupamento por cidade, e faremos a contagem de registros de cada grupo.
No terceiro estágio faremos o $merge, indicando que a coleção vwColoradoCity deve ser criada, que os registros existentes devem ser substituídos e os novos incluídos. Observe o aviso de que os dados serão persistidos, e clique no botão Merge Documents
Veja que a view foi criada e pode ser acessada.
Salve o pipeline criado.
Agora, vamos incluir na coleção people, um registro com o estado Colorado , e a cidade teste . Clique na opção Documents e no botão Insert Documents
Veja que o novo registro foi incluído…
Mas que ainda não aparece na view…
Agora vamos abrir novamente o pipeline…
Ao abrir o pipeline, veja que o botão Merge Documents estará disponível.
Ao clicar neste botão a nossa view materializada será atualizada.
Vamos pesquisar agora a cidade teste .
Se você preferir, acessa o canal do blog no youtube, e veja passo a passo como criar a view materializada.
Conclusão
Assim como nos bancos de dados relacionais, se bem utilizadas as views materializadas podem ser um recurso de ouro para melhorar o desempenho das consultas de sua aplicação.
Lembre-se que:
• Elas são atualizadas sob demanda, e sendo assim em algumas situações os dados podem estar desatualizados;
• A execução delas pode ser demorada;
• Atualizações constantes podem ser problemáticas para a sua aplicação.
Tomando cuidado, você estará usando um recurso incrível!
Lembre-se que a versão 4.2 do MongoDB ainda está em Release Candidate, ou seja, podemos testar, mas não é apropriada ainda para colocar em produção. Aproveite este período para conhecer as novas funcionalidades e quando chegar o momento, você estará arrasando!