Frage

Ich verwende displaytag zu bauen Tabellen mit Daten von meinem db. Das funktioniert gut, wenn die angeforderte Liste ist nicht so groß, aber wenn die Listengröße mehr als 2500 Einträge wächst, nimmt die Ergebnisliste Holen sehr lang (mehr als 5 min.). Ich frage mich, ob dieses Verhalten normal ist.

Wie Sie große Liste / Anfragen zu bearbeiten, die großen Ergebnisse?

War es hilfreich?

Lösung

dieser Artikel Links zu einem Beispiel-App, wie etwa die Lösung des Problems zu gehen. Displaytag erwartet einen vollständigen Datensatz weitergegeben werden Paging-Links und Griff Sortierung zu erstellen. Diese Art von Pausen die Idee der Paging von außen auf die Daten und das Abrufen nur die Zeilen, die für die (wie die Benutzerseiten zu ihnen) gestellt werden. Das Projekt in dem Artikel verknüpft wird beschrieben, wie über die Einstellung diese Art von Sache bis gehen.

Wenn Sie mit einer großen Datenbank arbeiten, könnten Sie haben auch ein Problem der Ausführung Ihrer Anfrage. Ich nehme an, Sie diese ausgeschlossen haben. Wenn nicht, haben Sie die SQL wie bereits erwähnt - ich habe es über die DB2 Query Analyzer ausführen würde, wenn es zu sehen sind alle DB Engpässe. Der nächste Schritt der Kette wird einen Test des Ruhezustand / DAO Anrufs in einem Gerät zu testen, ohne displaytag in der Mischung auszuführen. Wieder aus, wie Sie die Dinge formuliert haben, es klingt wie Sie das bereits getan haben.

Andere Tipps

Der Displaytag schleppt und speichert alles im Speicher (die Sitzung). Hibernate funktioniert auch. Sie wollen nicht auf die gesamten DB Tabelleninhalte haben einmal im Speicher (wenn jedoch die Abschwächung bereits bei 2500 Zeilen beginnt, ist es aussehen wie eine Frage der schlecht optimiertem SQL-Abfrage / DB-Tabelle; 2500 Zeilen Erdnüsse für eine sein sollen, anständige DB, aber OK, die eine andere Geschichte).

erstellen vielmehr eine HTML-Tabelle selbst mit wenig Hilfe von JSTL c:forEach und ein Schuss von EL . Halten Sie ein oder zwei Anforderungsparameter im Hintergrund in input type="hidden". Die erste Zeile angezeigt werden (firstrow) und schließlich die Menge der Zeilen auf einmal (rowcount) angezeigt werden

Dann in Ihrer DAO-Klasse einfach einem SELECT stuff FROM data LIMIT firstrow OFFSET rowcount oder so etwas in Abhängigkeit von der DB verwendet. In MySQL und PostgreSQL können Sie die LIMIT und / oder OFFSET Klausel wie diese verwenden. In Oracle benötigen Sie eine Unterabfrage feuern. In MSSQL und DB2 benötigen Sie einen SP erstellen. Sie können mit HQL das tun.

Dann, um durch den Tisch, nur ein Haufen Tasten haben, die den Server-seitigen Code anweist, in / Verringerung der firstrow mit rowcount jedes Mal. Tun Sie einfach die Mathematik.

Bearbeiten : Sie kommentierte, dass Sie DB2 verwenden. Ich habe ein bisschen recherchiert und es scheint, dass Sie die UDB OLAP-Funktion ROW_NUMBER() für diese verwenden können:

SELECT id, colA, colB, colC 
    FROM (
        SELECT 
            ROW_NUMBER() OVER (ORDER BY id) AS row, id, colA, colB, colC
        FROM
            data
        ) AS temp_data
    WHERE
        row BETWEEN 1 AND 10;

In diesem Beispiel sollte die ersten 10 Zeilen aus der data Tabelle zurück. Sie können diese Abfrage parametrieren, so dass Sie es für jede Seite wiederverwenden können. Das ist effizienter als die gesamte Tabelle in Java Speicher abfragt. Achten Sie auch darauf, dass die Tabelle korrekt indiziert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top