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
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
undDAILY AGG RELOAD
Verfahren. Fügen Sie einAGG CHECK INTERVAL
hinzu undAGG CHECK DAILY
Verfahren, das Ihnen hilft, nachts gut zu schlafen. Oh, und ganz zu schweigen von einemAGG DATA HOLE CHECK
oder eineMISSING 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..