-
Kann MySQL vernünftigerweise Abfragen für Milliarden von Zeilen durchführen? -- MySQL kann Milliarden von Zeilen „verarbeiten“. "Angemessen" hängt von den Anfragen ab; mal sehen.
-
Ist InnoDB (MySQL 5.5.8) die richtige Wahl für mehrere Milliarden Zeilen? -- 5.7 hat einige Verbesserungen, aber 5.5 ist ziemlich gut, obwohl es
fast 6ist 8 Jahre alt undkurz vornicht mehr unterstützt. -
Bester Datenspeicher für Milliarden von Zeilen – Wenn Sie „Engine“ meinen, dann InnoDB.
-
Wie groß kann eine MySQL-Datenbank werden, bevor die Leistung nachlässt – das hängt wiederum von den Abfragen ab. Ich kann Ihnen eine 1K-Reihentabelle zeigen, die zusammenbrechen wird; Ich habe mit Milliarden-Zeilen-Tabellen gearbeitet, die mitsummen.
-
Warum könnte MySQL bei großen Tabellen langsam sein? - Bereichsscans führen zu I/O, was der langsame Teil ist.
-
Kann MySQL mit Tabellen umgehen, die etwa 300 Millionen Datensätze enthalten? – wieder, ja. Die Grenze liegt bei etwa einer Billion Zeilen.
-
(für InnoDB-Tabellen, was mein Fall ist) Erhöhen der innodb_buffer_pool_size (z. B. bis zu 80% des RAM). Außerdem habe ich hier im Percona-Blog einige andere MySQL-Leistungsoptimierungseinstellungen gefunden – ja
-
richtige Indizes für die Tabelle haben (mit EXPLAIN bei Abfragen) - nun, sehen wir sie uns an. Es gibt viele Fehler, die in diesem kritischen gemacht werden können Bereich.
-
Partitionierung der Tabelle -- "Partitionierung ist kein Allheilmittel!" Ich spreche darüber in meinem Blog
-
MySQL Sharding – Derzeit ist dies DIY
-
MySQL-Clustering – Derzeit ist die beste Antwort eine Galera-basierte Option (PXC, MariaDB 10, DIY mit Oracle). "Group Replication" von Oracle ist ein brauchbarer Konkurrent.
-
Die Partitionierung unterstützt
FOREIGN KEY
nicht oder "global"UNIQUE
. -
UUIDs in dem Ausmaß, von dem Sie sprechen, werden das System nicht nur verlangsamen, sondern es tatsächlich töten. Typ-1-UUIDs kann eine Problemumgehung sein.
-
Einfüge- und Indexerstellungsgeschwindigkeit – Es gibt zu viele Variationen, um eine einzige Antwort zu geben. Sehen wir uns Ihre vorläufige
CREATE TABLE
an und wie Sie die Daten einspeisen wollen. -
Viele Joins – „Normalisieren, aber nicht übernormalisieren.“ Normalisieren Sie insbesondere keine Datetimes oder Floats oder andere "kontinuierliche" Werte.
-
Erstellen Sie Übersichtstabellen
-
2,3 Millionen Transaktionen pro Tag – Wenn das 2,3 Millionen Einfügungen sind (30/Sek.), dann gibt es kein großes Leistungsproblem. Wenn es komplexer ist, können RAID, SSD, Batching usw. erforderlich sein.
-
Umgang mit solchen Datenmengen -- Wenn die meisten Aktivitäten mit den "neuesten" Zeilen stattfinden, dann wird der Buffer_pool die Aktivität schön "zwischenspeichern", wodurch I/O vermieden werden. Wenn die Aktivität "zufällig" ist, dann wird MySQL (oder jeder sonst) haben I/O-Probleme.
-
Das Verkleinern der Datentypen hilft in einer Tabelle wie Ihrer. Ich bezweifle, ob Sie 4 Bytes benötigen, um
fuel_type
anzugeben . Es gibt mehrere 1-Byte-Ansätze.