SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

SQL Anywhereの魅力を探る

SQL Anywhereにおける同期処理の基礎

SQL Anywhereの魅力を探る 8


  • このエントリーをはてなブックマークに追加

7.3.3 ダウンロードストリーム

download_cursor

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

図7.13 : download_cursorイベント
図7.13 : download_cursorイベント

 先の例では、次のようにproductテーブルの全行を取得するSQL文になっている。よって、同期時には、productテーブル全体がリモートデータベースに返信される。

download_cursorのSQL文(再掲)
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)。

表7.2 : download_cursorスクリプトのプレースホルダ
プレースホルダの順番 内容
1番目 前回同期成功時刻(ダウンロード時刻)
2番目 Mobile Linkユーザ名
3番目 同期テーブル名
 同期テーブル名を示す3番目のプレースホルダは、download_cursorイベントを含む一部のイベントでは使用できない。

 Mobile Linkユーザ名を利用する例を見ていこう。ここで各リモートデータベースは、自身のMobile Linkユーザに関連するデータのみを持つとする(※2)。Mobile Linkユーザ名で条件付けすることで、テーブルすべてのデータではなく、リモートデータベース(=Mobile Linkユーザ)ごとに必要なデータを絞り込める。たとえば、統合データベース上に顧客テーブルがあり、Mobile Linkユーザごとに顧客が分かれているとする(図7.11)。

図7.14 : Mobile Linkユーザごとにダウンロードする例
図7.14 : Mobile Linkユーザごとにダウンロードする例
※2
 このような仮定はMobile Linkの利用では一般的だ。本章の最初で適用例を挙げたように、営業スタッフは自身の顧客データのみに関心がある。

 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 同期ユーザのカスタマイズ認証」で、外部システムと連携する設定例を紹介する。

次のページ
7.3.6 同期イベント

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
SQL Anywhereの魅力を探る連載記事一覧

もっと読む

この記事の著者

森脇 大悟(モリワキ ダイゴ)

1974年生まれ。神奈川県川崎市出身。京都大学理学部物理学科卒業。同大学院 修士課程中退後、有限会社グルージェント(現・株式会社グルージェント)入社。SIとして金融や物流システムを手がける。2003年アイエニウェア・ソリューションズ株式会社入社。エンジニアとして製品の導入支援やコンサルティング業務に...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1928 2008/09/04 13:17

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング