Hallo zusammen,
ich sitze hier gerade an einer Aufgabe und komme nicht weiter.
Zum Hintergrund:
Die Aufgabe besteht im Grunde darin Daten aus einer Oracle-DB in eine Couchbase zu überführen.
In der Oracle-DB sind Keys mit zugehörigen XML-Strings hinterlegt, diese werden dann in JSON umgewandelt (das funktioniert bereits).
In der Oracle-DB sind derzeit 11 Millionen Datensätze.
Derzeit habe ich folgenden Ansatz:
Das Problem hierbei ist allerdings, das das mit den 11 Millionen Datensätzen ewig dauert.
Daher dachte ich daran, das ganze eventuell mit Threads zu lösen, das wäre das Einzige was mir jetzt noch eingefallen wäre.
Nur habe ich hierbei keine Ahnung, wie man anfangen soll, gerade weil es ja ein scrollable Resultset ist.
Threads habe ich im Studium zwar schon einmal kurz gehört und auch kurz ausprobiert, allerdings nie in Verbindung mit Datenbanken.
Könnte mir hierbei vielleicht jemand "Starthilfe" geben?
Auch eine vollkommen andere Lösung wäre ok. Hauptsache das geht alles ein bisschen schneller
vielen Dank und liebe Grüße
Chaya
ich sitze hier gerade an einer Aufgabe und komme nicht weiter.
Zum Hintergrund:
Die Aufgabe besteht im Grunde darin Daten aus einer Oracle-DB in eine Couchbase zu überführen.
In der Oracle-DB sind Keys mit zugehörigen XML-Strings hinterlegt, diese werden dann in JSON umgewandelt (das funktioniert bereits).
In der Oracle-DB sind derzeit 11 Millionen Datensätze.
Derzeit habe ich folgenden Ansatz:
Java:
package multithreading;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.document.JsonDocument;
import couchbase.ConnectionManager;
import couchbase.InsertBuild;
public class TestClob {
static ResultSet res;
static Statement stmt;
private static Bucket bucket;
public static void insertStuff(String id, String xml, Bucket bucket) throws Exception {
JsonDocument doc = InsertBuild.buildJsonDocument(id, xml);
bucket.async().upsert(doc);
}
public static void main(String[] args) throws Exception{
long lStartTime = System.nanoTime();
ConnectionManager cm = new ConnectionManager();
bucket = cm.connect();
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@host:port:name";
Connection conn = DriverManager.getConnection(url, "nutzer", "pwd");
String sql = "select NVL(LAST_UPDATE_DATE,'01.01.1000') as LAST_UPDATE_DATE, XML_MESSAGE from db" +
"inner join db" +
"on db.ORDER_HEADER_ID = db2.ORDER_HEADER_ID " +
"and db.ORDER_HEADER_ID< 25348167";
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
stmt = conn.createStatement();
res = stmt.executeQuery(sql);
while(res.next()){
insertStuff(res.getString(1), res.getString(2), bucket);
}
long lEndTime = System.nanoTime();
long difference = lEndTime - lStartTime;
System.out.println("Elapsed milliseconds: " + difference/1000000);
bucket.close();
conn.close();
}
}
Das Problem hierbei ist allerdings, das das mit den 11 Millionen Datensätzen ewig dauert.
Daher dachte ich daran, das ganze eventuell mit Threads zu lösen, das wäre das Einzige was mir jetzt noch eingefallen wäre.
Nur habe ich hierbei keine Ahnung, wie man anfangen soll, gerade weil es ja ein scrollable Resultset ist.
Threads habe ich im Studium zwar schon einmal kurz gehört und auch kurz ausprobiert, allerdings nie in Verbindung mit Datenbanken.
Könnte mir hierbei vielleicht jemand "Starthilfe" geben?
Auch eine vollkommen andere Lösung wäre ok. Hauptsache das geht alles ein bisschen schneller
vielen Dank und liebe Grüße
Chaya
Zuletzt bearbeitet von einem Moderator: