Menu Docs

Página inicial do DocsMongoDB Ops Manager

Reduzir o tamanho de documentos grandes

Nesta página

  • Visão geral
  • Exemplo
  • Saiba mais

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, chamados deconjunto de trabalho , no 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.

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.

Para ler sobre estratégias para manter documentos em seu conjunto de trabalho em um tamanho gerenciável, consulte os seguintes padrões:

Para saber como incorporar o modelo de dados flexível em seu esquema, consulte as seguintes apresentações em MongoDB.live 2020:

← Remover índices desnecessários