Wenn MySQL zig Millionen Daten abfragt, können die meisten Abfrageoptimierungsprobleme durch Indizes gelöst werden. Bei der Verarbeitung von Hunderten Millionen Daten sind Indizes jedoch nicht so benutzerfreundlich. Die Datentabelle (Protokoll) sieht folgendermaßen aus:
Da die Daten nicht vollständig verarbeitet werden müssen, haben wir nach Gesprächen mit der Nachfrageseite einen Teil der Daten nach Zeiträumen abgetastet, beispielsweise die Daten eines Monats, also etwa 350 Millionen Zeilen. 1) Wählen Sie Innodb als Tabellen-Engine. Da die Daten nach Monaten partitioniert sind, kopieren wir die Daten der monatlichen Partition separat. Die Quelltabelle ist die MyISAM-Engine. Da wir möglicherweise einige Daten filtern müssen und die am Filter beteiligten Felder keinen Index haben, ist das Hinzufügen von Indizes mit der MyISAM-Engine langsam. CREATE TABLE `tb_name` ( `ich würde_`, ..., SCHLÜSSEL `idx_1` (`create_user_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Anwendungsprotokoll' PARTITION NACH BEREICH(bis_Tage(Logzeit_)) ( PARTITION p1231 WERTE WENIGER ALS (737425), PARTITION p0101 WERTE KLEINER ALS (737426), PARTITION p0102 WERTE KLEINER ALS (737427), PARTITION p0103 WERTE KLEINER ALS (737428), PARTITION p0104 WERTE KLEINER ALS (737429), ...... ); 3) Führen Sie täglich Aggregationen oder andere Vorgänge an der oben generierten Tabelle durch und speichern Sie die Ergebnisse in einer temporären Tabelle. Versuchen Sie, gespeicherte Prozeduren zur Datenverarbeitung zu verwenden. Da die Verarbeitung relativ komplex und zeitaufwändig ist (das Ausführen einer gespeicherten Prozedur dauert etwa 1-2 Stunden), sollten die Betriebszeit und die Parameter während des Ausführungsprozesses aufgezeichnet werden, wenn die gespeicherte Prozedur zyklisch aufgerufen wird. Trennzeichen $$ Prozedur proc_name erstellen(param varchar(50)) beginnen deklarieren Sie das Startdatum; Enddatum deklarieren; Setze Startdatum = „31.12.2018“; Enddatum festlegen = „01.02.2019“; Transaktion starten; tmp_talbe abschneiden; begehen; während Startdatum < Enddatum Setzen Sie @Partitionsname = Datumsformat (Startdatum, „%m%d“); setze @start_time = now(); – Zeichnet die Startzeit der aktuellen Partitionsoperation auf, um die Transaktion zu starten. setze @sqlstr = concat( "in tmp_talbe einfügen", "Feldnamen auswählen", "von tb_name partition(p", @partition_name,") t ", "wo Bedingungen;" ); -- wähle @sqlstr; Anweisung aus @sqlstr vorbereiten; Anweisung ausführen; Freigabe, Vorbereitungs-STMT; begehen; -- Protokollsatz einfügen @finish_time = now(); -- Endzeit der Operation in oprerate_log-Werte einfügen (Param, @partition_name, @start_time, @finish_time, timestampdiff(Sekunde, @start_time, @finish_time)); setze Startdatum = Date_Add(Startdatum, Intervall 1 Tag); Ende während; Ende $$ Trennzeichen ; 4) Sortieren und verarbeiten Sie die oben generierten Ergebnisse. Im Allgemeinen ist die Verarbeitung relativ umständlich und erzeugt viele Zwischentabellen. Für wichtige Schritte müssen auch Metadaten des Betriebsvorgangs aufgezeichnet werden, was hohe Anforderungen an die SQL-Verarbeitung stellt. Daher wird nicht empfohlen, MySQL für diese Aufgabe zu verwenden (es sei denn, dies ist unbedingt erforderlich). Wenn die Verarbeitung auf einer Big-Data-Plattform erfolgen kann, ist die Geschwindigkeit höher und die Metadatenverwaltung relativ professionell. Dies ist das Ende dieses Artikels zur Verwendung von Partitionen zur Handhabung der MySQL-Datenoptimierung auf Milliardenebene. Weitere relevante Inhalte zur MySQL-Datenoptimierung auf Milliardenebene finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
>>: Analyse der Unfallursachen durch Unicode-Signatur BOM
Vorwort Aus beruflichen Gründen musste ich kürzli...
Inhaltsverzeichnis 1. Truncate-Operation 1.1 Welc...
Lassen Sie mich zunächst die Anwendungsmethode er...
<br />Die Benutzererfahrung wird von chinesi...
Inhaltsverzeichnis Funktionseinführung Rendern 1....
Rendern Beispielcode Heute werden wir das WeChat-...
Wirkung der Operation: html <div Klasse="...
Detaillierte Erläuterung der gespeicherten Prozed...
In diesem Artikel wird hauptsächlich der Beispiel...
In diesem Artikel wird erläutert, wie Sie einen I...
Code kopieren Der Code lautet wie folgt: <!DOC...
Inhaltsverzeichnis Aktualisieren Sie das Bild von...
Kürzlich erhielten wir von einem Kunden eine Bitt...
Inhaltsverzeichnis 1. vorErstellen & erstellt...
Inhaltsverzeichnis 1. Einleitung 2. Installation ...