Immagina un database che ha miliardi di righe con, diciamo, pagamenti. Devi calcolare una somma di pagamento media. Quello sarà
SELECT avg(amount) FROM payments;
Ora, se hai bisogno di ricalcolare questa cifra ogni giorno, eseguire questa formula sull'intero set di dati è eccessivo.
Le biciclette hanno tachimetri che calcolano ogni secondo la velocità media e la cadenza media (pedale RPM), anche se non mantengono la velocità per ogni secondo, e puoi guidare ore, giorni e mesi senza azzerare il contatore medio.
Questo è fatto in un modo semplice: il tachimetro mantiene il valore medio e il numero di secondi. Quindi quando aggiungi un nuovo elemento alla somma, lo fa semplicemente:
new_average = (current_speed + old_average * count) / (count + 1)
Se conosci la matematica, è chiaro che qualsiasi somma o prodotto può essere calcolato in modo incrementale. Anche gli aggiornamenti possono essere eseguiti allo stesso modo: sottrarre il vecchio valore dall'aggregato, aggiungere il nuovo valore.
Voglio sapere se qualche database può farlo per il programmatore?
Capisco che la query nel DB possa essere diversa e avere criteri:
SELECT avg(amount) FROM payments WHERE condition_1 AND condition_2;
Tuttavia, è possibile memorizzare medie con più informazioni (quali righe erano nella sequenza e qual era la condizione di filtro).
È fatto ovunque?