Reduzir o tamanho de documentos grandes
Nesta página
- A autenticação OAuth 2.0 para acesso programático ao Cloud Manager está disponível como um recurso de visualização.
- O recurso e a documentação correspondente podem mudar a qualquer momento durante o período de Pré-visualização. Para usar a 2.0 autenticação OAuth, crie uma conta de serviço para usar em suas solicitações para a API pública do Cloud Manager .
Visão geral
Armazenar documentos grandes em seu banco de dados pode levar ao uso excessivo de RAM e largura de banda. O MongoDB mantém os dados acessados com frequência, conhecidos como o conjunto de trabalho, na RAM. Quando o conjunto de trabalho cresce além da alocação de RAM, o desempenho é degradado, pois os dados devem ser recuperados do disco.
Se suas consultas mais frequentes forem para documentos que contêm muito mais informações do que você precisa para essa consulta, considere reestruturar seu esquema com documentos menores usando referências a coleções adicionais. Ao dividir seus dados em mais coleções e usar documentos menores para dados acessados com frequência, você reduz o tamanho geral do conjunto de trabalho e melhora o desempenho.
Observação
Sua configuração de hardware pode afetar o tamanho dos documentos que seu sistema pode suportar. O limite de Tamanho do documento BSON é 16 megabytes.
Exemplo
Considere um website de catálogo de filmes que exiba uma lista dos 50 títulos de filmes lançados mais recentemente e suas imagens de pôster na página inicial. Na página inicial, um usuário pode clicar em um filme para ver mais detalhes.
O site da web armazena informações sobre filmes em uma coleção movies
. Cada documento de filme contém todas as informações disponíveis para esse filme:
// movies collection { "_id": 123, "title": "2001: A Space Odyssey", "poster": <url>, "director": "Stanley Kubrick", "release_year": 1968, "box_office_usd": 146000000, "countries_released": [ "United States", ... ], "cast": [ "Keir Dullea", ... ], "crew": [ "Ray Lovejoy", ... ], ... }
Observação
Sempre que possível, você deve hospedar imagens fora da implantação do MongoDB e referenciá-las com URLs. Se você armazenar imagens em seu banco de dados, terá muito mais chances de atingir o limite de tamanho do documento.
Neste exemplo, a query mais frequente que o website realiza é encontrar title
e poster
dos 50 filmes mais recentes. Em vez de realizar queries de todas as informações do filme, considere dividir a collection movie
em duas collections separadas, movies
e movie_metadata
. As collections estão vinculadas ao _id
dos documentos de movie
:
// movies collection { "_id": 123, "title": "2001: A Space Odyssey", "poster": <url> }
// movie_metadata collection { "_id": <object_id>, "movie_id": 123, // reference to a movies document "director": "Stanley Kubrick", "release_year": 1968, "box_office_usd": 146000000, "countries_released": [ "United States", ... ], "cast": [ "Keir Dullea", ... ], "crew": [ "Ray Lovejoy", ... ], ... }
Dessa forma, quando o website realiza a query dos 50 filmes mais recentes e seus pôsteres, carrega apenas as informações de que necessita. Se um usuário clicar em um filme, o site realizará outra query para localizar o documento movie_metadata
associado a esse filme. Esse novo esquema tem melhor desempenho que o original porque a query mais frequente retorna documentos muito menores.
Considere seu caso de uso, especialmente as operações que você executa com mais frequência, e crie um esquema que use com eficiência seu conjunto de trabalho.
Saiba mais
Para saber mais sobre modelagem de dados no MongoDB e o modelo de esquema flexível, consulte Introdução à modelagem de dados.
Para saber mais sobre como usar referências para modelar seu esquema, consulte Modele relacionamentos um-a-muitos com referências de documentos.
O MongoDB também oferece um curso gratuito da Universidade MongoDB sobre Modelagem de Dados: Modelagem de Dados para MongoDB
Padrões de design
Para ler sobre estratégias para manter documentos em seu conjunto de trabalho em um tamanho gerenciável, consulte os seguintes padrões:
Use o Padrão Extended Reference para duplicar uma porção de leitura frequente de dados de documentos grandes para documentos menores.
Use o padrão de subconjunto para reduzir o tamanho dos documentos com campos de array grandes.
Use o padrão Outlier para lidar com alguns documentos grandes em uma coleção padrão.
Apresentações do MongoDB.live 2020
Para saber como incorporar o modelo de dados flexível em seu esquema, consulte as seguintes apresentações em MongoDB.live 2020:
Saiba mais sobre relacionamentos de entidade no MongoDB e exemplos de suas implementações com modelagem de dados com MongoDB.
Aprenda padrões avançados de design de modelagem de dados que você pode incorporar ao seu esquema com os Padrões Avançados de Design de Esquema.