| 

.NET C# Java Javascript Exception

1
was ist der schnellste weg, egal wie viel aufwand es macht, große datenmengen in eine MySQL datenbank zu ziehen? ich benutze java
28.08.2009
rico 21 2 2
4 Antworten
1
Der einfachste Weg, unabhängig von MySQL als konkretem Datenbankserver, ist JDBC und PreparedStatements (siehe http://java.sun.com/j2se/1.5.0/docs/api/java/sql/PreparedStatement.html).

Beispiel (JDBC-Connection ist vorhanden,):

PreparedStatement ps = connection.prepareStatement ("INSERT INTO tabelle NAMES (spalte1, spalte2) VALUES (?, ?)";
while (...) {
ps.setString (1, "...");
ps.setString (2, "...");
ps.addBatch ();
}
ps.executeBatch ();


Damit sind INSERTs im Bereich von mehreren 100.000 Einträgen normalerweise unproblematisch möglich.

Die Frage wäre, ob das der Bereich ist, den Du mit "große Datenmengen" meinst...?
Ich habe mit größeren Datenmengen leider nur Erfahrung mit Oracle, für das ein eigener "Bulk-Loader" vom Hersteller mitgeliefert wird. Für MySQL gibt es das Kommando LOAD DATA INFILE, damit habe ich aber keine praktische Erfahrung.
07.09.2009
sbeyer 21 1 1
0
[Floyd]: Doppelpost (sollte mal gelöscht werden)
07.09.2009
sbeyer 21 1 1
Floyd 14,6k 3 9
0
Je nachdem, wie die Daten vorliegen und strukturiert sind, ist vielleicht das Arbeiten mit mehreren Threads sinnvoll, wenn es um das aufbereiten und zusammenstellen der Daten für einen Insert geht.

Ich weis nicht, ob es vielleicht sogar noch schneller wäre, von Java eine SQL Datei schreiben zu lassen, die man dann von Hand in MySQL importiert. (http://dev.mysql.com/doc/refman/5.1/de/mysql.html)

Soweit meine Erfahrung reicht, ist Java Speicherhungrig, wenn es um lange Strings geht. (1 Mio. Inserts o.ä.)
08.09.2009
0
Mmm, es kommt tatsächlich darauf an, wie viele Datensätze du importieren möchtest.
PreparedStatements sind sehr schnell, jedoch mußt du jeden Datensatz einzeln "verschicken".

Falls die Daten in einer CSV-Datei vorliegen, oder von Dir dorthin geschrieben werden, ist der BulkInsert von MySQL der schnellste Weg.

Bedeutet, benutze ein Query (oder PreparedStatement) mit dem "LOAD DATA INFILE" Befehl von MySQL, schau mal hier: http://dev.mysql.com/doc/refman/5.1/de/load-data.html

Das Gegenstück, um Daten sehr schnell in eine CSV-Datei zu exportieren ist SELECT ... INTO OUTFILE, was ich schon für diverse Backuparbeiten erfolgreich benutzt habe.
09.10.2009
stevetc 111 3

Stelle deine Java-Frage jetzt!