Re(4): SQL - Cursor
Geizhals » Forum » Programmierung » SQL - Cursor (35 Beiträge, 506 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.  Re: SQL - Cursor
 (*patrick star* am 01.02.2013, 08:29:00)
..  Re(2): SQL - Cursor  (seti__23 am 01.02.2013, 08:31:16)
...  Re(3): SQL - Cursor
 (*patrick star* am 01.02.2013, 08:37:03)
....  Re(4): SQL - Cursor  (seti__23 am 01.02.2013, 08:42:10)
.....  Re(5): SQL - Cursor
 (*patrick star* am 01.02.2013, 08:54:55)
......  Re(6): SQL - Cursor  (seti__23 am 01.02.2013, 08:59:31)
.......  Re(7): SQL - Cursor
 (*patrick star* am 01.02.2013, 09:08:06)
.....  Re(5): SQL - Cursor  (zeddicus am 01.02.2013, 10:37:47)
......  Re(6): SQL - Cursor  (hhetl am 01.02.2013, 11:05:19)
.......  Re(7): SQL - Cursor  (zeddicus am 01.02.2013, 11:33:12)
....  Re(4): SQL - Cursor  (pong am 02.02.2013, 13:40:49)
....  Re(4): SQL - Cursor  (stiefl am 08.02.2013, 18:48:43)
.  Re: SQL - Cursor  (hhetl am 01.02.2013, 11:03:38)
..  Re(2): SQL - Cursor  (zeddicus am 01.02.2013, 11:33:55)
..  Re(2): SQL - Cursor  (seti__23 am 01.02.2013, 17:13:40)
...  Re(3): SQL - Cursor  (der_koarl am 01.02.2013, 21:56:04)
...  Re(3): SQL - Cursor
 (hhetl am 01.02.2013, 22:42:09)
....
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 Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
.....  Re(5): SQL - Cursor  (Paulas_Papa am 09.02.2013, 21:48:58)
......  Re(6): SQL - Cursor  (kombipaket am 09.02.2013, 22:03:19)
.......  Re(7): SQL - Cursor  (Paulas_Papa am 09.02.2013, 22:31:31)
........  Re(8): SQL - Cursor  (kombipaket am 09.02.2013, 22:41:50)
.........  Re(9): SQL - Cursor  (Paulas_Papa am 09.02.2013, 22:53:25)
........  Re(8): SQL - Cursor
 (*patrick star* am 10.02.2013, 10:54:17)
...  Re(3): SQL - Cursor  (zeddicus am 02.02.2013, 11:59:33)
.  Re: SQL - Cursor  (pong am 02.02.2013, 13:49:33)
..  Re(2): SQL - Cursor  (zeddicus am 05.02.2013, 10:03:26)
.  Re: SQL - Cursor  (Infosauger am 04.02.2013, 13:30:48)
..  Re(2): SQL - Cursor
 (*patrick star* am 04.02.2013, 15:18:42)
..  Re(2): SQL - Cursor  (kombipaket am 05.02.2013, 18:45:03)
 

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