Mysql
 sql >> Database >  >> RDS >> Mysql

Tabelle di dati aggregati

Questa funzionalità sarebbe meglio servita da una funzione chiamata vista materializzata , che purtroppo manca a MySQL. Potresti prendere in considerazione la migrazione a un sistema di database diverso, come PostgreSQL.

Esistono modi per emulare viste materializzate in MySQL utilizzando procedure, trigger ed eventi archiviati. Si crea una procedura memorizzata che aggiorna i dati aggregati. Se i dati aggregati devono essere aggiornati ad ogni inserimento è possibile definire un trigger per chiamare la procedura. Se i dati devono essere aggiornati ogni poche ore, puoi definire un Evento di pianificazione MySQL o un lavoro cron per farlo.

Esiste un approccio combinato, simile all'opzione 3, che non dipende dalle date dei dati di input; immagina cosa accadrebbe se alcuni nuovi dati arrivassero un momento troppo tardi e non venissero inseriti nell'aggregazione. (Potresti non avere questo problema, non lo so.) Potresti definire un trigger che inserisca nuovi dati in un "backlog" e fare in modo che la procedura aggiorni la tabella aggregata solo dal backlog.

Tutti questi metodi sono descritti in dettaglio in questo articolo:http://www.fromdual.com/ mysql-viste-materializzate