SQL Anywhereは、組込み・中小規模ビジネス・モバイル分野などで特に普及している、省リソースで高速な処理を実現するリレーショナルデータベースです。この連載では、その魅力を紹介していきます。第8回は、同期ロジックの基礎的な実装方法について紹介します。
- 第1回:いつでもどこでも使えるデータベース 「SQL Anywhere Studio」
- 第2回:SQL Anywhereのインストールと概要
- 第3回:SQL Anywhereのデータベース管理の基礎
- 第4回:SQL Anywhereでの主キー/スケジュール処理/暗号化
- 第5回:SQL Anywhereのデータベース再構築/アップデート
- 第6回:省リソースで軽快に動作する組込向けデータベース「Ultra Light」
- 第7回:モバイル環境に分散したデータを同期する「Mobile Link」
7.3 同期スクリプトと同期イベント
前節では4つの同期スクリプトが登場した。後述するようにほかにもいろいろな種類があるが、この4つがMobile Link同期の基本となる。
- upload_insert
- upload_delete
- upload_update
- download_cursor
名前が「upload_」から始まる3つがアップロード用のスクリプトで、download_cursorがダウンロード用のスクリプトだ。それぞれの意味を順に解説するが、その前に、スクリプトを登録する方法について説明する。
7.3.1 ml_add_table_scriptストアドプロシージャ
同期スクリプトの種類にかかわらず、同期スクリプトの登録はml_add_table_scriptストアドプロシージャを利用する。
ml_add_table_scriptの引数は4つの項目がある。
| 引数名 | 説明 |
| スクリプトバージョン | 複数のスクリプトをグループ化するグループ名(※1) |
| テーブル名 | パブリケーションで指定した同期対象のテーブル名。リモートデータベースの各テーブルに対して一致したものが実行される |
| 同期イベント名 | SQLスクリプトが実行されるための同期イベント |
| SQLスクリプト | SQLで書かれた同期ロジック |
CALL ML_ADD_TABLE_SCRIPT( 'default', --スクリプトバージョン 'product', --リモートデータベースのテーブル名 'upload_insert', --リモートデータベースでINSERTされた行を --アップデータさせるためのイベント 'INSERT INTO product (product_id, quantity) VALUES (?, ?)' --統合データベース上で実行されるSQL文 );
Mobile Linkでは同期対象のテーブル名を統合データベースとリモートデータベースとで同一にする必要はないので、統合データベースではなくリモートデータベースのテーブル名を指定する。このテーブル名がパブリケーションに含まれていれば、同期時のイベントに従ってSQLスクリプトが実行される(このSQL内で統合データベースのテーブル名を指定する)。
では、4つの同期イベント名に対応するSQLスクリプトの解説に入ろう。

7.3.2 アップロードストリーム
名前が「upload_ 」から始まる3つのスクリプトは、アップロードストリームに対する同期ロジックである。同期クライアントからMobile Linkサーバに送信されたアップロードストリームは、追加された行・更新された行・削除された行に仕分けされ、3つのスクリプトを雛形としたSQL文として統合データベースに送信される(図7.12)。

upload_insertイベント
INSERT INTO product (product_id, quantity) VALUES (?, ?)
スクリプト内の「?」はプレースホルダで、Mobile Linkサーバの機能により、アップロードされたデータに置き換わる。プレースホルダの順序は、リモートデータベースのテーブルにおいてCREATE文で定義された順序だ。
プレースホルダの置換を先の例で見ると、追加された「durian」に対し、upload_insertスクリプトを雛形として、次のSQL文が統合データベースへ送信される。
INSERT INTO product (product_id, quantity) VALUES ('durian', 40)
upload_updateイベント
UPDATE product SET quantity = ? WHERE product_id = ?
WHERE句には主キーを含め、それ以外のカラムをSET句で更新する。プレースホルダの置換は、主キーの選別も含めてMobile Linkサーバが自動的に行う。先の例では、「apple」のデータを更新したが、upload_updateスクリプトに従って、次のSQL文が統合データベースで実行される。
UPDATE product SET quantity = 11 WHERE product_id = 'apple'
upload_deleteイベント
DELETE FROM product WHERE product_id = ?
WHERE句には主キーを含める。削除された行の主キーが自動的に置換される。
この記事は参考になりましたか?
- SQL Anywhereの魅力を探る連載記事一覧
-
- SQL Anywhereのインストールと概要 (SQL Anywhere 11対応版)
- いつでもどこでも使えるデータベース 「SQL Anywhere」 (SQL Anywher...
- SQL Anywhereにおける同期処理の基礎
- この記事の著者
-
森脇 大悟(モリワキ ダイゴ)
1974年生まれ。神奈川県川崎市出身。京都大学理学部物理学科卒業。同大学院 修士課程中退後、有限会社グルージェント(現・株式会社グルージェント)入社。SIとして金融や物流システムを手がける。2003年アイエニウェア・ソリューションズ株式会社入社。エンジニアとして製品の導入支援やコンサルティング業務に...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
