Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Dados computados do modelo

Nesta página

  • Visão geral
  • Padrão computado
  • Exemplo

Muitas vezes, um aplicativo precisa derivar um valor dos dados de origem armazenados em um banco de dados. O cálculo de um novo valor pode exigir recursos significativos da CPU, especialmente no caso de grandes conjuntos de dados ou nos casos em que vários documentos devem ser examinados.

Se um valor calculado for solicitado com frequência, pode ser mais eficiente salvar esse valor no reconhecimento de data center com antecedência. Dessa forma, quando o aplicativo solicita dados, apenas uma operação de leitura é necessária.

Se as suas leituras excederem significativamente as suas gravações, o padrão calculado reduzirá a frequência de ter que realizar cálculos. Em vez de anexar o ônus da computação a cada leitura, o aplicativo armazena o valor calculado e o recalcula conforme necessário. O aplicativo pode recalcular o valor a cada gravação que altera os dados de origem do valor calculado ou como parte de uma tarefa periódica.

Observação

Com atualizações periódicas, não é garantido que o valor calculado seja exato em nenhuma leitura. No entanto, essa abordagem pode valer o aumento de desempenho se a precisão exata não for um requisito.

Um aplicativo exibe o visualizador de filmes e informações de receita.

Considere a seguinte collection screenings :

db.screenings.insertMany( [
{
theater : "Alger Cinema",
location : "Lakeview, OR",
movie_title : "Reservoir Dogs",
num_viewers : 344,
revenue : 3440
},
{
theater : "City Cinema",
location : "New York, NY",
movie_title : "Reservoir Dogs",
num_viewers : 1496,
revenue : 22440
},
{
theater : "Overland Park Cinema",
location : "Boise, ID",
movie_title : "Reservoir Dogs",
num_viewers : 760,
revenue : 7600
}
] )

Os usuários geralmente querem saber quantas pessoas assistiram a um determinado filme e quanto dinheiro esse filme fez. Neste exemplo, para totalizar num_viewers e revenue, você deve realizar uma leitura para os cinemas que exibiram um filme com o título "Reservoir Dogs" e somar os valores desses campos. Para evitar a realização desse cálculo toda vez que as informações forem solicitadas, você pode calcular os valores totais e armazená-los em uma collection movies com o próprio registro de filme:

db.movies.insertOne( [
{
title : "Reservoir Dogs",
total_viewers : 2600,
total_revenue : 33480,
...
}
] )

Em um ambiente de baixa gravação, o cálculo pode ser feito em conjunto com qualquer atualização dos dados screenings .

Em um ambiente com gravações mais regulares, os cálculos podem ser feitos em intervalos definidos - a cada hora, por exemplo. Os dados de origem no screenings não são afetados por gravações na collection movies , portanto, você pode executar cálculos a qualquer momento.

Esse é um padrão de design comum que reduz a carga de trabalho da CPU e aumenta o desempenho do aplicativo. Sempre que você estiver executando os mesmos cálculos repetidamente e tiver uma alta taxa de leitura para gravação, considere o Padrão Computado.

Além dos casos em que a soma é solicitada com frequência, como obter a receita total ou os visualizadores no exemplo do reconhecimento de data center de filmes, o padrão computado é uma boa opção sempre que os cálculos precisam ser executados em relação aos dados. Por exemplo:

  • Uma empresa automóvel que executa queries de agregação massivas de dados de veículos, armazenando resultados para mostrar nas próximas horas até que os dados sejam recalculados.

  • Uma empresa de relatórios de consumidores que compila dados de várias fontes diferentes para criar listas ordenadas de classificação, como os "100 Gadgets mais bem avaliados". As listas podem ser geradas novamente periodicamente enquanto os dados subjacentes são atualizados de forma independente.

Voltar

Operações atômicas