Mobile
Link テクノロジの概要
Mobile Link は、SQL Anywhere
製品に含まれています。リレーショナル・データベースおよびその他の非リレーショナルなデータ・ソースの間でデータを交換するためのセッションベースの同期テクノロジです。Mobile
Link を使用すれば、数万ユーザを 1
つのエンタープライズ・システムと同期できますが、一方でサーバが小型で簡単に配備できるので、リモート・サイトや、1 ユーザまたは
2 ユーザのシナリオでも運用可能です。
高度な同期論理を使用することで、ネットワーク接続が失われた場合でもデータベースのトランザクション単位の整合性を確保でき、データ変更における競合を高性能な技術で解決することができます。
Mobile Link
は、高レベルの統合機能を提供します。標準設定のままで多くのエンタープライズ・データベースをサポートできるほか、オブジェクトベースのデータ・フロー
API を使用することによってアプリケーション・サーバ、SAP などの ERP
システム、Web サービス、XML
ファイルなどの非リレーショナルなデータ・ソース、またはその他のサード・パーティ製のリレーショナル・データベースとの同期を行うことができます。
SQL Anywhere
業界最先端のフロントライン環境向けデータベース管理およびデータ移動テクノロジ
データ管理およびデータ交換テクノロジを提供する包括的なパッケージである SQL Anywhere®
は、データベースを活用するアプリケーションを短期間で開発し、配備することを可能にします。SQL Anywhere
は、数千人規模のユーザを処理する 64
ビット・サーバから小型のハンドヘルド機器まで幅広く対応できるエンタープライズ・レベルのデータベースです。そのデータ交換テクノロジは、企業アプリケーションやエンタープライズ・システム内に存在する情報を、ミッションクリティカルなフロントライン環境で稼働するデータベースに届けることを可能にします。SQL
Anywhere
に組み込まれている設計ツールや管理ツールを使用すれば、開発者がフロントライン・アプリケーションを実装および配備し、設備管理者がそれらの管理およびサポートを容易に行うことができます。企業が競争上の優位性や成長性を高める新たな方法を模索する中で、フロントラインはミッションクリティカルなコンピューティング環境へと発展しています。受賞実績のある
iAnywhere
のソリューションは、フロントライン・アプリケーションがサーバ、デスクトップ、リモート、またはモバイルのどこで稼働する場合も、従来の企業のデータ・センタ内で稼働するアプリケーションと同様の信頼性、安全性、および可用性を提供できるように、一から開発されています。
- 「Intuit は、QuickBooks
エンタープライズ・ソリューションを強化するデータベースとして SQL Anywhere
を採用し、アプリケーションの処理速度とスケーラビリティを大幅に改善することができました。SQL Anywhere
のおかげで、当社の中規模市場のお客様が重視するパフォーマンス、使いやすさ、そして信頼性が実現しています。」
QuickBooks Group、製品開発担当副社長、Pankaj
Shukla
- 「SQL Anywhere は当社の業務になくてはならない存在です。SQL
Anywhere
が提供するプラットフォームは、モバイル環境で動作するだけでなく、非常に大規模なデータベースにも対応します。実際、この最新テクノロジは、IT
スタッフがいる大規模な代理店だけでなく、IT スタッフがいない小規模な代理店にも提供できます。」
HealthWyse LLC、博士・CEO・代表取締役、Michael
R. Kramer
- 「SQL Anywhere
を利用することで、他の製品を使用するよりもはるかに簡単にデータ同期コンポーネントを開発でき、最終的にはるかに優れた機能を実現できることがわかりました。」
Aumen Consulting、社長、Bill Aumen
データベース同期
同期とは、Mobile Link
クライアントと同期サーバとの間で行われるデータ交換処理です。同期中は、クライアントは同期サーバとのセッションを確立して維持する必要があります。セッションが正常終了したとき、リモート・データベースと統合データベースは相互に整合した状態になっています。
同期は、通常は Mobile Link リモート・クライアントが Mobile
Link 同期サーバへの接続を開いたときに開始されます。同期中は、Mobile Link
クライアントが前回の同期以降にリモート・データベースに対して行われたデータベースの変更をアップロードします。このデータを受信した
Mobile Link 同期サーバは、統合データベースを更新し、統合データベースの変更内容をリモート・データベースにダウンロードします。
企業のフロントラインを Microsoft SQL Server
データベースのデータと同期することによって、社外にいるスタッフおよびリモート・オフィスや支店にいるスタッフは、ネットワークに常時接続していなくても、企業データにアクセスし、操作することができます。その結果、フロントライン環境のネットワーク接続に関連して頻繁に発生するコストや技術的な問題が大幅に減少し、リモート・オフィスのスタッフの生産性が維持されることが保証されます。
Mobile Link
の利点
Mobile Link
はセッションベースの同期システムです。統合データベースと呼ばれるメイン・データベースと多数のリモート・データベースとの間で双方向に同期できます。ODBC
準拠のデータベースを使用した統合データベースには、すべてのデータのマスタ・コピーが保持されます。
Mobile Link では、標準で以下のデータベースがサポートされています。
- SQL Anywhere Server
- Sybase ASE
- Oracle (RAC サポートを含む)
- IBM DB2
- SQL Server
- MySQL
- JMS ベースのメッセージング・システムとアプリケーション・サーバ
Mobile Link が提供する同期機能の一部を以下に示します。
- 双方向のデータベース同期
- TCP/IP、HTTP、HTTPS、Palm
Hotsync、ActiveSync 経由の同期
- ローおよびカラム単位のデータのサブセット
- ファイル転送
- サーバ起動同期
- プッシュ型の通知
- 高度な競合検出
- SQL、.NET、または Java
でプログラム可能な競合解決
- 優先順位に基づく同期
- データの暗号化
- ブロードキャスト・ダウンロード
今日ではデータ・レプリケーションおよび同期を実行するさまざまな製品が市販されており、SQL Server
データベースからデータを同期する場合に最適なテクノロジを選択するのは非常に困難です。以下の項では、データ同期テクノロジを選択する際に考慮すべき点について説明します。
効率的なデータ取得
Mobile Link
は、リモート・データベースで行われた変更をトランザクション・ログから直接取得することができます。トランザクション・ログを使用することによって、同期システムは、サーバに送信する変更内容を効率的にパッケージ化することができます。必要なのは、トランザクション・ログをスキャンして、前回の同期以降に発生したすべての内容を取得する処理だけです。さまざまな変更取得テーブルに対して複雑なクエリを使用して情報をパッケージ化する必要はありません。
複数
OS のサポート
デバイスは絶えず変化します。数年前はモバイル開発に使用する OS と言えば
Palm でしたが、今日では Windows Mobile Smartphone
が主流になりつつあります。同期ソリューションを選ぶ場合、サポートするデバイスとオペレーティング・システムの範囲が広いソリューションを検討することが重要です。Mobile
Link を使用すれば、Windows Mobile、Palm、Symbian、Windows、Linux、Mac
OS X など、ほとんどすべての主要なデバイスおよびオペレーティング・システム上でリモート・データベースが稼働します。
多機能なデータ・ストア
Mobile Link はリモート・データベースとして SQL Anywhere
をサポートしているので、使い慣れているエンタープライズ・データベースの機能をすべて使用でき、モバイル・データベースにアクセスするために大幅にコードを書き換える必要がありません。また、SQL
Anywhere
には完全なデータベース・オプティマイザが含まれているので、アプリケーションは引き続き複雑なデータベース・クエリを使用して直ちに結果を得ることができます。
配備のスクリプト化
プロトタイプを短時間で作成するには、グラフィカル・ユーザ・インタフェースは非常に便利です。しかし、プロトタイプが完成した後は、管理者が多数のリモート・ユーザに配備するための機能が必要です。SQL
Anywhere
には、グラフィカル・ユーザ・インタフェースで実行できるすべての手順に、対応する実行プログラムが存在します。したがって、ユーザ・インタフェースで実行するすべての手順を、バッチ・ファイルを使用してユーザ・インタフェース以外の場所で再現できます。また、インタフェースで実行されるすべての文をファイルに記録できるので、その環境を管理者が必要に応じて再現することが可能です。
データの優先同期
優先同期により、ユーザ (またはモバイル・アプリケーション)
は、ネットワークの接続性に基づいてさまざまなデータ・サブセットの同期タイミングを自主的に制御できます。優先同期には、主に以下のような利点があります。
- ネットワーク帯域幅の使用率を最大化できます。
- 特定のデータ変更の同期を 1
日のうちのさまざまな時間に実行できます。サーバのパフォーマンスに与える影響を最小限にするために「ピーク時以外」の時間にデータを同期するといった便利な使い方ができます。
-
同期の所要時間を最適化できます。これは、ユーザができるだけ早く情報を取得する必要がある場合、非常に重要な機能です。
Mobile Link
では、データを複数のパブリケーションに分割できます。これによって、アプリケーションまたはユーザがデータを同期する順序を制御できます。
高度な競合検出および競合解決
Mobile Link
は、高度な競合解決処理を提供します。デフォルトでは、最後に変更を行ったユーザが競合に勝ち、最初に変更を行ったユーザは更新された情報を受け取ります。ただし、Mobile
Link
では、競合処理をカスタマイズしてさまざまな競合メカニズムを使用できます。たとえば、あるテーブルでは最後に変更を行ったユーザが勝ち、別のテーブルでは最初に変更を行ったユーザが勝つようにすることができます。あるいは、ビジネス・ルールに従って各ユーザが入力した値をマージしなければならない場合もあります。
リモートでのスキーマ・アップグレード
Mobile Link
を使用する場合、ツールがリモート・データベース・エンジンに直接組み込まれているため、スキーマの変更が可能です。同期の際、スキーマ・アップグレード用のストアド・プロシージャをデータベース内で実行することにより、リモート・データベースを変更できます。スキーマを変更するためにリモート・デバイスにデータを再配布する必要はありません。また、変更を自動化することもできます。さらに、Mobile
Link
にはスクリプト・バージョンという概念があり、管理者は、少しずつ小規模のユーザ・グループに対してスキーマ・アップグレードを適用しながら、新しいスキーマを使用するユーザと古いスキーマを使用するユーザを同一
Mobile Link サーバ上で管理できます。
サーバからリモートへの高度なテーブル・マッピング
エンタープライズ・データベース・サーバで複数のテーブルをジョインするクエリを実行しても、通常はパフォーマンスが明らかに低下することはありません。しかし、リモート・システムで実行した場合は、パフォーマンスが目に見えて低下する可能性があります。この場合、アプリケーションのパフォーマンスを向上させる
1
つの方法として、サーバ側で複数のテーブルをジョインしてリモート側の単一テーブルに書き込む方法があります。この方法は、データの非正規化と呼ばれます。Mobile
Link
には、このような非正規化が可能な、サーバからリモートへの高度なテーブル・マッピング・システムが組み込まれています。さらに、非正規化されているテーブルに対する変更をトラッキングし、中央の
(正規化されている)
データベース・テーブルに適用することもできます。したがって、統合データベースとリモート・データベースで異なるスキーマを使用できます。
複数のデータ・ソースの結合
多くの場合、リモート・ユーザに送信する必要のあるデータは、複数の企業データベースに散在しています。Mobile
Link は、同期論理を多数のデータ・ソースにマッピングできます。たとえば、Sybase、Oracle、Microsoft、IBM
などのさまざまなリレーショナル・データ・ソース、SAP や Siebel
などのアプリケーション・サーバ、および Web サービスなどの SOA (Service Oriented
Architecture :サービス指向アーキテクチャ)
からのマッピングが可能です。異なるデータ・ソースをマッピングできることは、企業合併の際にも役立ちます。Mobile Link
を使用すれば、2
つの異なるデータベース・システムのデータをすぐに結合する必要はなく、あるデータベースの一部のデータはあるユーザ・グループに、別のデータは別のユーザ・グループに、それぞれ送信することができます。
既存のビジネス論理との統合
Mobile Link は、同期中の任意のタイミングで、カスタマイズされた
.NET または Java
論理を呼び出すことができます。言い換えると、個々のアプリケーション・サーバに企業のビジネス論理が存在する場合は、それに基づいてデータをフィルタしてから、中央のデータ・ソースにデータの変更を適用することができます。したがって、ユーザ認証などの同期イベントのカスタマイズも可能です。
リモート・データベースの事前移植
リモート・データベース・システムに大量のデータが必要な環境では、初回同期時にすべてのデータをダウンロードするようにユーザに要求するのは非効率的です
(多くの場合費用もかかる)。それよりも、ユーザのデータベースに情報を事前移植してから配備すれば、ユーザが最初の同期を行うときには新たな変更が更新されるだけのため、はるかに効率的です。別の選択肢として、管理者が、共通情報
(製品価格リストなど) が格納されたテンプレート・データベースを 1
つ作成する方法もあります。このテンプレート・データベースは、すべてのリモート・ユーザが使用できます。同期時に、ユーザは、データベースに適用するユニークなデータのみをダウンロードします。
効率的なデータ転送
リモートと中央のデータベース・テーブルのマッピングは Mobile Link
サーバによって管理されるので、カラム名、データ型、または SQL
文を送信する必要はありません。必要なのは、実際のロー・データ、テーブル名、および更新前イメージだけです。更新前イメージとは、更新される前に存在したデータです。この更新前イメージは、競合発生時に使用されます。この効率性によりデータ・ストリーム全体のサイズを大幅に削減できることがテストによって示されています。
プッシュ同期
プッシュ同期は、中央のデータベース・サーバからリモート・データベースに情報を送信する機能です。サーバで重要なデータ変更が行われ、そのことを単一のユーザやユーザ・グループに通知する必要がある場合に重要な機能です。Mobile
Link を使用すれば、サーバからだけでなくリモートからでも同期を開始できます。Mobile Link
は、データ変更の影響を受けるユーザに警告を送信するか、または物理的にリモートで同期を開始して更新されたデータ・セットをダウンロードすることができます。ローカル・データベースが更新されていることにユーザが気付くことはほとんどありません。また、サーバ側でリモートのステータスおよびロケーションをトラッキングできる機能があります。ユーザがある場所から別の場所に移動する場合、サーバはユーザの移動中のアドレスをトラッキングし、ユーザが受信可能範囲内に戻るまで通知をキューに保存します。
ユーザ・ベースのサブスクリプション
Mobile Link
には、リモート・ユーザにダウンロードする情報を管理者が構成する際に使用できるさまざまな選択肢が用意されています。通常は単純にカラム値に基づいて
([State] が NY である場合など)
データを分割しますが、受信する情報をリモート・ユーザに選択させることもできます。この方法は、リモート・ユーザが特定の情報のサブスクライブを希望する場合に便利です。同様に、ユーザが情報を必要としなくなったときには、ローカル・データベースからデータを削除するだけで情報のサブスクライブを停止できます。Mobile
Link
では、これらの操作はすべて、サブスクリプション・テーブルとカスタマイズされた同期スクリプトを使用することによって簡単に実現できます。
システム
DSN の作成
MS SQL Server データベースに接続するには、それを参照するためのユーザ
ODBC データ・ソース名を作成する必要があります。以下のビデオでは、新しいユーザ DSN
を作成する手順がデモンストレーションされています。詳細な手順については、「How to Mobilize a SQL Server Database」 (英語)のホワイトペーパーの項を参照してください。ビデオを視聴するには、こちらをクリックしてください。
同期モデルの作成
Sybase Central には、同期モデルを作成、管理、および配備するための
Mobile Link
プラグインが付属しています。同期モデルは、統合データベースとリモート・データベースの間で同期する情報およびその方法を定義します。詳細な手順については、「How to Mobilize a SQL Server Database」 (英語)のホワイトペーパーの項を参照してください。ビデオを視聴するには、こちらをクリックしてください。
同期モデルの配備
Mobile Link プラグインを使用して、同期モデルを Microsoft
SQL Server データベースに自動的に配備できます。また、同期用の新しいリモート・データベースを作成したり、Mobile
Link サーバのインスタンスを起動するためのスクリプトを作成したりすることもできます。詳細な手順については、「How to Mobilize a SQL Server Database」 (英語)のホワイトペーパーの項を参照してください。ビデオを視聴するには、こちらをクリックしてください。
互換性のあるリモート・データベースの作成
Mobile Link
プラグインによって自動生成されたリモート・データベースは、そのままで同期に使用できます。ただし一般的には、実際のプロジェクトでは、リモート・データベース・スキーマを統合データベース・スキーマとより厳密に一致させる必要があります。そこで、以下の各項では、カラム・デフォルトの重複、外部キーの関係、トリガ、およびストアド・プロシージャについて詳しく説明します。リモート・データベースとして
SQL Anywhere
データベースを使用しているので、ストアド・プロシージャや集合関数など、豊富なデータベース機能を利用できることに注目してください。
データの同期
同期モデルが完成し、配備が完了したら、以下に示す簡単な手順で同期できます。
- 統合サーバで Mobile Link サーバを起動します。
- リモートで dbmlsync を実行します。
- 必要に応じて、統合データベースまたはリモート・データベースの一方を変更します。
- リモートで再び dbmlsync を実行します。
- 変更内容がもう一方のデータベースに同期されたことを確認します。
Microsoft SQL Server
固有の注意事項
Mobile Link ソフトウェアは、標準設定のままで Microsoft
SQL Server を始めとするさまざまなタイプのデータ・ソースに使用できます。同期モデルを作成する場合、既存の SQL
Server
データベース・スキーマを変更する必要は、あるとしてもごくわずかです。もちろん、すでにスキーマを設計または再設計する予定がある場合は、Mobile
Link ソフトウェアの利点を活用できるように、以下の項目に注意する必要があります。
具体的には、プライマリ・キー、タイムスタンプ・カラム、identity
カラム、および計算カラムの使い方に、特に注意する必要があります。
プライマリ・キーの一意性
分散データベースを設計する場合、複数のリモート・データベース全体でプライマリ・キーの一意性を維持するという課題があります。
ユニークなキーを持つ大量のリモート・データベースを維持する方法および Microsoft SQL
Server 統合データベース (およびその他の統合データベース)
と同期する新しいリモート・データベースを簡単に配備する方法の詳細については、『Primary Keys in a Distributed Database Environment』(英語)のホワイトペーパーを参照してください。
このホワイトペーパーでは、以下の項目について説明しています。
- グローバル・オートインクリメントの動作の概要
- リモート・スキーマ定義でグローバル・オートインクリメント・フィールドを使用する方法
- ユニークなキーを持つ新しいリモート・データベースを短時間で配備する方法
タイムスタンプ・カラム
同期の際にすべてのテーブルのすべてのローを削除して再び挿入するのは、無用で非効率的であることがほとんどです。通常必要とされるのは、前回の同期以降に行われた変更を同期することだけです。それには各ローの変更日時を記録する必要があり、複数のシャドー・テーブルを使用する方法とタイムスタンプ・カラムを使用する方法があります。
通常は、既存スキーマの変更を避けるために、シャドー・テーブルを使用します。変更または追加されたカラムのプライマリ・キー値は、セカンダリ・テーブル
(シャドー・テーブル)
にコピーされます。シャドー・テーブルの名前は、通常はオリジナル・テーブルの名前にシャドー・テーブルのタイプに応じて _mod
または _del
のどちらかのサフィックスを追加した名前になります。同期の際は、シャドー・テーブルを調べて、変更内容を取得します。この方法の利点は、既存のスキーマが変更されないことです。競合を避けるために、削除されたプライマリ・キーがその後再使用されないことを保証する必要があります。
もう 1
つの方法では、最終変更日時または挿入日時を専用のカラムに直接記録します。すべてのテーブルに最終変更カラムまたは ModifiedDate
カラムを追加して、デフォルトで変更日時 (default current timestamp)
が自動設定されるように指定します。この方法の利点は、別途シャドー・テーブルを作成または維持する必要がないことです。
Mobile Link
プラグインおよびウィザードを使用して同期モデルを配備すると、統合データベースにトリガが作成され、オリジナル・テーブルで変更が行われるたびにシャドー・テーブルまたはタイムスタンプ・カラムが最新の状態に保たれます。
論理削除カラム
Mobile Link
同期を使用する場合、統合データベース、任意のリモート・データベース、または両方のデータベースで行われた削除がもう一方のデータベースに伝達されるように、必要に応じて削除の同期が行われるという特徴があります。ただし、そのために削除を記録する必要があります。削除を記録するには、シャドー・テーブルを使用する方法と論理削除を使用する方法があります。
通常は、シャドー・テーブルを使用して、削除されたローを記録します。テーブルから削除されたローは要求どおりに削除され、そのローのプライマリ・キーのコピーがセカンダリ・テーブル
(シャドー・テーブル)
に保持されます。シャドー・テーブルの名前は、通常はオリジナル・テーブルの名前にサフィックスとして _del
が追加された名前になります。こうすることで、同期の際に、削除されたローのリストを取得できます。この方法の利点は、既存のスキーマや従属クエリが変更されないことです。ただし、誤って削除されることがないように、削除されたプライマリ・キーが再使用されないことを保証する必要があります。
もう 1
つの方法では、論理削除カラムを使用します。論理削除カラムは、ローに削除のマークが付けられているかどうかを記録する単純なビットまたはフラグです。こうすることで、同期の際に、削除されたローのリストを取得できます。この方法は、既存のスキーマを変更するだけでなく、すべての従属クエリを変更する
(WHERE 句を追加する)
必要があるので、通常は使用しません。また、この方法を使用する場合、ローが実際に削除されることはなく、(削除されたかどうかにかかわらず)
すべてのローにビット/フラグが追加されるので、より多くの空き領域が必要になります。
Mobile Link
プラグインおよびウィザードを使用して同期モデルを配備した場合、統合データベースにトリガが作成され、オリジナル・テーブルで削除が行われるたびにシャドー・テーブルまたは論理削除カラムが最新の状態に保たれます。
identity
カラム
Identity カラムは、Microsoft SQL Server
ネイティブのデータ・タイプで、カウンタ値を格納し、その後インクリメントするために使用します。多くの場合、プライマリ・キー・カラムとして使用されます。このデータ・タイプを使用すると、このカラムへの挿入または更新は禁止されます。たとえば、identity
カラムとして宣言されたカラムは、insert 文や update
文には使用できません。同期では、通常は統合データベースとリモート・データベースとの間ですべてのデータが一致することが要求されるので、問題が発生します。しかし、Identity
カラムを使用する必要がある場合または既存のスキーマを変更できない場合は、この問題を回避する方法はありません。
双方向に同期され、identity カラムが存在する統合テーブルの
upload_insert スクリプトには、以下のコードを記述する必要があります。このコードの基本的な動作は、identity
カラムの identity プロパティを一時的に無効にして挿入を可能にし、挿入が完了したら
identity プロパティを再度有効にして、identity カラムを元の値に戻すというものです。
BEGIN
DECLARE @originalid AS INT;
SET @originalid = IDENT_CURRENT([table]);
SET IDENTITY_INSERT [table] ON;
INSERT INTO [table] ( [columns] )
VALUES ( [values] )
SET IDENTITY_INSERT [table] OFF;
DBCC CHECKIDENT ('[table]', RESEED, @originalid)
END
計算カラム
Microsoft SQL Server
では、テーブルで計算カラムを使用できます。基本的には、テーブルの各ローの計算カラムで、指定された式による値の計算が行われます。値の計算は、挿入および更新の際に行われます。このテーブル・オブジェクトを使用することはおすすめしません。なぜなら、計算カラムに手動で挿入または更新することはできないからです。そのため、計算カラムは同期サブスクリプションの対象にできません。
統合データベースで使用されている式をリモート・データベースにコピーするだけで、同じ値をリモート・データベースでも取得できます。この場合、SQL
Anywhere データベースでは、カスタム・デフォルト式の設定が許されています。Microsoft SQL Server
と同じように挿入または更新の際に自動的に値が設定されますが、SQL Anywhere
データベースでは手動で挿入または更新することもできます。
同期モデルを作成する場合、双方向の同期を設定するテーブルでは、計算カラムが同期されないことを保証することが重要です。
また、シャドー・テーブルではなくタイムスタンプ・カラムを使用してローの追加または更新を記録している場合、自動配備は失敗します。これは、統合データベースには、ローの更新時にタイムスタンプ・カラムの値を更新するトリガが自動的に作成されるためです。このトリガは、テーブルの任意のカラムを更新したときに実行されるように設定されます。残念ながら、計算カラムの更新時にトリガを実行することは、Microsoft
SQL Server データベースではサポートされていません。したがって、そのようなトリガを作成できないので、配備は失敗します。
|