Erstellen einer MySQL-Tabelle mit 1.000 Millionen Zeilen [geschlossen]

9

wurde auf Serverfault neu gepootst

Fragen

Frage 1: Wenn die Größe der Datenbanktabelle größer wird, wie kann ich MySQL anpassen, um die Geschwindigkeit des LOAD DATA INFILE-Aufrufs zu erhöhen?

Frage 2: Verwenden Sie einen Cluster von Computern, um verschiedene CSV-Dateien zu laden, die Leistung zu verbessern oder sie zu töten? (Dies ist meine Benchmark-Aufgabe für morgen mit den Ladedaten und Bulk-Inserts)

Ziel

Wir testen verschiedene Kombinationen von Feature-Detektoren und Clustering-Parametern für die Bildsuche. Daher müssen wir in der Lage sein, große Datenbanken zeitnah zu erstellen.

Maschineninfo

Die Maschine hat 256 Gigabyte RAM und es gibt noch zwei weitere Maschinen mit der gleichen Anzahl an Ram, wenn es eine Möglichkeit gibt, die Erstellungszeit durch die Verteilung der Datenbank zu verbessern?

Tabellenschema

Das Tabellenschema sieht wie

aus

%Vor%

Benchmarking bisher

Der erste Schritt bestand darin, Masseneinfügungen mit dem Laden aus einer Binärdatei in eine leere Tabelle zu vergleichen.

%Vor%

Angesichts des Unterschieds in der Leistung, die ich mit dem Laden der Daten aus einer binären CSV-Datei gegangen bin, habe ich zuerst Binärdateien geladen, die 100K-, 1M-, 20M-, 200M-Zeilen enthalten, indem ich den folgenden Aufruf verwende.

%Vor%

Ich habe die 200M Zeilen-Binärdatei (~ 3GB CSV-Datei) nach zwei Stunden gelöscht.

Ich habe also ein Skript ausgeführt, um die Tabelle zu erstellen, und verschiedene Zeilennummern aus einer Binärdatei einzufügen und dann die Tabelle zu löschen, siehe folgende Grafik.

Es dauerte ungefähr 7 Sekunden, um 1M Zeilen aus der Binärdatei einzufügen. Als nächstes entschied ich mich für das Benchmarking von 1M Zeilen gleichzeitig, um zu sehen, ob es bei einer bestimmten Datenbankgröße zu einem Flaschenhals kommen würde. Sobald die Datenbank ungefähr 59 Millionen Zeilen erreichte, fiel die durchschnittliche Einfügezeit auf ungefähr 5.000 / Sekunde

Durch das Setzen des globalen Schlüssels key_buffer_size = 4294967296 wurden die Geschwindigkeiten beim Einfügen kleinerer Binärdateien etwas verbessert. Die folgende Grafik zeigt die Geschwindigkeiten für verschiedene Zeilenzahlen

Allerdings hat das Einfügen von 1M Zeilen die Leistung nicht verbessert.

Reihen: 1,000,000 mal: 0: 04: 13,761428 Einsätze / sec: 3,940

vs für eine leere Datenbank

Reihen: 1,000,000 Zeit: 0: 00: 6,339295 Einsätze / sec: 315,492

    
Ben 02.10.2011, 09:35
quelle

0 Antworten