Freigeben über


Optimieren des Zugriffs auf Remotedaten

Der Zugriff auf Daten in einer Remotedatenbank ist immer aufwendig. Beim Abruf von Daten aus einer Serverdatenbank werden die folgenden Schritte durchlaufen:

  1. Der Client setzt die Abfrage an die Remotedatenbank ab.
  2. Der Server analysiert und kompiliert die Abfrage.
  3. Der Server generiert das Resultset.
  4. Der Server benachrichtigt den Client, dass das Ergebnis vollständig ist.
  5. Der Client holt die Daten über das Netzwerk vom Server ab. Dies kann in einem Schritt stattfinden. Jedoch kann der Client auch fordern, dass die Daten auf Aufforderung stückweise geliefert werden.

Mit einer Anzahl von Techniken kann das Abrufen (oder Aktualisieren) von Daten beschleunigt werden. Diese Strategien werden im folgenden Abschnitt beschrieben:

  • Abrufen nur benötigter Daten
  • Effiziente Aktualisierung von Remotetabellen
  • Versenden von Anweisungen als Batch
  • Einstellen der Paketgröße
  • Verzögerter Abruf von Memo- und Binärdaten
  • Lokales Speichern von Nachschlagedaten
  • Erstellen lokaler Regeln

Abrufen nur benötigter Daten

In den meisten Anwendungen, die Remotedaten verwenden, müssen Formulare und Berichte nicht auf einmal auf alle Daten einer Tabelle zugreifen. Sie können daher die Leistung erhöhen, indem Sie Remoteansichten erstellen, die nur die gewünschten Felder und/oder Datensätze holen oder aktualisieren. Dadurch müssen weniger Daten über das Netzwerk übertragen werden.

Befolgen Sie beim Erstellen von Abfragen, die den Datenabruf von Remotequellen optimieren, die folgenden Ratschläge:

  • Spezifizieren Sie nur die benötigten Felder. Verwenden Sie z. B. die Anweisung SELECT * FROM customers nur dann, wenn alle Felder der Tabelle benötigt werden.

  • Fügen Sie eine WHERE-Klausel ein, um die Anzahl der abgerufenen Datensätze zu beschränken. Je spezifischer die WHERE-Klausel ist, desto weniger Datensätze werden zu Ihrem Computer übertragen und desto schneller ist die Abfrage abgearbeitet.

  • Verwenden Sie Parameter in der Klausel, wenn Sie beim Entwurf noch nicht wissen, welche Werte in einer WHERE-Klausel verwendet werden sollen. Beim Ausführen der Abfrage verwendet Visual FoxPro den Wert einer Parametervariable oder fragt den Benutzer nach dem Suchwert. Die folgende Abfrage ermöglicht es der Anwendung oder dem Benutzer, die Region zur Laufzeit einzutragen.

    SELECT cust_id, company, contact, address ;
       FROM customers ;
       WHERE region = ?pcRegion
    
  • Stellen Sie die Eigenschaft NoDataOnLoad des zugehörigen Datenumgebungs-Cursorobjekts auf Wahr (.T.) ein. Diese Technik wird häufig unter Verwendung von Ansichten mit Parametern eingesetzt, bei denen die Daten für die Parameter dem Wert eines Steuerelements auf dem Formular entsprechen.

Effiziente Aktualisierung von Remotetabellen

Beim Aktualisieren einer Tabelle einer Remotedatenquelle mit Hilfe einer Ansicht, muss Visual FoxPro zunächst überprüfen, ob die von Ihnen aktualisierten Datensätze zwischenzeitlich geändert wurden. Dazu muss Visual FoxPro die Daten auf dem Server untersuchen und mit den Daten auf Ihrem Computer vergleichen. In manchen Fällen kann dies ein zeitaufwendiger Vorgang sein.

Zur Optimierung der Aktualisierung von Daten in Remotedatenquellen können Sie festlegen, wie Visual FoxPro nach geänderten Datensätzen sucht. Dazu legen Sie die WHERE-Klausel fest, die Visual FoxPro bei Durchführung der Aktualisierung erstellen soll.

Angenommen Sie verwenden eine auf einer Kundentabelle in einer Remotedatenquelle basierende Ansicht, die Sie mit einer Anweisung SELECT - SQL wie der folgenden erstellt haben:

