Hi,
ich habe eine Portalanwendung. In dieser Portalanwendung kann über eine JSP ein Excel-Servlet (JXL) aufgerufen werden. Dieses Servlet ist zur Darstellung des Ergebnisses einer Stored Procedure zuständig. Dabei handelt es sich aber um sehr viele Daten (Die SP benötigt alleine ca. 30 Sekunden). Diese Daten müssen aber noch gewissermaßen aufgearbeitet und verwertet werden. Dazu suche ich jetzt die schnellste Möglichkeit. Am Besten stelle ich den Sachverhalt mal vereinfacht dar.
- Es gibt Kunden, Artikel und Farben. Jeder Kunde kann mehrere Artikel haben, jeder Artikel mehrere Farben.
- Ein ResultSet der Stored Procedure enthält den Kunden, einen Artikel und eine Farbe dieses Artikels
- Ein ResultSet ist zuerst nach Kunden, und innerhalb nochmal nach Artikeln sortiert
- Am Ende des Excel-Sheets muss eine Stückzahl je Artikel (Farben je Artikel aufaddiert) und ohne Rücksicht auf Kunden ausgegeben werden
Beispielaufbau des ResultSet:
kdnr:1,art:10,farbe:grün
kdnr:1,art:10,farbe:rot
kdnr:1,art:13,farbe:rot
kdnr:2,art:11,farbe:blau
kdnr:2,art:12,farbe:grün
kdnr:2,art:12,farbe:blau
kdnr:3,art:10,farbe:rot
etc.
Beispielaufbau des ExcelSheets:
kdnr:1
art:10
farbe:grün
farbe:rot
art:13
farbe:rot
kdnr:2
art:11
farbe:blau
art:12
farbe:grün
farbe:blau
kdnr:3
art:10
farbe:rot
art:10 - 3
art:11 - 1
art:12 - 2
art:13 - 1
etc.
Meine Frage ist, wie ich diese Darstellung mit möglichst geringen Resourcen-Verbrauch darstellen kann. Meine jetztige Implementierung sieht 3 Klassen vor. Kunde, Artikel und Farbe. Ein Kunde hat u. a. eine ArrayList mit Artikeln und ein Artikel hat u. a. eine ArrayList mit Farben. Im Servlet selbst gibt es eine ArrayList von Kunden. Ich gehe jetzt also das ResultSet durch. Bei jedem Datensatz erstelle ich zuerst ein Kunden-Objekt und überprüfe, ob das schon in der ArrayList existiert. Ist dies nicht der Fall, wird das Kunden-Objekt der ArrayList hinzugefügt. Existiert das Kunden-Objekt bereits, wird überprüft, ob der Artikel des Datensatzes schon im Kunden-Objekt existiert. Ist dies der Fall, wird zu diesem Artikel die Farbe aus dem Datensatz hinzugefügt. Ist dies nicht der Fall wird der komplette Artikel der ArrayList für Artikel des Kunden neu hinzugefügt.
Funktionieren tuts, nur ist es verdammt langsam. Dauert ca. zwischen 3 und 5 Minuten + die 30 Sekunden der Stored Procedure bei 27783 Datensätzen. Und dabei ist die Excel-Generierung noch nicht mal mit eingerechnet!
Also wenn jemand einen Tipp für mich hätte, wie ich das Ganze performanter gestalten kann, würde ich mich freuen. Das Ganze kann auch ruhig dirty und nicht oop sein, ist nur ein kleines Auswertungsportlet, das niemand mehr nach dem Deployen ansehen wird .
lg
ich habe eine Portalanwendung. In dieser Portalanwendung kann über eine JSP ein Excel-Servlet (JXL) aufgerufen werden. Dieses Servlet ist zur Darstellung des Ergebnisses einer Stored Procedure zuständig. Dabei handelt es sich aber um sehr viele Daten (Die SP benötigt alleine ca. 30 Sekunden). Diese Daten müssen aber noch gewissermaßen aufgearbeitet und verwertet werden. Dazu suche ich jetzt die schnellste Möglichkeit. Am Besten stelle ich den Sachverhalt mal vereinfacht dar.
- Es gibt Kunden, Artikel und Farben. Jeder Kunde kann mehrere Artikel haben, jeder Artikel mehrere Farben.
- Ein ResultSet der Stored Procedure enthält den Kunden, einen Artikel und eine Farbe dieses Artikels
- Ein ResultSet ist zuerst nach Kunden, und innerhalb nochmal nach Artikeln sortiert
- Am Ende des Excel-Sheets muss eine Stückzahl je Artikel (Farben je Artikel aufaddiert) und ohne Rücksicht auf Kunden ausgegeben werden
Beispielaufbau des ResultSet:
kdnr:1,art:10,farbe:grün
kdnr:1,art:10,farbe:rot
kdnr:1,art:13,farbe:rot
kdnr:2,art:11,farbe:blau
kdnr:2,art:12,farbe:grün
kdnr:2,art:12,farbe:blau
kdnr:3,art:10,farbe:rot
etc.
Beispielaufbau des ExcelSheets:
kdnr:1
art:10
farbe:grün
farbe:rot
art:13
farbe:rot
kdnr:2
art:11
farbe:blau
art:12
farbe:grün
farbe:blau
kdnr:3
art:10
farbe:rot
art:10 - 3
art:11 - 1
art:12 - 2
art:13 - 1
etc.
Meine Frage ist, wie ich diese Darstellung mit möglichst geringen Resourcen-Verbrauch darstellen kann. Meine jetztige Implementierung sieht 3 Klassen vor. Kunde, Artikel und Farbe. Ein Kunde hat u. a. eine ArrayList mit Artikeln und ein Artikel hat u. a. eine ArrayList mit Farben. Im Servlet selbst gibt es eine ArrayList von Kunden. Ich gehe jetzt also das ResultSet durch. Bei jedem Datensatz erstelle ich zuerst ein Kunden-Objekt und überprüfe, ob das schon in der ArrayList existiert. Ist dies nicht der Fall, wird das Kunden-Objekt der ArrayList hinzugefügt. Existiert das Kunden-Objekt bereits, wird überprüft, ob der Artikel des Datensatzes schon im Kunden-Objekt existiert. Ist dies der Fall, wird zu diesem Artikel die Farbe aus dem Datensatz hinzugefügt. Ist dies nicht der Fall wird der komplette Artikel der ArrayList für Artikel des Kunden neu hinzugefügt.
Funktionieren tuts, nur ist es verdammt langsam. Dauert ca. zwischen 3 und 5 Minuten + die 30 Sekunden der Stored Procedure bei 27783 Datensätzen. Und dabei ist die Excel-Generierung noch nicht mal mit eingerechnet!
Also wenn jemand einen Tipp für mich hätte, wie ich das Ganze performanter gestalten kann, würde ich mich freuen. Das Ganze kann auch ruhig dirty und nicht oop sein, ist nur ein kleines Auswertungsportlet, das niemand mehr nach dem Deployen ansehen wird .
lg