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

Architettura del database per milioni di nuove righe al giorno

Se stai parlando di maggiori volumi di dati, guarda Partizionamento MySQL . Per queste tabelle, una partizione per data/ora aiuterebbe sicuramente le prestazioni. C'è un articolo decente sul partizionamento qui .

Guarda la creazione di due database separati:uno per tutti i dati grezzi per le scritture con indicizzazione minima; un secondo per la rendicontazione utilizzando i valori aggregati; con un processo batch per aggiornare il database dei rapporti dal database dei dati grezzi o utilizzare la replica per farlo per te.

MODIFICA

Se vuoi essere davvero intelligente con i tuoi rapporti di aggregazione, crea una serie di tabelle di aggregazione ("oggi", "da settimana ad oggi", "da mese ad oggi", "per anno"). Aggrega da dati grezzi a "oggi" giornalmente o in "tempo reale"; aggregare da "per giorno" a "settimana fino ad oggi" su base notturna; da "da settimana a data" a "da mese a data" su base settimanale, ecc. Durante l'esecuzione di query, unisciti (UNION) alle tabelle appropriate per gli intervalli di date che ti interessano.

MODIFICA #2

Anziché una tabella per client, lavoriamo con uno schema di database per client. A seconda delle dimensioni del client, potremmo avere diversi schemi in un'unica istanza di database o un'istanza di database dedicata per client. Utilizziamo schemi separati per la raccolta dei dati grezzi e per l'aggregazione/reporting per ciascun cliente. Eseguiamo più server di database, limitando ogni server a una singola istanza di database. Per la resilienza, i database vengono replicati su più server e il carico viene bilanciato per migliorare le prestazioni.