Freigeben über


Leistungsverbesserung durch Set-basierten Datenzugriff

Einer der wichtigsten Faktoren beim Erstellen einer schnellen, effizienten Client/Server-Anwendung ist das Einschränken der Datenmenge, die vom Server abgerufen wird. Da Client/Server-Anwendungen in der Lage sind, ggf. auf große Datenmengen auf einem Remoteserver zuzugreifen, kann die Verwendung der herkömmlichen lokalen Navigationstechniken dazu führen, dass die Client/Server-Anwendung langsam wird. Verwenden Sie zur Verbesserung der Leistung die Techniken des aus Datensatzgruppen basierten Datenzugriffs, um die Datenmenge, die gedownloadet wird, zu filtern.

Effizienter Zugriff auf mengenbasierte Daten

Remotedaten baisren auf Datensatzgruppen. Sie können auf Remotedaten zugreifen, indem Sie eine bestimmte Datensatzgruppe unter Verwendung von SELECT - SQL-Anweisungen aus einem großen Datenspeicher auswählen. Das Erstellen einer Client/Server-Anwendung unterscheidet sich vom Erstellen einer herkömmlichen lokalen Anwendung durch die Verwendung der Techniken des mengenbasierten Zugriffs auf Serverdaten im Gegensatz zur Verwendung der herkömmlichen Visual FoxPro-Navigationstechniken.

Verwenden herkömmlicher Navigationstechniken

Bei der herkömmlichen lokalen Datenbankprogrammierung können Sie auf einzelne und meist große Datenmengen zugreifen, indem Sie den Befehl GOTO BOTTOM verwenden, anhand dessen dann die entsprechende Abfrage ausgeführt wird. Sie können sich durch Daten bewegen, indem Sie zunächst den Befehl SET RELATION zum Erstellen einer temporären Beziehung zwischen zwei Tabellen eingeben und dann den Befehl SKIP, um sich durch die verknüpften Datensätze zu bewegen.

Obwohl Sie diese Vorgehensweise auch zum Bewegen in Datensätzen für Remotedaten verwenden können, kann sie für große Remotedatenspeicherungen unter Umständen nicht geeignet sein. Wenn Sie z. B. eine Remoteansicht erstellen, die auf eine große Tabelle einer Remotedatenquelle zugreift, und dann den Befehl GOTO BOTTOM eingeben, müssen Sie warten, bis alle Daten der Ansicht aus der Datenquelle abgerufen, über das Netzwerk übertragen und in den Cursor Ihrer lokalen Systemansicht geladen wurden.

Verwenden parametrisierter Abfragen

Ein effizienteres Verfahren für den Zugriff auf Remotedaten besteht darin, nur die Daten zu downloaden, die benötigt werden, und dann durch erneutes Abfragen bestimmte zusätzliche oder neue Datensätze abzurufen. Verwenden Sie eine auf einem Parameter basierende SELECT-Anweisung, um eine bestimmte kleine Datenmenge zu downloaden, und greifen Sie dann auf neue Datensätze zu, indem Sie mit der REQUERY( )-Funktion eine neue Datensatzgruppe anfordern.

Geben Sie den Befehl GOTO BOTTOM nicht für Daten auf einem Remoteserver ein, da dies folgende Auswirkungen hätte:

  • Unnötige Belastung der Netzwerkressourcen durch das Downloaden großer Datenmengen.
  • Reduzierte Leistung Ihrer Anwendung durch die Verarbeitung nicht benötigter Daten.
  • Eine möglicherweise eingeschränkte Genauigkeit der Daten im lokalen Cursor, da Änderungen an Remotedaten erst auf die Daten des lokalen Cursors übertragen werden, wenn die entsprechende Abfrage erneut ausgeführt wird.

Wenn Sie z. B. eine Client/Server-Anwendung erstellen möchten, die auf die Bestellungen eines bestimmten Kunden zugreift, erstellen Sie eine Remoteansicht für den Zugriff auf die Kundentabelle. Erstellen Sie eine zweite Remoteansicht, die auf die Tabelle "Orders" zugreift, aber parametrisieren Sie die Ansicht basierend auf dem Feld cust_id. Verwenden Sie dann den aktuellen Kundendatensatz als Parameter für die Ansicht der Tabelle "Orders".

