Struts Performance-Schwäche

7bkahnt

Mitglied
Hallo Leute,
ich habe folgendes Problem.
Ich lasse mittels Struts und Hibernate eine Tabelle anzeigen.
Diese hat 12.000 Datensätze. Ich lasse die Datensätze mittels Hibernate in eine Liste schreiben und werte diese dann mithilfe eines Iterators aus:

Hibernate:
Java:
List<Adr> dsliste = null;
dsliste = session.createQuery(statement).setInteger(0, f_id_lfd_struktur).list();


Struts-Aufruf:
Java:
<div class="content">
	<table  class="userTable" cellpadding="5px">	
			<s:iterator value="dsList" status="adrStatus">
			<tr onclick="doIt(event)" class="<s:if test="#adrStatus.odd == true ">odd</s:if><s:else>even</s:else>">
				<td><s:property value="name" />
				</td>
				<td><s:url id="editURL" action="auswahlname">
					<s:param name="idds" value="%{id_adr_adresse}"></s:param>
					<s:param name="idauswahl" value="%{#adrStatus.index}"></s:param>
					</s:url> 
					<s:a href="%{editURL}" >Auswahl</s:a></td>
			</tr>
		</s:iterator>
		</table>

Dieser Vorgang dauert jedoch recht lange, da mittels dem Iterator ersteinmal 12.000 <tr>´s erstellt werden müssen.
Gibt es da noch eine andere Möglichkeit, dies zu realisieren?

Oder gibt es eine Möglichkeit, zwei body´s zu erstellen und nur einen dann immer zu aktualisieren?
Weil es noch ein weiteres Performace-Problem bei mir gibt.
Ich kann nach Anzeige aller Daten dann einen Datensatz auswählen, mittels des "Auswählen"-Button. Dann wird der ausgewählte DS in unten stehende Textfelder geschrieben und verlinke zurück dann erneut auf die jsp, damit es in die Textfelder geschrieben wird.
Und genau da liegt mein Problem. Es wird also ein weiteres mal der Iterator verwendet und wieder 12.000 tr´s erzeugt. Gibt es da eine Lösung nur die Textfelder unten zu aktualisieren und den oberen Teil (die Tabelle) nicht?

Ich wäre echt dankbar für wenigstens eine Lösung bzgl. meines Problems^^

Danke schonmal mi voraus.
 
Zuletzt bearbeitet:
Hi,

warum benutzt du keine Pagination und holst dir nur den Teil der Daten, die der Benutzer dann sieht? Ich weiß zwar nicht, was du darstellst, abe ich denke, das jeder Anwender mit 12000! Datensätzen in einer Tabelle überfordert sein wird.
Hibernate bietet dir dafür doch alles, was du brauchst:
Java:
Criteria criteria = session.createCriteria(Your.class);
criteria.setFirstResult(25);
criteria.setMaxResults(50);
List result = criteria.list();

Grüße
Peter
 
Hallo,

mein Vorredner hat vollkommen recht. 12000 Datensätze auf einer Seite. Wie lange scrollt man denn dann. Also solltest du vllt. weitere Filter einbauen und dir vllt ein Caching überlegen. Zwar hat Hibernate schon einen L1-Cache..aber du solltest vllt noch einen L2 Cache einbauen wenn das geht. Dadurch holste noch mehr Performanz raus. Welches DB Produkt verwendest du?. Es gibt auch Möglichkeiten die Abfragen auf der DB direkt zu beschleunigen.

Also am besten fängste an Performanzmessungen in deinen Code einzubauen, um den Falschenhals zu erkennen und dann bauste an der Stelle Caching etc. ein und dann wirste eine deutliche Beschleunigung feststellen.

Gruß
 
Ja stimmt. Danke euch.
Ich habe es mittels Paging gelöst. Sodass ich 30 Datensätze pro Seite anzeige und dann halt auf next klicke, falls ich die nächsten 30 zu Gesicht bekommen möchte.
 
Zurück