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 .

Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Construindo com padrões: o padrão Subset

Ken W. Alger, Daniel Coupal3 min read • Published Jan 11, 2022 • Updated Sep 23, 2022
MongoDBEsquema
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Alguns anos atrás, os primeiros PCs tinham 256KB de RAM e 5 duplos .25"drives de disquete. Sem discos rígidos, pois eram incrivelmente caros na época. Essas limitações resultaram na necessidade de trocar físicamente os disquetes devido à falta de memória ao trabalhar com grandes (para a época) quantidades de dados. Se ao menos havia uma maneira de trazer para a memória apenas os dados que eu usava com frequência, como em um subconjunto dos dados gerais.
Aplicativos modernos não estão isentos de recursos exaustivos. O MongoDB mantém os dados acessados com frequência, conhecidos como o conjunto de trabalho, no RAM. Quando o conjunto de trabalho de dados e índices cresce além da RAM física alocada, o desempenho é reduzido à medida que os acessos ao disco começam a ocorrer e os dados saem da RAM.
Como podemos resolver isso? Primeiro, poderíamos adicionar mais RAM ao servidor. Mas isso só escala muito. Podemos tentar fragmentar nossa coleção, mas isso acarreta custos e complexidades adicionais para os quais nosso aplicativo pode não estar pronto. Outra opção é reduzir o tamanho do nosso conjunto de trabalho. É aqui que podemos aproveitar o padrão de subconjunto.

O padrão de subconjunto

Esse padrão aborda os problemas associados a um conjunto de trabalho que excede a RAM, resultando na remoção de informações da memória. Isso geralmente é causado por documentos grandes que contêm muitos dados que não são realmente usados pelo aplicativo. O que significa isso exatamente?
Imagine um site de comércio eletrônico que tenha uma lista de avaliações de um produto. Ao acessar os dados desse produto, é bem possível que precisemos apenas das dez avaliações mais recentes. Extrair a totalidade dos dados do produto com todas as avaliações poderia facilmente fazer com que o conjunto de trabalho se expandisse.
Um documento completo com avaliações
Em vez de armazenar todas as avaliações com o produto, podemos dividir a coleção em duas coleções. Uma collection teria os dados usados com mais frequência, por exemplo as revisões atuais e a outra collection teriam dados usados com menos frequência, por exemplo análises antigas, histórico do produto, etc. Podemos duplicar parte de um relacionamento 1-N ou NN que é usado pelo lado mais usado do relacionamento.
Um documento com um subconjunto e uma collection de avaliações completa
Na coleçãoProdutos, manteremos apenas as dez avaliações mais recentes. Isso permite que o conjunto de trabalho seja reduzido ao trazer apenas uma parte, ou subconjunto, dos dados gerais. As informações adicionais, as avaliações neste exemplo, são armazenadas em uma coleção separada de Revisões que pode ser acessada se o usuário quiser ver avaliações adicionais. Ao considerar onde fazer a divisão dos seus dados, a parte mais usada do documento deve Go para a collection "principal" e os dados usados com menos frequência em outra. Para nossas avaliações, essa divisão pode ser o número de avaliações visíveis na página do produto.

Caso de uso de amostra

O Subset Pattern é muito útil quando temos uma grande parte dos dados em um documento que raramente é necessária. Resenhas de produtos, comentários de artigos, atores em um filme são exemplos de casos de uso desse padrão. Sempre que o tamanho do documento estiver pressionando o tamanho do conjunto de trabalho e fazendo com que o conjunto de trabalho exceda a capacidade de RAM do computador, o padrão de subconjunto é uma opção a ser considerada.

Conclusão

Ao usar documentos menores com dados acessados com mais frequência, reduzimos o tamanho geral do conjunto de trabalho. Isso permite tempos de acesso ao disco mais curtos para as informações usadas com mais frequência que um aplicativo precisa. Uma compensação que devemos fazer ao usar o padrão de subconjunto é que devemos gerenciar o subconjunto e também, se precisarmos extrair revisões mais antigas ou todas as informações, serão necessárias viagens adicionais ao banco de dados para isso.
O próximo post desta série examinará os recursos e benefícios do Padrão de Referência Estendida.

Í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

Introdução ao MongoDB e FastAPI


Jul 12, 2024 | 7 min read
Artigo

Paginações 1.0: Coleções de séries temporais em cinco minutos


May 19, 2022 | 4 min read
exemplo de código

Exemplo de aplicativo para cuidadores de cães


Jul 12, 2024 | 3 min read
Artigo

7 coisas que aprendi ao modelar dados para as estatísticas do YouTube


Oct 01, 2024 | 13 min read
Sumário
  • O padrão de subconjunto