SQL - Cursor
Geizhals » Forum » Programmierung » SQL - Cursor (35 Beiträge, 505 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
....
Re(4): SQL - Cursor
01.02.2013, 23:19:25
. Cursors sind oft ein Anzeichen, dass der Programmierer im Geiste noch immer
bei Basic hängengeblieben ist und SQL eben nicht richtig verstanden hat.

Dann kläre mich mal bitte auf.

Stellen wir uns eine Datenbankanwendung vor, wo ein Benutzer eine Tabelle mit Daten sieht - zB seine offenen Aufträge. Das könnte ähnlich aussehen wie ein Excel-Spreadsheet. Das sei jetzt optisch so aufgebaut, dass ein Benutzer eine flexible Anzahl an Zeilen sieht... Beispielsweise 40.

Die Inhalte werden natürlich durch SQL am Server generiert...

Angenommen, für den Benutzer Franz gibt es nun 1000 offene Aufträge.
Es gibt nun 3 grobe Ansätze, das zu lösen.

1.) Es wird ein SQL abgesetzt, das alle 1000 Zeilen an den Client zurückliefert. Der kann die dann cachen und stellt halt immer die gerade anzuzeigenden dar. Wenn er den Scrollbar betätigt, kommen halt die nächsten Zeilen aus dem Cache.

2.) Es wird ein SQL abgesetzt, das beispielsweise nur die Zeilen 40-80 aus dem Result darstellt. Wenn er den Scrollbar betätigt, werden die Zeilen 40-80 gecacht und es wird ein neues SQL abgesetzt, das Zeile 81-90 holt. Danach werden Zeilen 50-90 dargestellt.

3.) Es wird ein Cursor aufgebaut. Man holt sich mal die ersten 40 Zeilen ab und stellt sie dar. Wenn der Scrollbar betätigt wird, werden die bekannten Zeilen gecacht und die nächsten Zeile aus dem Cursor geholt. und dann dargestellt.

Kommen wir zu den Vor- und Nachteilen der Lösung:
[1] Immense Netzlast wenn viele parallel zugreifen. Dazu oft sinnloser Aufwand beim Client (Wenn er beispielsweise 3000 Zeilen holt, davon 1-40 darstellt und danach auf etwas anderes geclickt wird)

[2] Aus Sicht vom Netz und Cache am Client weitaus besser: Es wird nur das Benötigte übertragen. Nachteil: Viele SQL-Abfragen werden abgesetzt, dadurch viele Parses ausgelöst (die auf vielen RDBMS nun mal auf nur einem Core laufen, egal wieviele Cores im Server sind), viel I/O um die vielen Querys zu beantworten, ...

[3] Aus meiner Sicht ideal. Die Query wird nur 1x durchgeführt - das ist weitaus sparender am Server als [2]. Aus Sicht des Client ist es einfach zu coden - und ebenso Ressourcensparsam, weil nur das benötigte gelesen wird. Aus Sicht Netz ebenso sparsam.

Warum bin ich im Geiste bei BASIC hängengeblieben? Oder welche Möglichkeit 4 sehe ich nicht?




05.02.2013, 18:41 Uhr - Editiert von kombipaket, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung