Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Serveradministration » MobiLink-Servertechnologie verwenden » Synchronisationsmethoden

 

Snapshot-Synchronisation

Die zeitstempelbasierte Synchronisation ist für die meisten Synchronisationen geeignet. In bestimmten Fällen müssen Sie jedoch eine Ad-Hoc-Aktualisierung der Daten durchführen.

Die Snapshot-Synchronisation einer Tabelle ist das vollständige Einlesen aller relevanten Zeilen in der Tabelle, selbst wenn sie zuvor bereits eingelesen wurden. Dies ist die einfachste Synchronisationsmethode. Sie kann jedoch dazu führen, dass unnötig große Datenmengen ausgetauscht werden, wodurch die Performance eingeschränkt werden kann.

Sie können die Snapshot-Synchronisation verwenden und alle Zeilen der Tabelle einlesen oder sie mit einer Teilung der Zeilen verbinden. Weitere Hinweise finden Sie unter Zeilen auf entfernte Datenbanken verteilen.

Einsatz der Snapshot-Synchronisation

Die Ad-Hoc-Methode ist gewöhnlich am sinnvollsten bei Tabellen, die die beiden folgenden Merkmale aufweisen:

  • Relativ wenige Zeilen   Wenn nur wenige Zeilen vorhanden sind, ist der Overhead für den Download aller Zeilen gering.

  • Zeilen ändern sich häufig   Wenn sich die meisten Zeilen in einer Tabelle häufig ändern, bringt der Ausschluss jener Zeilen, die sich seit der letzten Synchronisation geändert haben, nur geringe Vorteile.

Eine Tabelle, die eine Liste mit Wechselkursen enthält, könnte für diesen Ansatz geeignet sein, da es relativ wenige Währungen gibt, die sich jedoch häufig ändern. Abhängig von der Art des Geschäfts könnten auch eine Tabelle, die Preise enthält, eine Liste mit Zinssätzen oder aktuelle Nachrichten denkbare Einsatzmöglichkeiten hierfür darstellen.

♦  So implementieren Sie die Snapshot-Synchronisation
  1. Lassen Sie die Uploadskripten undefiniert, außer wenn entfernte Benutzer die Werte aktualisieren.

  2. Wenn in der Tabelle Zeilen gelöscht werden dürfen, schreiben Sie ein download_delete_cursor-Skript, das alle Zeilen oder zumindest alle nicht mehr benötigten Zeilen aus der entfernten Tabelle löscht. Sie sollten nicht die Zeilen aus der konsolidierten Datenbank löschen, sondern diese vielmehr für einen Löschvorgang kennzeichnen. Sie müssen die Zeilenwerte kennen, um diese aus der entfernten Datenbank löschen zu können.

    Weitere Hinweise finden Sie unter download_delete_cursor-Skripten schreiben.

  3. Schreiben Sie ein download_cursor-Skript, das alle Zeilen auswählt, die Sie in die entfernte Tabelle einbeziehen wollen.

Zeilen löschen

Sie sollten aber nicht die Zeilen aus der konsolidierten Datenbank löschen, sondern diese vielmehr für einen Löschvorgang kennzeichnen. Sie müssen die Zeilenwerte kennen, um diese aus der entfernten Datenbank löschen zu können. Wählen Sie mit dem download_cursor-Skript nur die nicht markierten Zeilen und mit dem download_delete_cursor-Skript nur die markierten Zeilen aus.

Das download_delete_cursor-Skript wird vor dem download_cursor-Skript ausgeführt. Wenn eine Zeile in den Download einbezogen werden soll, brauchen Sie keine Zeile mit demselben Primärschlüssel in die Löschliste aufzunehmen. Wenn eine Downloadzeile am entfernten Standort empfangen wird, ersetzt sie eine vorhandene Zeile mit demselben Primärschlüssel.

Weitere Hinweise finden Sie unter Skripten für den Download von Zeilen schreiben.

Alternatives Löschverfahren

Anstatt die Zeilen einer entfernten Datenbank mit einem download_cursor-Skript zu löschen, können Sie auch der entfernten Anwendung gestatten, den Löschvorgang durchzuführen. So können Sie möglicherweise unmittelbar nach der Synchronisation der Anwendung gestatten, einige SQL-Anweisungen auszuführen, mit denen die nicht mehr benötigten Zeilen gelöscht werden.

Die von der Anwendung gelöschten Zeilen werden bei der nächsten Synchronisation ganz normal an den MobiLink-Server übertragen. Sie können dies aber verhindern, indem Sie die Anweisung STOP SYNCHRONIZATION DELETE ausführen. Zum Beispiel:

STOP SYNCHRONIZATION DELETE;
DELETE FROM table-name
 WHERE expiry_date < CURRENT TIMESTAMP;
COMMIT;
START SYNCHRONIZATION DELETE;

Weitere Hinweise finden Sie unter download_delete_cursor-Skripten schreiben.

Snapshot-Beispiel

Die Tabelle ULProduct in der Beispielanwendung wird durch Snapshot-Synchronisationen gewartet. Die Tabelle enthält relativ wenige Zeilen und aus diesem Grund gibt es wenig Overhead bei der Snapshot-Synchronisation.

  1. Es gibt kein Uploadskript. Dies spiegelt die Geschäftsentscheidung wider, dass in den entfernten Datenbanken keine Produkte hinzugefügt werden können.

  2. Es gibt kein download_delete_cursor-Skript, da davon ausgegangen wird, dass Produkte nicht aus der Liste gelöscht werden.

  3. Das download_cursor-Skript wählt den Produktbezeichner, den Preis und den Namen jedes aktuellen Produkts aus. Falls das Produkt bereits vorhanden ist, wird der Preis in der entfernten Tabelle aktualisiert. Ist das Produkt neu, wird eine Zeile in die entfernte Tabelle eingefügt.

    SELECT prod_id, price, prod_name
    FROM ULProduct

Ein weiteres Beispiel der Snapshot-Synchronisation in einer Tabelle mit wenigen Zeilen finden Sie unter Vertriebsmitarbeiter im Beispiel Contact synchronisieren.