Verringert die Paginierung die Serverlast? (Theorie)

11

Ich habe mich gefragt, was der Grund für die Paginierung ist. Wird es verwendet, weil es die Server entlastet, da wir die Anzahl der pro Seite zurückgegebenen Zeilen technisch begrenzen würden?

Ich wollte etwas ohne Paginierung machen, aber da ich neu in diesem Bereich bin (ich bin ein Amateur), begann ich mich zu fragen, ob es technisch in Ordnung ist oder nicht.

Sam Khan
quelle
Möchten Sie wirklich warten, bis Ihr Browser Tausende von Fragenzeilen heruntergeladen und gerendert hat, die Ihnen egal sind, wenn Sie auf dieser Website auf "Fragen" klicken?
Jeremy
3
Paginierung ist mehr für Menschen als für DBs.
Malfist

Antworten:

10

Es gibt eine Reihe von Gründen für die Paginierung. Die Reduzierung der Serverlast ist nur einer. Doch Stephen Orr wirft einen wichtigen Punkt - Sie müssen noch zuerst die Menge an Daten zu finden. Sie müssen sicherstellen, dass diese Abfrage schnell ist und Ihren Server nicht übermäßig lädt.

Andere Gründe sind:

  • Reduzieren der Datenmenge, die auf einmal an den Client zurückgegeben wird. Wenn Sie über viele Daten verfügen, kann dies einige Zeit in Anspruch nehmen und viel Speicherplatz beanspruchen.
  • Der Benutzer interessiert sich oft nicht für alle Daten, sondern nur für die neuesten (sagen wir). Wenn Sie nur ein paar Seiten mit Daten zurückgeben, erhalten Sie keine Daten, die der Benutzer niemals sehen wird.

In beiden Fällen möchten Sie den Benutzer nicht warten lassen - entweder auf Daten, die er nicht anzeigen wird, oder auf alle Daten, wenn er mit der Verarbeitung eines Teils davon Daten erhalten könnte.

ChrisF
quelle
2
+1 Ich habe etwas Ähnliches geschrieben, aber du warst zu schnell. Lassen Sie mich nur hinzufügen, dass paginierender Inhalt auch (ab) verwendet wird, um mehr Adds anzuzeigen.
Yannis
Sie können auch Seiten erstellen, ohne herausfinden zu müssen, wie viele Seiten vorhanden sind. Es ist ausreichend, zu wissen, dass mehr Daten vorhanden sind, als auf die aktuelle Seite passen.
Carlo Kuip
3

Dies variiert je nach Implementierung.

Dies beschleunigt das Rendern einer Seite, verringert jedoch nicht unbedingt die Belastung des Servers. Die meisten naiven Paginierungsalgorithmen müssen zuerst eine Abfrage durchführen, um zu entscheiden, wie viele Seiten vorhanden sein sollen, und dann erneut abfragen, um die "ausgelagerte" Ergebnismenge zu erhalten.

Steve Hill
quelle
Die meisten naiven Paginierungsalgorithmen müssen zuerst eine Abfrage durchführen, um zu entscheiden, wie viele Seiten vorhanden sein sollen : Die akkumulierte Belastung der Datenbank der Zählabfrage und der Abfrage des paginierten Ergebnisses ist jedoch fast immer weitaus geringer als die Abfrage "Alles abrufen" in einem allgemeinen Szenario (mit einer schön strukturierten relationalen Datenbank)
Yannis
@ YannisRizos, absolut. Ich habe gerade die dunkle Seite davon gesehen, mit einer unglaublich schlecht strukturierten relationalen Datenbank (viele unserer Abfragen verbinden 7 oder 8 verschiedene Tabellen, um ein Ergebnis zu erhalten).
Steve Hill
@YannisRizos: Definiere "Stress auf der Datenbank". Sie schieben immer noch zwei Abfragen über die Leitung. Paginieren Sie in der Abfrage (eine Superauswahl mit Zeilenanzahl) oder zwischenspeichern Sie die Ergebnisse in einer anderen Ebene? Es gibt viel zu viele Variablen, um zu sagen, dass es zu viel DB-Stress gibt. Ich würde behaupten, dass eine ordnungsgemäße Ausführung im Transaktionssinn (erlauben Sie ein fehlerhaftes Lesen / eine inkonsistente Anzahl in Seiten?) Die "Belastung" / Last der Datenbank erhöht, aber die Programmierung vereinfacht.
Jé Queue
@Xepoch Ich habe nicht zu viel Stress gesagt, nur dass jede Anzahl plus eine begrenzte Auswahl <vollständige Auswahl. Und das gilt nur für gängige Szenarien mit gut strukturierten relationalen Datenbanken.
Yannis
1

Der größte Wert, den Sie durch die Paginierung erzielen, besteht darin, die Geschwindigkeit Ihrer Anwendung zu steigern, indem Sie:

1 - Begrenzung der zwischen dem Client und dem Server übertragenen Daten. Es macht keinen Sinn, 1000000 Kunden zu lesen, wenn der Benutzer 10 von ihnen sucht.

2- Beschleunigen Sie die Abfrageleistung erheblich, indem Sie nur Zeilen abrufen, die in die Ansicht eines Benutzers passen. Es macht keinen Sinn, 1000000 Kunden zu lesen, wenn der Benutzer die ersten 10 Kunden betrachtet.

3 - Paginierung hilft, indem mehr frische Daten bereitgestellt werden. Wenn Ihre Anwendung viele Datenzeilen anzeigt und Ihre Anwendungsdomäne viele Aktualisierungen der Datenzeilen in der angezeigten Tabelle erfordert, sind die Daten in einigen Zeilen wahrscheinlich zu dem Zeitpunkt, zu dem Sie auf Seite 20 der Seitenliste gehen, vorhanden geändert. Stellen Sie sich eine Anwendung vor, die Aktienkurse oder verfügbare Zimmer in einem Hotel liest. Das Abrufen alter Daten und das Ablegen auf dem Client ist nutzlos.

Die Paginierung ist eine Strategie, die in Kombination mit der Filterung und Ihrem Verständnis der Anforderungen des Endbenutzers aus dem jeweiligen Szenario (was voraussichtlich zu einem guten Design führt, um diese Anforderungen zu erfüllen) die Anwendung erheblich verbessert, insbesondere wenn mehrere Benutzer auf die Datenbank zugreifen gleichzeitig.

Paginierung ist nicht immer trivial zu programmieren. In einigen Fällen ist es einfach, aber manchmal ist das Schreiben sehr komplex, sodass die SQL-Abfrage ausgeführt wird, ohne einen vollständigen Tabellenscan durchzuführen. Dies hängt natürlich von Ihren Indizes, der Filterbedingung und Ihrer Where-Anweisung ab.

Keine Chance
quelle
-4

Die Paginierung ist für mich die Mutter aller vorzeitigen Optimierungen. Es ist absolut in Ordnung, Ihre Website ohne Paginierung zu schreiben.

Wenn Sie nach der Veröffentlichung feststellen, dass Sie zu viele Daten in einem Anruf laden oder dass Ihre Benutzer auf Informationen warten müssen, die sie möchten, weil sie damit beschäftigt sind, Daten zu laden, die sie nicht möchten, schreiben Sie eine Ajax-Lösung Dadurch wird die Seite nur geladen, wenn Personen nach unten scrollen (siehe: Twitter, Tumblr, Google-Bildersuche).

Bearbeiten: Der zweite Absatz oben wurde mit der Annahme geschrieben, dass eine häufige Antwort lautet: "Wenn Sie jedoch wissen, dass Sie irgendwann paginieren werden, können Sie dies auch frühzeitig tun, anstatt Zeit damit zu verschwenden, etwas zu entwickeln, das Sie werfen werden." Weg."

Ich bin nicht nur die Mutter aller vorzeitigen Optimierungen, sondern denke auch, dass Paginierung ein UX-Albtraum ist und dass es bessere Lösungen gibt, die nicht viel zusätzliche Entwicklung auf der gesamten Seite erfordern würden.

Trotz der Anzahl der Abstimmungen lasse ich diese Antwort hier, weil ich zu dem Gefühl stehe, auch wenn es vielleicht nicht mein bestes Schreiben war.

pdr
quelle
5
Ich bin mit dieser Aussage überhaupt nicht einverstanden. Die Paginierung dient nicht der Optimierung der Datenbank, sondern der Bereitstellung von Daten in überschaubaren Abschnitten für Menschen. Würdest du Harry Potter lesen können, wenn alles auf einer Seite wäre? Könnten Sie Steuern einreichen, wenn die Abgabenordnung nur auf einer Seite wäre?
Malfist
@Malfist: Der einzige Grund, warum Sie diese Dinge nicht auf einer Seite behandeln konnten, ist, dass die Seite selbst zu groß wäre. Dies ist kein Problem auf Webseiten. Daher haben die von mir zitierten Websites bessere Lösungen für die Paginierung gefunden, während Lolcats derzeit fast 2000 Seiten hat, die auf keine vernünftige Weise paginiert werden können. Aber es ist deine Ablehnung, benutze es wie du willst.
pdr
1
@Malfist: Außerdem ist es fair genug, Dinge in überschaubare Teile aufzuteilen, wenn sich diese Teile nicht verschieben. Wenn ich die Seiten 1 bis 4 lese, möchte ich das nächste Mal wiederkommen und Seite 5 lesen. In vielen Fällen sind paginierte Websites jedoch Listen mit Elementen, die zuletzt zuerst veröffentlicht wurden. Wenn ich später zu Seite 5 zurückkehre, werden tatsächlich die Hälfte von Seite 3 und die Hälfte von Seite 4 angezeigt, seit ich das letzte Mal dort war, da die Liste ganz neue 1,5 Seiten enthält.
pdr
2
-1 Da ich dem auch nicht zustimme. Ich bin mir nicht mal sicher, wo ich anfangen soll zu erklären, warum.
Craige
@Craige: Na gut dann. Ich bin sicher nicht in der Lage, ein großes Argument dafür vorzubringen.
pdr