Paging-Abfragen sind ein häufig auftretendes Problem. Schauen wir uns zunächst den Grund an, warum Paging-Abfragen existieren:
Benutzerfreundlichkeit: Es ist für Benutzer unmöglich, alle Daten auf einmal anzuzeigen, daher ist es besser, Seite für Seite zu durchsuchen.
Leistung verbessern: Das gleichzeitige Abrufen aller Daten aus der Datenbank wird langsamer.
Lassen Sie mich nun versuchen, die oben genannten Gründe zu widerlegen:
Ist es wirklich praktisch? Wir betrachten die folgende Situation, wenn nur 20 Daten vorhanden sind.
Wenn die Daten 1000 Elemente überschreiten.
Der erste Typ erfordert offensichtlich keine Paging-Abfragen. Das Merkwürdige ist, dass die zweite Möglichkeit nicht erforderlich ist, da kein Benutzer bereit ist, Seite für Seite bis zum Ende weiterzublättern. Wenn die Daten, die der Benutzer abfragt, den Datenbereich überschreiten, der ihm wichtig ist, sollte es ihm meiner Meinung nach erlaubt sein, ihn erneut einzugeben Die Abfragebedingungen sind genau wie bei uns das Gleiche wie bei der Verwendung von Google.
Als benutzerfreundliche Anwendungsoberfläche hoffen wir jedoch immer, dass der Benutzer seine Abfrageergebnisse vollständig verstehen kann. Daher ist es notwendig, dem Benutzer mitzuteilen: „Wie viele Daten haben Sie gefunden? Derzeit können jedoch nur die ersten 1.000 Elemente angezeigt werden. Wenn Sie möchten alle Daten anzeigen, was ist dann zu tun ...“
Wird sich die Leistung verbessern?
Wenn die Datenmenge gering ist, wird die Leistung offensichtlich nicht wesentlich verbessert, im Gegenteil, die Leistung wird stark reduziert. Weil die Datenbank unnötige Abfragen und Abfragebedingungen durchführt.
Wenn die Datenmenge groß ist, wird die Leistung möglicherweise nicht wesentlich verbessert, da immer eine zusätzliche Zählabfrage ausgeführt werden muss und es bei der Kombination von SQL sehr wahrscheinlich zu einem vollständigen Tabellenscan kommt. Dies hängt natürlich vom Implementierungsprinzip der Datenbank ab.
Man kann sich vorstellen, dass die Beziehung zwischen der Auswirkung von Paging-Abfragen auf die Leistung und der Datenmenge eine Kurve sein sollte. Wenn die Datenmenge klein ist, verringert sich die Leistung, und wenn die Datenmenge groß ist, verringert sich die Leistung kann (abhängig von verschiedenen Datenbanken) verbessert werden. Der Schlüssel besteht darin, den Wendepunkt der Kurve durch Tests zu finden. Die Leistung wird nicht auf der Grundlage von Erfahrung und Gefühl ermittelt, sondern durch Tests. Wenn alle Daten auf einmal herausgenommen werden, wirkt sich dies tatsächlich auf die Speicherleistung aus.
Negative Auswirkungen Für eine gut strukturierte Webanwendung ist es wirklich unangenehm, pageNo und PageSize zwischen verschiedenen Klassen zu übergeben. Diese beiden Daten gehören offensichtlich zur Präsentationsebene. Wenn Sie RoR verwenden, habe ich es natürlich nicht erwähnt.
Erhöht die Programmierkomplexität erheblich, insbesondere im Hinblick auf die Datenbankunabhängigkeit.
Seltsames Phänomen: Warum stellt eine große Datenbank keine Paging-Abfragen direkt bereit? Die RowNo von Oracle wird nicht für das Paging verwendet, ebenso wenig wie die Top von SQLServer.
abschließend
ExtremeTable, DisplayTag und JSF DataTable bieten alle einfache Paging-Methoden, also das Paging in der Ergebnissammlung. Es ist sehr benutzerfreundlich und macht die Logik klar, was die Arbeitseffizienz erheblich verbessert. In den meisten Fällen kann diese Methode direkt angewendet werden.
Wenn Sie durch Tests feststellen, dass sich die oben genannte Methode auf die Leistung auswirkt, sollten Sie die Verwendung von Paging-Abfragen in Betracht ziehen.
Bei Anwendungen mit einer großen Anzahl von Benutzern können aufgrund von Speicherbeschränkungen auch Paging-Abfragen in Betracht gezogen werden. Persönlich empfehle ich jedoch die Caching-Methode: Dieselbe Abfrage wird in einem Cache abgelegt ...
Verwenden Sie ein angemessenes Design, um Entwickler vor der Auseinandersetzung mit der Paging-Logik zu schützen. Beispielsweise werden die Paging-Logik und die Zählabfrage in der übergeordneten Klasse platziert, und der Entwickler ist für die Kombination der Abfragebedingungen verantwortlich. Schauen wir uns speziell Designmuster an.
Jeder ist willkommen, mitzudiskutieren! ! !