Quando preaggregare
Scelga tra aggregazione in tempo reale, viste materializzate e OLAP a valle in base all’aggiornamento dei dati e ai costi.
Quando preaggregare è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Tre strategie per le query aggregate
- In tempo reale — ricalcolo a ogni esecuzione
- Materializzata — memorizzazione e aggiornamento periodico
- Con trigger/incrementale — aggiornamento incrementale a ogni modifica
Aggregazione in tempo reale
Semplice e sempre aggiornata:
SELECT user_id, COUNT(*) FROM orders WHERE status = 'paid' GROUP BY user_id;Quando l'aggregazione in tempo reale è sufficiente
La query è abbastanza veloce (buoni indici, risultato ridotto, chiamate poco frequenti). Parta dall'aggregazione in tempo reale e ottimizzi solo dopo aver misurato il problema.
Aggregazione materializzata
Per report costosi ma «sufficientemente aggiornati»:
CREATE MATERIALIZED VIEW user_revenue_30d AS
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY user_id;
-- Refresh nightly:
REFRESH MATERIALIZED VIEW CONCURRENTLY user_revenue_30d;Aggregazione con trigger/incrementale
Per dashboard in tempo reale, mantenga una tabella di riepilogo con i trigger:
CREATE TABLE user_summary (
user_id BIGINT PRIMARY KEY,
order_count INT NOT NULL DEFAULT 0,
revenue NUMERIC(12,2) NOT NULL DEFAULT 0
);
CREATE FUNCTION incr_summary() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO user_summary (user_id, order_count, revenue)
VALUES (NEW.user_id, 1, NEW.total)
ON CONFLICT (user_id) DO UPDATE
SET order_count = user_summary.order_count + 1,
revenue = user_summary.revenue + EXCLUDED.revenue;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_summary AFTER INSERT ON orders
FOR EACH ROW EXECUTE FUNCTION incr_summary();Compromessi
| Strategia | Aggiornamento | Costo di scrittura | Costo di lettura |
|---|---|---|---|
| In tempo reale | Istantaneo | Nessuno | Elevato |
| Materializzata | Obsoleta | Batch di aggiornamento | Basso |
| Con trigger | Istantaneo | Per scrittura | Basso |
Scelta in base al rapporto letture/scritture
- Molte scritture, letture occasionali → in tempo reale (o vista materializzata aggiornata in batch)
- Molte letture, scritture moderate → vista materializzata
- Molte letture E scritture, aggiornamento essenziale → riepilogo con trigger
Pre-aggregazione esterna
Per analisi su scala da data warehouse, sposti l'aggregazione su:
- Database OLAP (ClickHouse, Druid)
- Modelli dbt in un data warehouse separato
- Aggregazioni continue di TimescaleDB (estensione di Postgres)
Tabelle di riepilogo e viste materializzate a confronto
Le tabelle di riepilogo personalizzate consentono aggiornamenti incrementali; le viste materializzate impongono un aggiornamento completo. Valuti l'impegno di sviluppo rispetto alla semplicità operativa.
Eviti i trigger sulle tabelle molto sollecitate
I riepiloghi basati su trigger aggiungono latenza di scrittura a ogni operazione. Per le tabelle ad alta frequenza (eventi, metriche), preferisca l'aggiornamento in batch di una vista materializzata.
Attenzione all'invalidazione della cache
«In informatica ci sono solo due problemi difficili.» I riepiloghi con trigger sono una cache. I bug al loro interno si manifestano come numeri errati nelle dashboard. Aggiunga un job giornaliero di riconciliazione che ricalcoli i dati dalla fonte.
Materializzazione di pipeline a più fasi
Colleghi le viste materializzate: la fase 1 aggrega gli eventi, la fase 2 aggrega la fase 1. Esegua gli aggiornamenti nell'ordine corretto.
Riepilogo
Pre-agg regghi quando il costo è dominato dalle letture.
- In tempo reale → più semplice, sempre aggiornato
- Vista materializzata → query costosa, obsolescenza accettabile
- Riepilogo con trigger → sempre aggiornato, ma aumenta il costo delle scritture
- Scelga in base al proprio profilo di lettura e scrittura
Verifica rapida
Dispone di una dashboard in tempo reale che deve mostrare i ricavi degli utenti aggiornati al secondo. Quale strategia è più adatta?
Domande Frequenti
La lezione «Quando preaggregare» è gratuita?
Sì — il testo completo di «Quando preaggregare» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Quando preaggregare»?
Scelga tra aggregazione in tempo reale, viste materializzate e OLAP a valle in base all’aggiornamento dei dati e ai costi. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Quando preaggregare»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Viste semplici: riutilizzo logico
- Viste aggiornabili e trigger INSTEAD OF
- Viste materializzate e strategie di REFRESH
- Quando preaggregare