2009-06-23 17 views
6

Ich untersuche Situationen in datenbankorientierten Webanwendungen, wenn man sich auf Client-seitige Sortierung von Tabellen über Sortierung auf der Serverseite verlassen sollte. Eine besondere Situation, die mich nervt, ist Seitenumbruch.Probleme mit Paginierung und Sortierung

Wenn Sie versuchen, eine große Tabelle zu paginieren (sagen wir 10000 Zeilen), sowie nach einer bestimmten Spalte zu sortieren, was wäre der beste Ansatz?

Ich verstehe, dass einige Probleme im Zusammenhang mit dieser sind:

  • Ich kann nicht die gesamte Tabelle auf der Client-Seite zurückzukehren in einem
  • Ich kann nicht sortieren, so viele wie 10.000 Datensätze mit Javascript gehen
  • Beim Sortieren der Tabelle werden Zeilen auf allen Seiten sortiert, nicht nur auf der aktuellen Seite.

Haben Sie weitere Probleme, die dieser Liste hinzugefügt werden sollen?

Welcher Ansatz würde zu einer guten Mischung aus clientseitiger und serverseitiger Interaktion führen, sodass die Serverlast minimiert wird?


ADDITION:

Okay, auf dem Datenbank-Sortierung und Rückführen der reqd Seite eine Seite zurück und eine nächste Seite scheint die beste Wette.

Betrachten wir nun diese:

Der Benutzer ist auf der Seite (3 von 10) der Tabelle nach Seriennummer sortiert. Jetzt klickt der Benutzer auf die Kopfzeile mit dem Namen "Benutzername", um die Tabelle nach Benutzernamen zu sortieren.

Frage: Sollte das Endergebnis "Seite (1 von 10) sortiert nach Benutzername" lauten oder sollte es "Seite (3 von 10) nach Benutzername sortiert" sein?

Ich weiß, das ist eine sehr subjektive Frage, aber was würdest du empfehlen und warum?

+0

gute Frage. Sie könnten wahrscheinlich sagen, dass ich mich kürzlich mit diesem Problem beschäftigt habe. –

Antwort

3

Die Client-Seite ist am besten einfach gehalten: Javascript-Sortierung/Paging ist nur für sehr kleine Ergebnismengen - klein genug, dass ein Benutzer keinen Leistungseinbruch bemerkt.

Die Server-Seite ist, wo Sie die Serverlast optimieren:

Last in Form von häufigen Anfragen nach mehr Seiten, eine große Anzahl von Zeilen/Spalten pro Seite und häufigen Anfragen nach greifen kann kommen. (Wir haben nicht einmal über Filter gesprochen)

Also abhängig von Ihren Benutzern und tatsächliche Verwendung, benötigen Sie möglicherweise eine Form des Caching. Beachten Sie, dass diese Vorschläge für eine Zeit, nachdem Sie wissen, was Ihre Benutzer tun:

  • Für häufige Seitenanforderungen, berücksichtigen zu müssen einige Ajax-Anfragen die nächsten Vorspannung (und vorherigen) Seiten tauschen dann in den Zeilen (über Javascript) zur Tabelle auf Anfrage des Benutzers.

  • Bei großen Seitengrößen sollten Sie die Zeilen in einem "most-recently used" -Anwendungs- (Speicher-) Cache behalten, damit die Datenbank nicht immer dieselben großen Datenblöcke ausspucken muss.

  • Für häufiges Umsortieren ist ein guter Ansatz, eine Cache-Tabelle in SQL mit nur den Ergebnissen zu behalten.

Und immer, immer, immer die Datenbank entsprechend indizieren.


Zusätzliche Antwort:

Meine sehr subjektive Antwort ist diese: Der Benutzer (me) will von einer beliebigen Seite sortieren. Lass sie (mich). Es gibt nichts ärgerlicheres, als dort zu sein, wo man sein will, und wenn man mit einer Anwendung zum Anfang der Liste zurückkehrt.

Eine weitere Überlegung sind mehrere Ebenen der Sortierung: Möchten Sie die Sortierung nach Seriennummer und Benutzernamen implementieren? Berücksichtigen Sie, was Microsoft Excel tut, oder eine andere Anwendung, mit der Ihre Benutzer vertraut sind. Ihre Benutzer werden wahrscheinlich mit dem, was sie gewohnt sind gut sein - einschließlich auf Seite 1 zurückgeworfen werden.

+0

+1 für die Berücksichtigung von mehreren Sortierstufen :) – jrharshath

3

Datenbanken sind wahre Tiere bei der Sortierung und Auswahl von Daten. Am besten ist es also, wenn der Client dem Server sagt: "Ich möchte die Seite X mit Y-Zeilen, die nach Z sortiert sind." Dann macht die Datenbank ihre Sache, und der Client zeigt das Ergebnis. Um die Leistung zu verbessern, können Sie Ihre Ergebnisse im Cache zwischenspeichern. Außerdem können Sie Ihren Code dazu veranlassen, die nächste und vorherige Seite abzurufen, nachdem die aktuelle abgerufen wurde, damit sie auf Anforderung sofort angezeigt werden können.

0

Der beste Ansatz wäre, das Sortieren und Paging auf Datenbankebene durchzuführen und nur eine Teilmenge der Originaldaten zurückzugeben, die nur auf dem Bildschirm angezeigt werden. Kein Javascript in diesem Szenario.

Wenn Sie aus irgendwelchen Gründen auf Datenbankebene nicht sortieren und blättern können, sollten Sie dies mit einem serverseitigen Skript tun. Auch in diesem Szenario kein Javascript.

Und der schlimmste Ansatz wäre das Sortieren und Paging mit Javascript, die natürlich aus offensichtlichen Gründen überhaupt nicht empfohlen wird.

0

Lassen Sie die DB sortieren, was an die bestimmte Seite auf dem Bildschirm geliefert wird. Es wird fast immer schneller sein, im Cache gespeichert werden und so eine Belastung für den Browser erleichtern.

Wenn Sie möchten, lassen Sie die Client-Seite weitere Untersortierung über Javascript, etc., wenn die Daten detailliert genug sind und davon profitieren könnten. Sie können speichern, welche Untersortierfunktionen ausgewählt sind, damit sie zwischen den Seiten gespeichert werden.

Verwandte Themen