Servus leute,
hab da ma ne frage zu meinem quellcode:
Mein Problem dazu ist ganz einfach, es dauert EWIG! Meine Datenbank hat 1.5 Millionen einträge, von dem jeder 15 spalten besitzt. Wenn ich jetzt diese Methode aufrufe, brauch das Programm ca. 1h um mir eine XML Datei auszugeben. Hab schon versucht die Datenbank zu Indizieren, aber da dauernd neue Einträge hinzukommen ist das auf dauer keine Lösung. Gibts da vielleicht irgend einen Kniff, oder hab ich vielleicht sogar einen Fehler drinn? Bin auch alles mal mit dem Debugger durchgegangen, also von den Daten her stimmt alles, nur leider dauert der ganze spaß halt echt ewig...
Wär cool wenn mir jemand helfen könnte =)
Mfg
hab da ma ne frage zu meinem quellcode:
Java:
public static void userid(){
try{
a = con.createStatement();
// Service Provider Object instanzieren
SERVICE_PROVIDER serviceProvider = new SERVICE_PROVIDER();
serviceProvider.id=srvprovider;
Statement groupQuery = con.createStatement();
//Liste mit allen Gruppen innerhalb des Service Providers holen
ResultSet groupListRS = groupQuery.executeQuery("SELECT DISTINCT `GROUP` FROM cdr_processed WHERE SERVICE_PROVIDER = '"+srvprovider+"' ORDER BY `GROUP`");
//Durch alle Gruppen iterieren
while(groupListRS.next()) {
String groupId = groupListRS.getString("GROUP");
//Object für die Gruppe erstellen
GROUP group = new GROUP();
//ID der aktuellen Gruppe setzen
group.id = groupId;
//Die Gruppe an die Liste mit Gruppen innerhalb des Service Providers anhängen
serviceProvider.GROUP.add(group);
Statement userQuery = con.createStatement();
//Liste mit allen user innerhalb der Gruppen holen
ResultSet userListRS = userQuery.executeQuery("SELECT DISTINCT USER_ID FROM cdr_processed WHERE `GROUP` = '"+groupId+"' ORDER BY USER_ID");
//Durch alle Gruppen iterieren
while(userListRS.next()) {
String userId = userListRS.getString("USER_ID");
//Object für den User erstellen
USER user = new USER();
//ID des aktuellen Users setzen
user.id = userId;
//Den User an das User Array innerhalb der Gruppe anhängen
group.USER.add(user);
//Liste aller CDRs des Users holen
ResultSet rsstart = a.executeQuery("SELECT SERVICE_PROVIDER, `GROUP`, DIRECTION, LOCAL_NUMBER, RESPONSIBLE_NUMBER, REMOTE_LOCATION, CALL_TYPE, START_TIME, END_TIME, USER_ID, DURATION, PRICE, USER_TIME_ZONE FROM cdr_processed WHERE USER_ID = '"+userId+"' ORDER BY START_TIME");
//Durch alle CDRs iterieren
while(rsstart.next()){
//CDR Objekt instanzieren
CDR cdr = new CDR();
user.CDR.add(cdr);
cdr.provider = rsstart.getString("SERVICE_PROVIDER");
cdr.callType = rsstart.getString("CALL_TYPE");
cdr.direction = rsstart.getString("DIRECTION");
cdr.duration = rsstart.getString("DURATION");
cdr.localNumber = rsstart.getString("LOCAL_NUMBER");
cdr.remoteNumber = rsstart.getString("RESPONSIBLE_NUMBER");
cdr.remoteLocation = rsstart.getString("REMOTE_LOCATION");
cdr.group = rsstart.getString("GROUP");
cdr.user = rsstart.getString("USER_ID");
cdr.price = rsstart.getString("PRICE");
String timezone = rsstart.getString("USER_TIME_ZONE");
timezone = !timezone.startsWith("-") ? "+" + timezone : timezone;
TimeZone timeZone = TimeZone.getTimeZone("GMT" + timezone);
sdf.setTimeZone(timeZone);
long start = rsstart.getLong("START_TIME");
long end = rsstart.getLong("END_TIME");
//Formatierte Zeiten im Objekt speichern
cdr.startTime = sdf.format(new Date(start));
cdr.endTime = sdf.format(new Date(end));
}
}
}
XML.writeFile(serviceProvider);//nach ca 1h wird dieser punkt erreicht....
System.out.println();
System.out.println("File successfully written!");
}catch (SQLException e) {
System.err.println("Exception: " + e.getMessage());
System.err.println("SQLState: " + e.getSQLState());
System.err.println("VendorError: " + e.getErrorCode());
e.printStackTrace();
}
}
Wär cool wenn mir jemand helfen könnte =)
Mfg