2009-04-21 10 views
-1

Ich benutze das Struts 2-Framework, aber diese Frage ist nicht nur Struts 2 verwandt.Paginierung mit einem Twist

Ich versuche, eine Art Seitenumbruch auf meiner Website zu haben. Angenommen, ich habe eine Liste mit Datensätzen, die ich auf einer Seite anzeigen möchte. Die Liste hat 150 Datensätze, aber ich möchte 50 auf jeder Seite zeigen, in diesem Fall wird es also 3 Seiten geben. Natürlich wird die Liste aus der DB geholt.

Die Wendung ist, dass wir eine Einschränkung haben, wo, wenn eine Abfrage dauert mehr als 7 Sekunden, es getötet (nicht fragen). Wenn wir also 150 Datensätze gleichzeitig haben, dauert unsere Abfrage mehr als 7 Sekunden. Also haben wir uns entschieden jedes Mal 50 Datensätze zu bekommen. Also gehen wir in diesem Fall 3 Mal zur DB (50 50 50). Das erste Mal werden wir die Summe holen (150), damit wir wissen, wie oft wir zurück in die Datenbank gehen sollten.

Können einige von Ihnen Ihre Gedanken teilen, wie Sie mit so etwas umgehen würden? Ich weiß, dass einige von euch sagen könnten, dass das Optimieren der gespeicherten Prozedur oder Abfrage die beste Wette ist, aber das wird ein schmerzhafter Weg sein, da wir viele SPs und Abfragen haben.

Ich würde alle Beispiele schätzen.

Antwort

0

Suchen Sie nur nach allgemeinen Tipps zum Umgang mit Paging? Sie sind auf dem richtigen Weg, wenn Sie denken, dass Sie nur die benötigten Datensätze aus der Datenbank holen sollten, um die Abfragen klein zu halten.

Verschiedene RDBMS haben unterschiedliche Ansätze zum Aufzählen und Blättern von Datensätzen. MySQL hat das Schlüsselwort LIMIT dafür, MS SQL Server 2005 und höher haben die ROW_NUMBER() Funktion, und Oracle hat eine ROWNUM spezielle Spalte. Abhängig von Ihrem RDBMS sollte es leicht sein, Beispiele für die Verwendung dieser Funktionen zu finden.

1

Sie müssen beim ersten Mal keinen tatsächlichen Abruf durchführen, Sie können nur die Anzahl abrufen (Aggregatfunktionsabfrage). Eine live-paginierte Liste ist besonders in sehr großen Datensätzen üblich, das einzige Problem wäre, dass es keine Garantie für den Seitenstatus gibt. Das bedeutet, dass Datensätze in einer Reihenfolge auf einer vorherigen Seite eingefügt werden können, wodurch ein älterer Datensatz in Ihrer neuen Seite verschoben wird und umgekehrt. Es ist jedoch akzeptabel, dies zu haben.

0

Ein Beispiel Abfrage für Paginierung, so dass Sie nur eine begrenzte Anzahl von Datensätzen erhalten ist: -

select * from records limit $start,50 

Hier habe ich angenommen, dass Ihre ursprüngliche Abfrage wählen war * von Datensätzen. Fügen Sie einfach Ihre ursprüngliche Abfrage mit "limit $ start, 50" an. Hier, wenn Sie wollen, die ersten 50 Datensätze Start sollte gleich 0 sein, um 50-100 Datensätze zu holen Start sollte gleich 50 sein und für 100-150 Datensätze Start sollte gleich 100 sein. Durch Anhängen von "Limit $ Start, 50" an alle Abfrage, nimmt die Abfrage 50 Datensätze beginnend mit Datensatznummer $ Start. Ich hoffe, dies würde Ihr Problem der Seitenumbruch lösen.