2016-04-19 10 views
1

Ich benutze derzeit Apache Derby als temporäre lokale Datenbank für meine Anwendung und ich hätte gerne einige Tipps, wie ich die INSERT-Leistung optimieren kann.Apache Derby & Java - Optimierung von Einfügungen

Wenn die Anwendung gestartet wird, liest es Datensätze aus einer CSV-Datei ein - das könnten Millionen, aber wahrscheinlicher Hunderttausende sein. Sobald sie verarbeitet sind, fasst eine SELECT-Abfrage am Ende die Informationen zusammen.

Es dauert derzeit ca. 1 Minute, um 6000 Datensätze einzufügen. Es gibt 3 Tabellen, 2 von ihnen speichern einzigartige Daten, und man ist eine Lookup-Tabelle zwischen den beiden - es sieht aus wie folgt:

CREATE TABLE table1 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 VARCHAR(40)) 

CREATE TABLE table2 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 VARCHAR(100), 
field2 INT, 
field3 VARCHAR(40)) 

CREATE TABLE table1table2lookup 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 INT NOT NULL, 
field2 INT NOT NULL) 

ich zur Zeit parametrisiert verwenden PreparedStatements und Dosiersysteme versuchen die erhöhen Geschwindigkeiten.

Ich habe auch ausgeschaltet auto commit Modus, so dass ich nur auf Bulk-einfügen begehen.

+0

Haben Sie versucht, den integrierten CSV-Dateiimport von Derby zu verwenden? Siehe http://stackoverflow.com/a/2339690/193453 –

Antwort

3

Von der „Tuning Derby“ doc:

Vermeiden Sie Einsätze in Autocommitmodus wenn möglich Inserts kann schmerzlich langsam in Autocommitmodus sein, da jede Commit für jede INSERT eine Aktualisierung des Protokoll auf der Platte beinhaltet Erklärung. Das Festschreiben wird nicht zurückgeben, bis eine physische Festplatte geschrieben wird. Um die Dinge zu beschleunigen: Führen Sie Autocommit false-Modus, führen Sie eine Reihe von Einfügungen in einer Transaktion, und dann explizit eine Festschreibung aus.

Aber für Ihren ersten Import sollten Sie erwägen, Einfuhrverfahren zu verwenden, um direkt die Daten aus einer Datei laden zu:

Wenn Ihre Anwendung eine Anfangslast in die Tabelle erlaubt, können Sie den Import verwenden Verfahren zum Einfügen von Daten in eine Tabelle. Derby wird nicht die einzelnen Inserts beim Laden in eine leere Tabelle mit diese Schnittstellen protokollieren. See Das Handbuch zu Derby Tools and Utilities für Weitere Informationen zu den Importverfahren.