Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankarchitektur für Millionen neuer Zeilen pro Tag

Wenn Sie von größeren Datenmengen sprechen, sehen Sie sich MySQL-Partitionierung an . Für diese Tabellen würde eine Partitionierung nach Datum/Zeit sicherlich die Leistung verbessern. Es gibt einen anständigen Artikel über Partitionierung hier .

Betrachten Sie die Erstellung von zwei separaten Datenbanken:eine für alle Rohdaten für die Schreibvorgänge mit minimaler Indizierung; eine zweite zum Berichten unter Verwendung der aggregierten Werte; entweder mit einem Batch-Prozess, um die Berichtsdatenbank aus der Rohdatendatenbank zu aktualisieren, oder verwenden Sie die Replikation, um dies für Sie zu erledigen.

BEARBEITEN

Wenn Sie mit Ihren Aggregationsberichten wirklich clever sein wollen, erstellen Sie eine Reihe von Aggregationstabellen ("Heute", "Woche bis heute", "Monat bis heute", "nach Jahr"). Aggregieren von Rohdaten bis „heute“ entweder täglich oder in „Echtzeit“; aggregieren von „tagsüber“ bis „bisherige Woche“ auf nächtlicher Basis; von "aktueller Woche" bis "aktueller Monat" auf wöchentlicher Basis usw. Verbinden Sie (UNION) beim Ausführen von Abfragen die entsprechenden Tabellen für die Datumsbereiche, an denen Sie interessiert sind.

BEARBEITEN Nr. 2

Statt einer Tabelle pro Mandant arbeiten wir mit einem Datenbankschema pro Mandant. Abhängig von der Größe des Clients haben wir möglicherweise mehrere Schemata in einer einzelnen Datenbankinstanz oder eine dedizierte Datenbankinstanz pro Client. Wir verwenden separate Schemata für die Rohdatenerfassung und für die Aggregation/Berichterstellung für jeden Kunden. Wir betreiben mehrere Datenbankserver und beschränken jeden Server auf eine einzelne Datenbankinstanz. Aus Gründen der Widerstandsfähigkeit werden Datenbanken auf mehrere Server repliziert und für eine verbesserte Leistung mit Lastenausgleich versehen.