tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
319
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    Ich weißt nicht, ob der Titel aussagekräftig ist aber ich suche nach einer Lösung für folgendes Problem:
    Ich habe ein Programm, das aus Datenbankabfragen eine Excel-Datei generiert.
    Jede Excel-Datei hat ca.30.000 Einträge, die in der Datenbank stehen, jeder Eintrag 20 Spalten.
    Nun sind allerdings von den 20 Spalten bei jeder Abfrage 19 gleich, die 20. wird über eine relativ komplizierte SQL-Abfrage selektiert.
    Weiteres Problem ist, dass nicht jede Excel-Datei alle 30.000 Einträge enthalten soll. D.h. es kommt vor, dass wenn in Spalte 20 kein Eintrag gefunden wird, alle anderen 19, die dazu passen raus fallen (Ist im Select ein Left Outer Join).
    Ist es irgendwie möglich, dass ich mir die ersten 19 Spalten immer im Speicher halte und die 20. dazu "joine" praktisch oder ist es vermutlich eher schneller, jedes mal alle Daten aus der DB abzufragen?

    Ich hatte an irgendsowas gedacht wie zwei HashMaps. Die erste Map enthält alle Keys, die zweite Map alle oder weniger Keys. Und dann zur zweiten Map mit der Untermenge die passenden 19 Spalten aus der ersten dazu-joinen/mappen, wie auch immer man es nennen will?

    Geht sowas oder habt ihr eine andere Idee?
     
    Hallo Nuray!

  2. #2
    THEJS THEJS ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Ort
    Sandl (Oberösterreich)
    Beiträge
    93
    Also wenn diese 19 immer gleich sind, würd ich zuerst mal die 19 abfragen.
    Diese dann wo speichern (eg. HashMap)

    Und dann das 'komplizierte' Statement ausführen.

    Dann nur noch für jede Zeile ins Excel schreiben, oder hab ich da was falsch verstanden?

    greez
    THEJS
     
    Das Danke: kostet nicht viel und sieht gut aus. ;)

    --> Bitte das Thema als erledigt markieren, wenn es das ist!!

  3. #3
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    Grundsätzlich ja.
    Mein Problem ist nur, dass eben in Liste 1 Elemente sind, die in Liste 2 unter Umständen nicht auftauchen und in der Excel dann zwischen Zeilen wiederum Info-Zeilen auftauchen.
    Im Moment hole ich mir alle Werte mit dem richtigen Select und iteriere einfach drüber und anhand von bestimmten Kriterien werden zwischendrin wieder Zeilen eingefügt.
    Was ich bräuchte wäre praktisch sowas in der Art
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    HashMap<String, 19Values> map1 = new HashMap<String, 19Values>();
    map1.put("1", new 19Values(value1, value2, value3 ...);
    map1.put("2", new 19Values(value1, value2, value3 ...);
    map1.put("3", new 19Values(value1, value2, value3 ...);
    map1.put("4", new 19Values(value1, value2, value3 ...);
    map1.put("5", new 19Values(value1, value2, value3 ...);
    map1.put("6", new 19Values(value1, value2, value3 ...);
     
    HashMap<String, double> map2 = new HashMap<String, double>();
    map2.put("1", 1.2);
    map2.put("2", 0.9);
    map2.put("3", 0.5);
     
    //join map1 with map2

    Am Ende möchte ich dann eine Map haben, in der alle Werte von map2 mit den zugehörigen Werten aus map1 auftauchen.
    Also so ca.
    Code java:
    1
    2
    3
    4
    
    HashMap<String, double> map3 = new HashMap<String, double>();
    map3.put("1", new 20Values(19Values, double);
    map3.put("2", new 20Values(19Values, double);
    map3.put("3", new 20Values(19Values, double);
     
    Hallo Nuray!

  4. #4
    RoCMe RoCMe ist offline Mitglied Gold
    Registriert seit
    Dec 2007
    Beiträge
    193
    Hm... So ganz verstehen tue ich das noch nicht... Ich hoffe, ich hab so einigermaßen durchschaut, was dein Problem ist

    Bau dir deine Join Methode doch selbst.

    In beiden Maps stehen doch die gleichen Keys drin?

    Ich habe nicht genau verstanden, wie deine Datenstruktur mit den HashMaps nun aussieht, aber scheinbar hast du eine HashMap<String, Irgendwas>. Ich nehme jetzt mal an, dass das Irgendwas das Interface List implementiert.

    Dann kannst du doch einfach das letzte fehlende (20. ? ) Objekt nachträglich dieser Liste hinzufügen?!

    Code java:
    1
    2
    3
    4
    5
    
     
    Map<String, Irgnedwas> result = new Map<String, Irgendwas>();
    for (String key : map2.keySet()) {
    result.put(key, map1.get(key).add(map3.get(key)));
    }

    Achtung: Code ist direkt im Browser getippt und wohl eher als Ansatz zu verstehen als als vollfunktionsfähioge Lösung...

    Edit: Ich verstehe aber noch nicht ganz, wozu die Map map gut ist, wenn sich doch bei jedem Eintrag nur der Key, nicht aber das Value-Objekt ändert... Reicht dann nicht eine einzige Liste, in der du das Ergebnis speicherst?
    Geändert von RoCMe (31.03.10 um 12:31 Uhr)
     

  5. #5
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    Jetzt hab ich verstanden was du meinst
    So könnte es durchaus funktionieren, ich muss mal probieren was schneller ist.
    Mein eigentliches Problem ist, dass die Datenbank, aus der ich das Abfrage eine Dynamics NAV DB ist und die in der Version keine Fremdschlüssel hat...
    D.h. die Abfragen sind nicht unbedingt performant und ich möchte jetzt probieren, ob es nicht evtl deutlich schneller geht, wenn ich am Anfang alle Daten in eine große HashMap lade und für jede Generierung diese HashMap kopiere, die Spalte 20 aus der DB abfrage, die Map mit Spalte 20 mit der Map mit allen Daten joine.
    Also dass die Abfragen schneller gehen, denn die Spalte 20 bekomme ich aus einer DB-Tabelle raus, die gesamten Daten nicht.

    Danke schonmal, ich werde es am Freitag mal testen und mich dann nochmal melden
     
    Hallo Nuray!

Ähnliche Themen

  1. SQL Spalte unterschiedlich zuweisen
    Von SpeedyWeb im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 09.11.07, 21:11
  2. Viele unterschiedlich große Seiten in PDF auf gleiche Größe?
    Von XtremeCJ im Forum Desktop Publishing (DTP)
    Antworten: 3
    Letzter Beitrag: 14.03.06, 15:40
  3. 2 Abfragen -> Suche unterschiedlich
    Von Katzehuhn im Forum PHP
    Antworten: 1
    Letzter Beitrag: 24.04.05, 22:51
  4. Antworten: 2
    Letzter Beitrag: 01.10.04, 21:24
  5. MySQL - zu viele Abfragen bzw. Performance verbessern
    Von fercules im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 29.04.04, 12:09