Menu Docs
Página inicial do Docs
/
MongoDB Ops Manager
/ /

Reduzir o número de collections

Nesta página

  • Visão geral
  • Exemplo
  • Como verificar se há coleções desnecessárias
  • Saiba mais

Collections são agrupamentos de documentos MongoDB, semelhantes a uma tabela RDBMS . Uma collection existe dentro de um único banco de dados.

Mesmo que uma coleção não contenha nenhum documento, ela ainda vem com um custo de recurso na forma de um índice _id padrão imutável. Embora esse índice não ocupe muito espaço por conta própria (especialmente para coleções pequenas), se você tiver milhares de coleções desses índices podem adicionar recursos e sobrecarregar a alocação do banco de dados.

Se sua implantação contiver um número desnecessário ou crescente de collection, considere reestruturar seus dados para reduzir o número de collection e, por fim, reduzir os requisitos de recursos da sua aplicação.

Considere um banco de dados temperatures que armazena coleções de leituras de temperatura obtidas de um sensor. O sensor faz leituras a cada meia hora, das 10h às 22h. As leituras de cada dia são armazenadas em uma collection separada, nomeada pela data de leitura:

// temperatures.march-09-2020
{
"_id": 1,
"timestamp": "2020-03-09T010:00:00Z",
"temperature": 29
}
{
"_id": 2,
"timestamp": "2020-03-09T010:30:00Z",
"temperature": 30
}
...
{
"_id": 25,
"timestamp": "2020-03-09T022:00:00Z",
"temperature": 26
}
// temperatures.march-10-2020
{
"_id": 1,
"timestamp": "2020-03-10T010:00:00Z",
"temperature": 30
}
{
"_id": 2,
"timestamp": "2020-03-10T010:30:00Z",
"temperature": 32
}
...
{
"_id": 25,
"timestamp": "2020-03-10T022:00:00Z",
"temperature": 28
}

A cada dia que passa, o número de collection no reconhecimento de data center aumenta. Como o número de collection é ilimitado, há uma necessidade cada vez maior do reconhecimento de data center de manter essas collection e seus índices correspondentes. Se o reconhecimento de data center chegar a um ponto em que está gerenciando milhares de collection e índices, isso pode resultar em degradação do desempenho.

Além disso, essa abordagem não facilita facilmente as query em vários dias. Para query dados de vários dias para obter tendências de temperatura em períodos de tempo mais longos, você precisaria executar uma operação $lookup, que não é tão eficiente quanto query dados na mesma coleção.

Em vez disso, uma abordagem melhor para estruturar esses dados é armazenar todas as leituras de temperatura em uma única collection e ter as leituras de cada dia em um único documento. Considere este esquema atualizado, onde todas as temperaturas estão em uma única collection: temperatures.readings:

// temperatures.readings
{
"_id": ISODate("2020-03-09"),
"readings": [
{
"timestamp": "2020-03-09T010:00:00Z",
"temperature": 29
},
{
"timestamp": "2020-03-09T010:30:00Z",
"temperature": 30
},
...
{
"timestamp": "2020-03-09T022:00:00Z",
"temperature": 26
}
]
}
{
"_id": ISODate("2020-03-10"),
"readings": [
{
"timestamp": "2020-03-10T010:00:00Z",
"temperature": 30
},
{
"timestamp": "2020-03-10T010:30:00Z",
"temperature": 32
},
...
{
"timestamp": "2020-03-10T022:00:00Z",
"temperature": 28
}
]
}

Este esquema atualizado requer muito menos recursos do que o esquema original. Agora, em vez de exigir um índice para cada dia em que as temperaturas são lidas, o índice _id padrão nessa coleção ajuda a facilitar as queries por data.

Dica

Veja também:

Para verificar o número de coleções em seu banco de dados, você pode executar o seguinte comando de mongosh:

db.getCollectionNames().length

O método db.stats() também retorna o número de coleções em seu banco de dados, juntamente com estatísticas úteis do banco de dados, como o tamanho total dos seus dados e índices.

O MongoDB Ops Manager Data Explorer fornece uma visão geral de alto nível das collections em seus bancos de dados. O Data Explorer mostra o tamanho total de uma collection, incluindo o tamanho dos índices de uma collection. Se a maior parte do tamanho de uma collection for composta por índices, você pode considerar consolidar os dados dessa collection em outra collection e descartar a collection original. Consulte a documentação $merge para obter uma abordagem para mesclar dados de uma coleção em outra.

Além disso, se a chave de criptografia de dados (DEK) revelar que você tem collection vazias, você poderá descartar essas collection diretamente da chave de criptografia de dados (DEK).

O Ops Manager painel de desempenho em tempo real mostra quais collection recebem mais atividades. Você pode usar essa ferramenta para garantir que, antes de descartar uma collection, ela não esteja sendo usada ativamente pela sua aplicação.

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

Voltar

Reduzir o tamanho de documentos grandes