Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Was ist der effektivere Zugriff auf eine Tabelle (https://www.delphipraxis.net/177636-ist-der-effektivere-zugriff-auf-eine-tabelle.html)

Jumpy 18. Nov 2013 13:14

Datenbank: SQLServer • Version: ? • Zugriff über: ?

Was ist der effektivere Zugriff auf eine Tabelle
 
Hallo,

ich mach gerade eine Mini-Web-CGI, bei der gewisse Textbausteine aus einer Datenbank geladen werde sollen. Dabei benutze ich Standard PageProducer und in deren OnTag Behandlung hole ich zum Tag den passenden Text aus der Datenbank. Die Frage ist nun, wie das am effizientesten geht.

Ich könnte eine globale Query im Datenmodul nutzen, die ich beim starten der CGI öffne (oder wenn ich es das erste mal brauche) und dann den benötigten Datensatz via Locate suchen oder ich öffne jedesmal eine Query, die mir nur den Datensatz den ich suche von der DB liefert.

Ich kann noch keine genauen Zahlen geben, aber ich denke es wird so ca. 1000 Textbausteine geben, in derzeit 3 Sprachen. Auf einer vom PageProducer gelieferten Seite werden sich denk ich zwischen 5 und 25 Tags finden die durch die DB-Textbausteine gefüllt werden müssen.

delfox 20. Nov 2013 18:01

AW: Was ist der effektivere Zugriff auf eine Tabelle
 
Hallo!

Du kannst doch auch einfach einmal die Zeiten messen ?! Wenn sich wenig ändern, dann eventuell einen Cache bauen. Man kann auch einen bauen, der sich aktualisiert, sobald sich in der Datenbank etwas ändern. Einfach paar Sachen testen (z.B. 1000 mal) und dann den Mittelwert in (Milli)Sekunden ausgeben lassen.

sx2008 20. Nov 2013 18:38

AW: Was ist der effektivere Zugriff auf eine Tabelle
 
Wenn du CGI verwendest dann wird für jede Browseranfrage deine CGI-Exe neu gestartet.
Also würde das Cachen der Datensätze gar nichts bringen.
Bei FastCGI, NSAPI oder ISAPI wäre das anderst da nicht jedesmal ein neuer Prozess gestartet wird.

jobo 21. Nov 2013 05:16

AW: Was ist der effektivere Zugriff auf eine Tabelle
 
Ich hab mit CGI nichts am Hut.
Wenn möglich würde ich dafür sorgen, dass die DB Buffer so dimensioniert sind, dass die Daten vollständig dort im RAM liegen. 3000 Sätze insgesamt ist nicht viel, es sei denn, die Textbausteine bestehen aus den einzelnen Brockhausbänden.
Der Zugriff ist dann so oder so Kopfrechnen für das System.
Locate setzt vollständige Datasets am Client voraus, das wäre im Grunde schon der 2. "Cache". Ich würde zu gezielten Queries tendieren, kommt auch drauf an, ob Webserver und DB auf einem System sind.

Jumpy 21. Nov 2013 08:11

AW: Was ist der effektivere Zugriff auf eine Tabelle
 
Hallo,

und danke für die Antworten.

Die CGI.exe wird ja bei jedem Webrequest neu gestartet, es geht also nicht darum die Daten länger zu cachen oder so. Es geht darum, dass eine Seite angefordert wird. Ein PageProducer liefert diese und darin sind halt sog. Tags, die mit Textbausteinen gefüllt werden.

Ich habe das jetzt so gelöst, das ich eine globale Query habe, deren SQL-Statement so eingeschränkt ist, das es nur Textbausteine liefert, die für die gerade angeforderte Seite relevant sind oder aber die allgemeinen Textbausteine, die in mehreren Seiten vorkommen. Dadurch schränke ich die zu übertragene Datenmenge ein.
Danach nutze ich dann Locate um den passenden Textbaustein in der "eingeschränkten" Datenmenge zu finden. Das reicht für mich derzeit an Geschwindigkeit.

Ach ja: Webserver und Datenbankserver sind getrennte Systeme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz