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

Handhabung sehr großer Datenmengen mit mysql

  • 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 6 ist 8 Jahre alt und kurz vor nicht 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.