Como operações de Aggregation podem ajudar a otimizar buscas no MongoDB
Um recente estudo que quero compartilhar com você sobre performance no mongoDB
MongoDB não presta?
Numa jornada de dev é importante entender os riscos associados ao uso do MongoDB, um banco de dados NoSQL orientado a documentos. Tais quais seus beneficios também.
O MongoDB armazena dados em documentos BSON(Binary JSON), proporcionando flexibilidade com um esquema dinâmico. Contudo, essa flexibilidade pode resultar em inconsistências se não for gerenciada cuidadosamente.
A aquitetura do o MongoDB geralmente funciona melhor para operações de leitura do que para leitura e escrita intensivas. O mesmo é otimizado para consultas eficientes e leituras rápidas, sendo particularmente eficaz em cenários onde a recuperação de dados é mais frequente do que as operações de escrita.
No entanto, em ambientes de gravação intensiva, especialmente em situações de alta concorrência, o desempenho do MongoDB pode ser afetado. As operações de gravação podem exigir bloqueios e recursos adicionais, resultando em potenciais gargalos.
Operações de consulta complexas podem ser mais desafiadoras no MongoDB, em comparação com bancos de dados relacionais tradicionais.
É importante considerar a natureza das consultas esperadas para garantir que o banco de dados atenda aos requisitos do projeto do qual você esteja trabalhando (projetos pequenos de estudos não se enquadram aqui) .
Outro ponto é o modelo de consistência eventual, que é padrão no MongoDB.
Isso implica que alterações podem não ser refletidas imediatamente em todas as réplicas dos shemas, o que pode ser crítico em cenários que demandam consistência imediata.
Em termos de segurança, configurar corretamente a autenticação, autorização e criptografia é essencial para evitar potenciais brechas. A distribuição desigual de dados em escalabilidade horizontal também pode afetar o desempenho, sendo necessário um gerenciamento cuidadoso para otimizar a distribuição.
Em resumo, embora o MongoDB ofereça muitas vantagens, é crucial estar ciente desses riscos e considerar as necessidades específicas do projeto ao tomar decisões sobre o uso de um banco de dados NoSQL como o MongoDB.
Saiba projetar bons shemas
Está na etapa inicial de projetar seu banco, ou está revisando o que já está existente?
Existem aqui alguns pontos a serem considerados desde o início falando do MongoDB em especifico.
A parada principal de um bom design dos schemas junto com mongodb é a utilização em:
Dados semi-estruturados ou não estruturados:
Ele armazena dados em um formato semelhante a JSON, o BSON mencionado acima, o que o torna ideal para armazenar dados que não se encaixam bem em um esquema tabular rígido.
Escalabilidade horizontal:
Se você precisa de um banco de dados que possa crescer facilmente em termos de volume de dados e tráfego, o MongoDB é uma boa escolha. Ele suporta sharding, o que permite que você distribua seus dados em vários servidores.
Desenvolvimento rápido:
Fácil de instalar e usar, e não requer um esquema fixo. Isso pode acelerar o desenvolvimento, especialmente em projetos Agile ou Lean.
Aplicações em tempo real:
O MongoDB tem um excelente suporte para operações de leitura e gravação em tempo real e pode ser uma boa escolha para aplicações em tempo real.
Geolocalização:
Tem suporte embutido para consultas geoespaciais, tornando-o uma boa escolha para aplicações que precisam lidar com dados de localização.
Integração com tecnologias JavaScript:
Por usar BSON para armazenar dados, ele se integra bem com tecnologias JavaScript como Node.js.
Eu gosto bastante do seguinte desenho falando sobre um bom design de shemas, com umas boas práticas
https://dbversity.com/mongodb-schema-design-best-practices/
Em suma diz que:
Antes de projetar seu esquema, compreenda completamente o modelo de dados e os requisitos da aplicação. Isso inclui entender as relações entre entidades e os tipos de consultas que serão realizadas.
Denormalize seus dados para aproveitar o suporte a documentos e arrays, reduzindo a necessidade de junções e melhorando o desempenho das consultas.
Otimize o esquema para as consultas mais comuns na aplicação, ajustando a estrutura dos documentos ou duplicando dados conforme necessário.
Evite aninhar documentos profundamente para não comprometer o desempenho e complicar as atualizações, buscando um equilíbrio entre denormalização e tamanho do documento.
Use índices estrategicamente para melhorar o desempenho das consultas, identificando os campos mais utilizados e criando índices neles.
Considere o crescimento de dados e a escalabilidade ao projetar o esquema, antecipando o tamanho futuro dos documentos, o número de documentos e as necessidades de shard ou replicação.
Aproveite as características do MongoDB, como sharding, replicação e auto-balanceamento, para aprimorar o desempenho e a disponibilidade da aplicação.
Analise e otimize periodicamente as consultas da aplicação, identificando consultas lentas e aplicando melhorias, como criação de índices ou ajuste do esquema.
Planeje a evolução do esquema para acomodar futuras mudanças sem exigir migrações extensivas de dados.
Documente as decisões de design do esquema, fornecendo justificativas, para facilitar a compreensão e futuras modificações.
É importante ressaltar que essas práticas são diretrizes gerais e podem variar de acordo com casos e requisitos específicos. Analisar minuciosamente as necessidades e características da aplicação é crucial para um design eficaz do esquema no MongoDB.
Quanto às relações N-N e arquivos de mídia no design de esquema do MongoDB:
Incorporação: Se a relação N-N for pequena e pouco alterada, considere incorporar dados relacionados em um único documento para evitar consultas frequentes. Isso também se aplica a arquivos de mídia, onde os detalhes podem ser incorporados diretamente no documento.
Array de Referências: Para relacionamentos N-N mais extensos e dinâmicos, armazene IDs dos documentos relacionados em um campo de array, facilitando a atualização.
Coleção de Junção: Em relacionamentos N-N mais complexos, use uma coleção de junção para representar a relação entre entidades, criando documentos separados para isso.
GridFS para Arquivos de Mídia: Para arquivos de mídia grandes, como imagens ou vídeos, utilize o GridFS do MongoDB, uma especificação para armazenar e recuperar grandes arquivos binários divididos em documentos separados.
Aggregation Operation 🍃
O tema da news é aggregation operation, certo? Em alguns sites eu lia que aggregation seria uma forma de busca de arquivos ao findAll, pelo fato de usar operações inteligentes de busca…
Mas eu não gostei muito dessa introdução…
Aggregation utiliza de métodos para processar documentos distintos agrupados em uma única saída, otimizando a geração de resultados e a eficiência em buscas no banco de dados MongoDB.
Nos exemplos abaixo estarei utilizando mongoDB 3.7.4 e o mongoose como ORM na versão 5.12.3
Com Aggregation eu utilizo de filtros para buscar os registros que eu quero.
Tendo uma inserção de heróis com a base populada
É possível através do aggregate inserir filtros para bucar o que preciso
No caso se eu quiser buscar todos os heróis:
Com comandos básicos conseguimos fazer mágicas e tornando nossas buscas mais inteligentes:
Sem balas de prata por aqui!!!
Levando em consideração bases pequenas ou mal projetas:
Não é uma operação de aggreation que vai salvar suas conultas!
Acho válido dizer também que o que resulta em eficiência e rapidez com aggregattion começa lá no início da modelagem dos seus dados e de como seu BSON se comuncicará com o restante do código.
E se realmente é necessário leitura ou se terá que adicionar leitura e escrita!
Confira minha demo:
Eu fiz um projeto de comparação do aggregate com findAll, já deixa aquele star e confira na prática alguns dos benefícios de operações inteligentes:
https://github.com/ananeridev/aggregations-vs-findall-mongodb
Espero que tenha gostado do conteúdo dessa semana, nos vemos na próxima terça!
Dicas da semana 🔥
EVENTO
[26-01] [hibrído] - NodeBR com o tema: Quebrei em produção! E Agora? Vai rolar em São Pauloooooo bora colar!
☕️ [CAFÉ ARTESANAL COM DESCONTO] - Se você gosta de tomar aquele cafézinho com código, eu te apresento a Veroo cafés, com meu cupom: ANANERI você garante um café por assinatura artesanal por mês
👩💻 [RECEBER DO EXTERIOR COM POUCAS TAXAS] - Galera, a Husky é a mais nova patrocinadora da news e com meu link você consegue criar uma conta gratuita pra receber seus pagamentos fora do Brasil!