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

SQL Anywhere 11.0.1 (日本語) » Mobile Link - サーバ管理 » Mobile Link サーバ・テクノロジの使用 » 同期の方法

 

スナップショットを使った同期

ほとんどの同期には、タイムスタンプベースの同期が適しています。ただし、スナップショットによってデータの更新をしたい場合も考えられます。

スナップショットを使ってテーブルを同期する場合、テーブルのローのうちで関係するローすべてを完全にダウンロードします。すでにダウンロード済みのローもダウンロードされます。この方法が最も簡単ですが、不必要に大量のデータ・セットが交換されるため、パフォーマンスが悪くなります。

スナップショットを使った同期によって、テーブルのすべてのローをダウンロードできます。また、ローの分割方法と組み合わせて実行することもできます。リモート・データベース間でのローの分割を参照してください。

スナップショットを使った同期をいつ行うか

通常、次の特徴を両方満たすテーブルに対してスナップショットを使用すると最も有効です。

  • ロー数が比較的少ない   ローの数が少ない場合は、ローを全部ダウンロードしても大きなオーバーヘッドにはなりません。

  • 頻繁にローが変更される   テーブルのほとんどのローが頻繁に変更される場合は、前回の同期の後で変更されていないローを明示的に除外してもあまり効果はありません。

テーブルの内容が為替レートのリストになっている場合は、通貨の種類はそれほど多くないので、この方法が適しています。また、ほとんどのレートは頻繁に更新されます。ビジネスの性質によって、価格、利率のリスト、または最新ニュース項目といった内容を含むテーブルが考えられます。

♦  スナップショットベースの同期を実装するには、次の手順に従います。
  1. リモート・ユーザが値を更新しない場合は、アップロード・スクリプトを未定義のままにしておきます。

  2. テーブルのローを削除する場合は、リモート・テーブルのローをすべて削除する download_delete_cursor スクリプトを作成するか、少なくともすべてのローがもう必要ないことを定義します。統合データベースからローを削除しないで、削除のマークを付けてください。ローの値を知らないと、リモート・データベースからローを削除できません。

    download_delete_cursor スクリプトの作成を参照してください。

  3. download_cursor スクリプトを作成し、リモート・テーブルに登録するローをすべて選択します。

ローの削除

統合データベースからローを削除しないで、削除のマークを付けてください。ローの値を知らないと、リモート・データベースからローを削除できません。download_cursor スクリプトの場合はマークなしのローだけを、download_delete_cursor スクリプトの場合はマーク付きのローだけを選択します。

download_delete_cursor スクリプトは、download_cursor スクリプトより先に実行されます。ダウンロードにローが含まれる場合は、同じプライマリ・キーを持つローを削除リスト内に含める必要はありません。ダウンロードしたローをリモート・ロケーションで取得するときに、同じプライマリ・キーを持つ既存のローは置き換えられます。

ローをダウンロードするスクリプトの作成を参照してください。

別の削除方法

リモート・データベースからローを削除する場合、download_cursor スクリプトを使わなくても、リモート・アプリケーションを使ってローを削除できます。たとえば、同期のすぐ後に、アプリケーションで SQL 文を実行して不要なローを削除できます。

アプリケーションによって削除されたローは、通常は次回の同期で Mobile Link サーバにアップロードされますが、STOP SYNCHRONIZATION DELETE 文を使って、アップロードされないようにできます。次に例を示します。

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

download_delete_cursor スクリプトの作成を参照してください。

スナップショットの例

サンプル・アプリケーションの ULProduct テーブルは、スナップショットを使った同期によって管理されます。テーブルに入っているローの数は比較的少ないため、スナップショットを使った同期でのオーバヘッドがわずかです。

  1. アップロード・スクリプトがありません。これは、リモート・データベースでは製品情報を追加できないという業務意思を反映しています。

  2. download_delete_cursor スクリプトがないため、リストから製品を削除しないものと見なします。

  3. download_cursor スクリプトによって、現在のすべての製品に関して、prod_id、price、prod_name が選択されます。既存の製品の場合は、リモート・テーブル内のその製品の価格が更新されます。新しい製品の場合は、リモート・テーブルにローが挿入されます。

    SELECT prod_id, price, prod_name
    FROM ULProduct

ローの数が極めて少ないテーブルでのスナップショットを使った同期の別の例については、Contact サンプルの営業担当者の同期を参照してください。