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

Sehr große MySQL-Tabelle und Berichterstattung

Beginnen Sie mit einem Blick in partition Wenn Sie es noch nicht getan haben, ändern Sie Ihren Tisch:

http://dev.mysql.com/doc/refman/5.1 /de/partitionierung.html

http://www.slideshare.net/datacharmer/mysql-partitions-tutorial

http ://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html

Wie „konsolidieren“ Sie Ihre Daten? Vielleicht ist die Methode, die Sie verwenden, nicht optimal. Ein guter Ansatz (lassen Sie mich wissen, ob Sie dies tatsächlich tun) besteht darin, eine Tabelle zu erstellen, die aggregierte Daten enthält. Dann richten Sie es so ein:

Legen Sie zunächst beiseite, wie die Daten in Ihre Haupttabelle ausgegeben werden ...

  • Erstellen Sie einen Job (cron oder was auch immer Sie zur Hand haben oder bereits konfiguriert haben), der in einem bestimmten Intervall ausgeführt wird, relativ dazu, wie die Daten in die Haupttabelle geladen werden (nennen wir ihn MAIN). , vorwärts). Wenn Ihre MAIN-Tabelle stündlich geladen wird, synchronisieren Sie sie. Halbstündlich? Egal. Sie können die Geschwindigkeit trotzdem überprüfen, oder wenn Ihre Berichte in der Nähe der Nebenzeiten ausgeführt werden, dann planen Sie einen Termin in der Nähe dieser Zeit ein

  • Indizieren Sie Ihre Tabelle ordnungsgemäß für konsolidierte Daten. Nennen wir es AGG vorankommen.

  • Erstellen Sie eine gespeicherte Prozedur, die Daten von MAIN in AGG lädt, was im Grunde ein AGG LOAD FOR INTERVAL-? ist . Natürlich sind Sie hier der einzige, der weiß, wie oder wann die Daten in MAIN eingefügt werden, also sind Sie auch derjenige, der weiß, was die Aggregationsabsicht ist. Es ist auch möglich, die aggregierende gespeicherte Prozedur weiter auszuführen, wenn die Aggregationsabsicht nicht abgeschlossen ist (sagen wir, es ist für einen ganzen Tag ... also ist es eine kumulative Ausführung, bis dies festgelegt ist)

  • Verwenden Sie STAGING Tische. Für mich sind sie die Besten .

  • Erstellen Sie eine gespeicherte Prozedur, die die Daten erneut überprüft, sodass alle Aktualisierungen oder zusätzlichen Einfügungen von Datensätzen in der AGG-Tabelle widergespiegelt werden können, indem Sie diese Prozedur ausführen. Schließen Sie Parameter für den zu aktualisierenden Bereich ein. Wenn es täglich ist, dann haben Sie eine DAILY AGG LOAD und DAILY AGG RELOAD Verfahren. Fügen Sie ein AGG CHECK INTERVAL hinzu und AGG CHECK DAILY Verfahren, das Ihnen hilft, nachts gut zu schlafen. Oh, und ganz zu schweigen von einem AGG DATA HOLE CHECK oder eine MISSING AGG DATA CHECK und wenden Sie Geschäftsregeln an, die eine Überprüfung auf eine erforderliche Mindestmenge an Daten implementieren, die Sie aus der aggregierten Tabelle oder (vorzugsweise) aus der Haupttabelle oder der Staging-Tabelle erhalten können

  • Ändern Sie natürlich niemals das AGG Tisch. Immer nur neu laden.

  • Wie hilft das? Müssten Sie dann nicht nur Ihre Reports das AGG abfragen lassen Tabelle, die kleiner und schneller ist (da die Aggregation bereits erfolgt ist)? Vielleicht kommt das Leistungsproblem mit dem Intervallladen, aber wenn Sie Ihre Tabelle, ihre Indizes und ihre Wartung richtig strukturieren, sollte es sich lohnen.

  • Wo kommt die Partitionierung ins Spiel? Archivierung. Nach Ablauf einer bestimmten Zeit (besprechen Sie mit Ihrem Team/Chef/Top-Mann, was akzeptabel ist) können Sie die alten Daten von MAIN archivieren . Ich musste die Daten eines Jahres in der Produktionsdatenbank aufbewahren. Das fühlte sich irgendwie mühsam an, aber da es der Wunsch des Kunden war, hatte die Firma keine andere Wahl, als mir den Speicherplatz zu geben, den ich brauchte (reibt sich die Hände), und Junge, habe ich damit herumgespielt, bis ich etwas anständig zum Laufen gebracht habe. Ich muss erwähnen, dass meine Erfahrung mit Microsoft SQL Server 2005 war, und gespeicherte Prozeduren und SSIS machten Spaß.

Dies ist alles, wenn Sie es noch nicht wissen, und für andere, die Optionen in Betracht ziehen möchten. Ich sage nicht, dass Sie nichts davon bereits wussten; Ich stelle nur fest, was ich zuvor tun konnte – wenn man bedenkt, dass ich aus Ihrem Beitrag nicht mehr Informationen hatte, mit denen ich arbeiten konnte, außer dass Sie einen Konsolidierungsprozess haben, den Sie versucht haben..