7.3.3 ダウンロードストリーム
download_cursor
download_cursorは、ダウンロードストリームを作り出すスクリプトである。ここに書かれたSQL文が統合データベース上で実行され、その結果セットがリモートデータベースに返信される(図7.12)。

先の例では、次のようにproductテーブルの全行を取得するSQL文になっている。よって、同期時には、productテーブル全体がリモートデータベースに返信される。
SELECT product_id, quantity FROM product
同期クライアントは、受信した行とリモートデータベース上の行とを(主キーで)比較し、既存の行があれば受信した行で更新し、なければ受信した行を追加する。
カラムによる絞り込み
download_cursorの結果セットにあるカラムだけがダウンロードされる。例ではもともと2つしかカラムがなかったので判別しづらかったが、たとえば、統合データベースのproductテーブルが4つのカラムを持っていて、リモートデータベースのものよりも多いとすると、次のようになる。
- 統合データベース ―― product_id, quantity, product_name, price
- リモートデータベース ―― product_id, quantity
これらを同期するためのdownload_cursorスクリプトのSQLは、次のものでよい。
SELECT product_id, quantity FROM product
行による絞り込み
SELECT文でWHERE条件を追加して、特定のデータだけをダウンロード対象としてもよい。たとえば、在庫数の小さなものだけダウンロードしたいならば、以下のようにする。
SELECT product_id, quantity FROM product WHERE quantity < 100
7.3.4 ダウンロード時のプレースホルダ
アップロード時のスクリプトでは、アップロードされるデータをプレースホルダとして指定できた。一方、ダウンロード時のスクリプトにもプレースホルダがあり、Mobile Linkの機能によって定められた値に置換される。
ダウンロード時のスクリプトでは、3つのプレースホルダが利用可能だ(表7.2)。
| プレースホルダの順番 | 内容 |
| 1番目 | 前回同期成功時刻(ダウンロード時刻) |
| 2番目 | Mobile Linkユーザ名 |
| 3番目 | 同期テーブル名 |
Mobile Linkユーザ名を利用する例を見ていこう。ここで各リモートデータベースは、自身のMobile Linkユーザに関連するデータのみを持つとする(※2)。Mobile Linkユーザ名で条件付けすることで、テーブルすべてのデータではなく、リモートデータベース(=Mobile Linkユーザ)ごとに必要なデータを絞り込める。たとえば、統合データベース上に顧客テーブルがあり、Mobile Linkユーザごとに顧客が分かれているとする(図7.11)。

download_cursorスクリプトは、次のようになる。
SELECT CustomerID, CustomerName FROM Customer WHERE ? IS NOT NULL --1つ目のプレースホルダ:最終同期時刻 AND mluser = ? --2つ目のプレースホルダ:Mobile Link ユーザ名
この例では最終同期時刻の値は利用しないのだが、プレースホルダは表の順番通りに置換されるため、2番目の同期ユーザ名を利用するには、1番目のプレースホルダも書いておく必要がある。そこで、NULLと比較するダミーの条件を置いた。
7.3.5 Javaや.NETによる同期ロジック
本書では同期ロジックとしてSQL文やストアドプロシージャを使用するが、Javaや.NETでも同期ロジックを記述できる。Javaや.NETで書く利点としては、言語が持つライブラリを利用して複雑なロジックを構築できる点だ。本書ではコーディングに触れないが、「7.4.6 同期ユーザのカスタマイズ認証」で、外部システムと連携する設定例を紹介する。
この記事は参考になりましたか?
- SQL Anywhereの魅力を探る連載記事一覧
-
- SQL Anywhereのインストールと概要 (SQL Anywhere 11対応版)
- いつでもどこでも使えるデータベース 「SQL Anywhere」 (SQL Anywher...
- SQL Anywhereにおける同期処理の基礎
- この記事の著者
-
森脇 大悟(モリワキ ダイゴ)
1974年生まれ。神奈川県川崎市出身。京都大学理学部物理学科卒業。同大学院 修士課程中退後、有限会社グルージェント(現・株式会社グルージェント)入社。SIとして金融や物流システムを手がける。2003年アイエニウェア・ソリューションズ株式会社入社。エンジニアとして製品の導入支援やコンサルティング業務に...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