Sie können mit dem Parameter den gewünschten Umfang der gedownloadeten Daten festlegen. Wenn Sie zu wenige Daten anfordern, kann die Leistung nachlassen, da Sie das Abrufen der Daten vom Remoteserver häufiger durchführen müssen. Wenn Sie zu viele Daten anfordern, wenden Sie möglicherweise zu viel Zeit auf, um nicht benötigte Daten vom Server zu downloaden.

Auswählen des besten Client/Server-Entwurfs

Die folgenden Beispiele verdeutlichen, wie Sie die Vorteile der Client/Server-Technologie nutzen und eine ineffiziente Programmiertechnik vermeiden können. Die erste Methode verwendet die herkömmlichen Programmierpraktiken, um sämtliche Daten einer Remotedatenquelle abzurufen und in lokale Cursor zu leiten, zwischen denen dann mit Hilfe des SET RELATION-Befehls Beziehungen hergestellt werden. Die Methoden zwei bis vier übernehmen zunehmend intelligentere Techniken für das Abrufen von Daten, wobei die zu downloadende Datenmenge effektiv eingeschränkt wird, und zwar mit einer Just-In-Time-Methodik, die die aktuellsten Daten bereitstellt und die schnellsten Antwortzeiten in einem Netzwerk bietet.

Verwenden einer nicht optimierten Client/Server-Strategie

Eine einfache, nicht optimierte Client/Server-Anwendung verwendet lokale Datennavigationstechniken für Remotedaten. Wenn Sie z. B. über eine Remotedatenquelle mit 10 Millionen Kundendatensätzen und 100 Millionen Datensätzen mit Bestellungen verfügen, könnten Sie eine ineffiziente Anwendung erstellen, die sämtliche Datensätze bezüglich Kunden und Bestellungen in lokale Cursor downloadet. Sie könnten dann die 100 Millionen Bestelldatensätze indizieren, eine temporäre Beziehung zwischen den Tabellen "Customers" und "Orders" in dem lokalen Cursor herstellen und sich mit dem Befehl SKIP durch die Datensätze bewegen.

Dieses Verfahren ist nicht optimal in Bezug auf die Leistung, kann aber nützlich sein, wenn es auf eine Beziehung mit einer lokalen 1-Seite und einer entfernten n-Seite angewendet wird.

Filtern der n-Seite

Bei einer etwas verbesserten Client/Server-Anwendung werden die Daten auf der n-Seite der Beziehung begrenzt, aber alle Daten der 1-Seite abgerufen, so dass Sie sich durch die Datensätze bewegen können. In diesem Fall können Sie eine Remoteansicht der n-Seite der Beziehung, nämlich der Tabelle "Orders", mit der Kundennummer als Parameter erstellen und dann die gesamte Tabelle "Customer" downloaden.

Obwohl das Erstellen einer Ansicht mit Parametern der Tabelle "Orders" eine Verbesserung gegenüber dem Downloaden aller Bestellungen ist, werden durch das Downloaden der gesamten Tabelle "Customer" immer noch unnötige Daten abgerufen. Die Tabelle "Customer" verliert darüber hinaus mehr und mehr an Aktualität, da von anderen Benutzern auf Ihrem System Änderungen vorgenommen werden können. Dieses Verfahren kann dann vorteilhaft sein, wenn die 1-Seite der Beziehung eine kleine Datenmenge enthält.

Filtern der 1-Seite

Eine effizientere Client/Server-Programmiertechnik erstellt Remotesansichten für alle Remotedaten. Dabei wird die Anzahl der Kundendatensätze, die in die Remoteansicht der Tabelle "Customer" gedownloadet werden, eingeschränkt, indem die SELECT-Anweisung in der Ansicht verwendet wird, um nur die Kunden für eine bestimmte Region auszuwählen. Anschließend können Sie eine Remoteansicht für die n-Seite der Beziehung, die Tabelle "Orders", mit der Kundennummer als Parameter erstellen.

In diesem Fall wird eine kleinere Gruppe von Datensätzen abgerufen. Mit Hilfe des Befehls SKIP können Sie sich innerhalb der 1-Seite der Beziehung (der Ansicht "Customer") bewegen. Verwenden Sie die REQUERY( )-Funktion, um auf neue Daten auf der n-Seite ("Orders") zuzugreifen.

In diesem Beispiel wird sowohl die 1-Seite als auch die n-Seite der Beziehung eingeschränkt bzw. gefiltert. Dennoch können Sie sich mit dem Befehl SKIP durch die gefilterten Daten bewegen. Dieses Verfahren wird empfohlen, wenn die 1-Seite der Beziehung auch noch nach dem Filtern genügend Daten zum erfolgreichen Durchführen von Abfragen zur Verfügung stellt, bevor Sie den Remoteserver erneut abfragen.

Verwenden des Primärschlüssels für den Zugriff auf die 1:n-Beziehung

Die effizienteste Client/Server-Programmiertechnik gibt die Verwendung des aufwändigen Befehls SKIP auf und erstellt ein Formular, das die Eingabe oder Auswahl der Kundennummer fordert, die dann als Parameter für eine Remoteansicht der Tabelle "Customer" verwendet wird. Dieser Parameter wird auch für eine Remoteansicht der Tabelle "Orders" verwendet.

Sie können z. B. ein 1:n-Formular erstellen, in dem die Kundendaten die 1-Seite und ein Datenraster-Steuerelement die n-Seite der Beziehung darstellen. Das Datenraster-Steuerelement kann an die Kundennummer gebunden werden, die auf der 1-Seite des Formulars ausgewählt wurde. Anschließend können Sie die MaxRecords-Eigenschaft von CURSORSETPROP( ) auf 1 einstellen und unter Verwendung des folgenden Codes die 1-Seite des Formulars füllen:

SELECT * FROM customer WHERE customer.cust_id = ?cCust_id

Wenn ein anderer Kundendatensatz angezeigt werden soll, können Sie eine neue Kundennummer eingeben oder auswählen. Das Formular ermittelt daraufhin aus der Datenquelle die Bestellungen für die neue Kundennummer und aktualisiert das Datenraster-Steuerelement mit den Daten der neuen Bestellung.

Wenn Sie diese Techniken verwenden, downloadet Ihre Anwendung nur die Daten, die zu einem bestimmten Zeitpunkt auch wirklich benötigt werden. Die Antwortzeit bei Abfragen über das Netzwerk wird durch das Einschränken der zu downloadenden Datenmenge verkürzt, und Sie können aktuellere Daten bereitstellen, da die Datenquelle erst unmittelbar vor dem Anzeigen der angeforderten Daten abgefragt wird.

Dieses Verfahren wird empfohlen, wenn Sie auf die 1:n-Beziehung zufällig und unter Verwendung eines beliebigen Primärschlüsselwertes zugreifen möchten. Sie können die Primärschlüssel beim Öffnen des Formulars in ein Steuerelement, z. B. eine Dropdownliste, downloaden und dann ein Steuerelement zur Verfügung stellen, das die Benutzer betätigen können, um die Liste der Primärschlüsselwerte bei Bedarf zu aktualisieren.

Verwenden der Datenumgebung in Client/Server-Anwendungen

Wenn Sie in einem Formular mit Remotedaten arbeiten, fügen Sie zu der Datenumgebung des Formulars die Ansichten hinzu. Sie können die AutoOpenTables-Eigenschaft der Datenumgebung auf Falsch (.F.) einstellen, so dass Sie angeben können, wann die Anwendung die Ansichten mit den Remotedaten aktualisieren soll. Stellen Sie die ControlSource-Eigenschaft für die Textfelder oder andere datengebundene Steuerelemente ein, nachdem Sie die OpenTables-Methode der Datenumgebung, die im Code normalerweise mit dem Init-Ereignis des Formulars verknüpft ist, aufgerufen haben. Weitere Informationen zum Festlegen von Formulareigenschaften finden unter Erstellen von Formularen.

Siehe auch

Client/Server-Entwurf für hohe Leistung | Datenspeicherort auf der optimalen Plattform | Entwurf von Client/Server-Anwendungen | Auswahl der richtigen Methoden | Client/Server-Leistungsoptimierung | Implementieren einer Client/Server-Anwendung