SELECT cust_id, company, address, contact ; 
   FROM customers ;
   WHERE region = ?vpRegion

Sie möchten nun außer dem Schlüsselfeld (cust_id) alle in der Ansicht spezifizierten Felder aktualisieren können. Die folgende Tabelle illustriert für die verschiedenen in der SQL-WHERE-Klausel möglichen Optionen, welche WHERE-Klausel Visual FoxPro erstellt.

Anmerkung   Die Funktion OLDVAL( ) gibt den ursprünglichen Wert der von Ihnen modifizierten Felder zurück, die Funktion CURVAL( ) den aktuellen in der Remotedatenquelle gespeicherten Wert. Durch Vergleich dieser Werte kann Visual FoxPro feststellen, ob der Datensatz in der Remotedatenquelle geändert wurde, nachdem Sie diesen auf Ihren Computer abgerufen haben.

Einstellung WHERE-Klausel
Nur Schlüsselfelder
WHERE OLDVAL(cust_id) = CURVAL(cust_id)
Schlüssel und aktualisierbare Felder (Standardeinstellung)
WHERE OLDVAL(cust_id) = CURVAL(cust_id) AND
   OLDVAL(<mod_fld1>) = CURVAL(<mod_fld2>) AND
   OLDVAL(<mod_fld2>) = CURVAL(<mod_fld2>) AND
   ...
Schlüssel und veränderte Felder
WHERE OLDVAL(cust_id) = CURVAL(cust_id) AND   OLDVAL(company) = CURVAL(company) AND
   OLDVAL(contact) = CURVAL(contact) AND
   OLDVAL(address) = CURVAL(address)
Schlüssel und Zeitstempel
WHERE OLDVAL(cust_id) = CURVAL(cust_id) AND
   OLDVAL(timestamp) = CURVAL(timestamp)

Generell gilt für die Auswahl der Option für die SQL-WHERE-Klausel folgende Vorzugsreihenfolge:

  1. Schlüssel und Zeitstempel, wenn die Remotedatenbank Zeitstempelfelder unterstützt. Dies ist die schnellste Möglichkeit zur Feststellung ob ein Datensatz geändert wurde.
  2. Schlüssel und veränderte Felder, da es sich bei den zu aktualisierenden Feldern meist nur um eine Teilmenge der aktualisierbaren Felder handelt.
  3. Schlüssel und aktualisierbare Felder.
  4. Nur Schlüsselfelder. Bei diesen Einstellungen fügt der Remoteserver anhand des geänderten Schlüsselwertes einen komplett neuen Datensatz ein und löscht den alten Satz.

Versenden von Anweisungen als Batch

Manche Server (z. B. der Microsoft SQL-Server) erlauben es, einen Stapel von SQL-Anweisungen gesammelt (im Batch) abzusetzen. Dies erhöht die Leistung, da dadurch der Netzwerkverkehr reduziert wird und der Server mehrere Anweisungen auf einmal kompilieren kann.

Wenn Sie z. B. die Batch-Größe mit 4 angegeben haben und dann 10 Datensätze in der Datenbank aktualisieren, sendet Visual FoxPro wie folgt 4 Anweisungen als einen Batch:

UPDATE customer SET contact = "John Jones" ; 
   WHERE cust_id = 1;
UPDATE customer SET contact = "Sally Park" ; 
   WHERE cust_id = 2;
UPDATE customer SET company = "John Jones" ;
   WHERE cust_id = 3;
UPDATE customer SET contact = "John Jones" ;
   WHERE cust_id = 4

So versenden Sie Anweisungen im Batch

  • Wählen Sie im Dialogfeld Optionen die Registerkarte Remotedaten, und geben Sie unter Datensätze für Batch-Aktualisierung die Anzahl der in einem Batch zu versendenden Datensätze an.

    - Oder -

  • Rufen Sie eine der Funktionen DBSETPROP( ) oder CURSORSETPROP( ) zum Setzen dieser Eigenschaften auf:

    • Setzen Sie Transaction auf 2.

    • Setzen Sie BatchUpdateCount auf die Anzahl der in einem Batch zu versendenden Anweisungen.

      - Oder -

  1. Wählen Sie im Menü Abfrage des Ansichts-Designers Erweiterte Optionen, um das Dialogfeld Weitere Optionen aufzurufen.

  2. Geben Sie im Bereich Leistung neben Anzahl der Datensätze für Batch-Aktualisierung die Anzahl der Datensätze ein, die in einem Batch versendet werden sollen.

    Anmerkung   Zur Optimierung der Aktualisierung sollten Sie mit verschiedenen Werten für diese sowie die Eigenschaft PacketSize experimentieren.

Einstellen der Paketgröße

Sie können den Zugriff auf Remoteserver optimieren, indem Sie die Größe der Netzwerkpakete, die zur Remotedatenbank versandt und von dieser erhalten werden, fein einstellen. Unterstützt das Netzwerk z. B. große Paketgrößen (größer als 4096 Byte), können Sie die Paketgröße in Visual FoxPro erhöhen und somit bei jedem Netzwerkzugriff mehr Daten senden oder empfangen.

So setzen Sie die Paketgröße

  • Rufen Sie eine der Funktionen DBSETPROP( ) oder CURSORSETPROP( ) auf und setzen Sie die Eigenschaft PacketSize auf einen positiven ganzzahligen Wert. Der Standardwert liegt bei 4.096.

    Anmerkung   Diese Eigenschaft wird von den verschiedenen Netzwerkanbietern unterschiedlich behandelt, daher sollten Sie die Netzwerkdokumentation zu Rate ziehen. So hat z. B. Novell NetWare eine maximale Paketgröße von 512 Byte, so dass es keinen Nutzen hat, PacketSize auf einen höheren Wert zu setzen.

Verzögerter Abruf von Memo- und Binärdaten

Wenn Sie auf einem Remoteserver Memo- oder Binärdaten speichern, können Sie die Leistung erhöhen, indem der Abruf dieser Daten solange hinausgezögert wird, bis die Anwendung diese wirklich benötigt.

So verzögern Sie den Abruf von Memo- und Binärdaten

  • Wählen Sie im Dialogfeld Optionen die Registerkarte Remotedaten und deaktivieren unter Standardeinstellungen für Remoteansichten das Kontrollkästchen Memofeld abrufen.

    - Oder -

  • Rufen Sie zum Setzen der Eigenschaft FetchMemo die Funktion DBSETPROP( ) oder CURSORSETPROP( ) auf.

Lokales Speichern von Nachschlagedaten

Viele Anwendungen verwenden statische Nachschlagedaten wie Postleitzahlen, Vorwahlen oder Anreden. Enthält Ihre Anwendung derartige Daten und ist die Tabelle nicht zu umfangreich, so können Sie die Anwendung beschleunigen, indem Kopien dieser Informationen auf den Computern der Benutzer gehalten werden. Die Nachschlagedaten verursachen dann keinen Netzwerkverkehr.

Diese Technik eignet sich insbesondere für Daten, die sich nur selten oder nie ändern. Ändern sich diese Daten gelegentlich, müssen Sie sich eine Strategie dafür ausdenken, wie neue Kopien der Nachschlagetabelle auf die Computer der Benutzer übertragen werden.

Erstellen lokaler Regeln

Sie können Ihre Anwendung weiter beschleunigen, indem Sie bereits in Visual FoxPro lokale feld- oder datensatzbasierte Regeln erstellen, anstatt sich auf die im Server definierten Regeln zu verlassen. So kann verhindert werden, dass Daten, die nicht den Daten- oder Geschäftsregeln entsprechen, in die Datenbank gelangen.

Durch die Definition von Regeln in Visual FoxPro können Sie ungültige Daten abfangen, bevor diese über das Netzwerk geschickt werden. Diese Methode ist schneller und gibt Ihnen eine bessere Kontrolle über die Behandlung von Fehlerbedingungen. Wenn Sie lokale Regeln verwenden, müssen Sie diese jedoch mit den Regeln des Remoteservers koordinieren. Gibt es z. B. Änderungen an den Regeln des Servers, müssen Sie ggf. auch Ihre lokalen Regeln entsprechend ändern.

Weitere Informationen zum Erstellen lokaler Regeln finden Sie unter Erstellen von Ansichten im Abschnitt Aktualisieren von Daten mit Hilfe einer Ansicht.

Siehe auch

Optimieren von Anwendungen in einer Mehrbenutzerumgebung | Optimierung internationaler Anwendungen | Optimieren von Anwendungen |Optimieren des Systems | NoDataOnLoad-Eigenschaft | SELECT - SQL-Befehl