Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

SQL Anywhereの魅力を探る 8

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/12/07 16:25

SQL Anywhereは、組込み・中小規模ビジネス・モバイル分野などで特に普及している、省リソースで高速な処理を実現するリレーショナルデータベースです。この連載では、その魅力を紹介していきます。第8回は、同期ロジックの基礎的な実装方法について紹介します。

目次

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つの項目がある。

表7.1 : ml_add_table_scriptの引数
引数名 説明
スクリプトバージョン 複数のスクリプトをグループ化するグループ名(※1
テーブル名 パブリケーションで指定した同期対象のテーブル名。リモートデータベースの各テーブルに対して一致したものが実行される
同期イベント名 SQLスクリプトが実行されるための同期イベント
SQLスクリプト SQLで書かれた同期ロジック
※1
 「バージョン」という言葉が入っているので誤解されやすいが、グループ化する文字列である。数字にする必要もないし、どれかが古くてどれかが新しいという意味もシステム上はない(ユーザがそのように意味付けするのは自由)。同期クライアントでスクリプトバージョンを指定して同期することで、同期ロジックを同期ごとに切り替えることができる。
upload_insertスクリプト(再掲)
CALL ML_ADD_TABLE_SCRIPT( 
'default',        --スクリプトバージョン
'product',        --リモートデータベースのテーブル名
'upload_insert',  --リモートデータベースでINSERTされた行を
                  --アップデータさせるためのイベント
   'INSERT INTO product (product_id, quantity)
    VALUES (?, ?)'  --統合データベース上で実行されるSQL文
);

 Mobile Linkでは同期対象のテーブル名を統合データベースとリモートデータベースとで同一にする必要はないので、統合データベースではなくリモートデータベースのテーブル名を指定する。このテーブル名がパブリケーションに含まれていれば、同期時のイベントに従ってSQLスクリプトが実行される(このSQL内で統合データベースのテーブル名を指定する)。

 では、4つの同期イベント名に対応するSQLスクリプトの解説に入ろう。

Sybase Centralによるスクリプトの登録
 Sybase Centralを用いてGUIでスクリプトを登録することができる。Mobile Linkの統合データベースに対する設定は、Mobile Linkプラグイン経由で行うので注意してほしい。
図7.11 : Sybase Centralによるスクリプトの登録
図7.11 : Sybase Centralによるスクリプトの登録

7.3.2 アップロードストリーム

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

図7.12 : upload_insert・upload_update・upload_deleteイベント
図7.12 : upload_insert・upload_update・upload_deleteイベント

upload_insertイベント

upload_insertのSQL文(再掲)
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イベント

upload_updateのSQL文(再掲)
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イベント

upload_deleteのSQL文(再掲)
DELETE FROM product
 WHERE product_id = ?

 WHERE句には主キーを含める。削除された行の主キーが自動的に置換される。


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

著者プロフィール

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

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

バックナンバー

連載:SQL Anywhereの魅力を探る

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5