高度なシナリオ
オフラインのユースケースの説明です。
完全オフラインアプリケーション
・サーバー接続無し
・プリロード:データ又はユーザー作成
→同期ではなく予めアプリケーションにデータを含ませる
・例:個人向け金融アプリケーション
サービスベースのアプリケーション
・バックエンドなし(管理用Webアプリなし)
・外部サービスを利用
・ローカルデータを持つ又は持たない
・例) Find My Plane
同期のメカニズム
ここでは
・サーバー→デバイスへのデータの転送をReceive(受信)
・デバイス→サーバーへのデータの転送をSend(送信)
と定義しています。
オフラインデータベースオブジェクトに同期に関するプロパティがあります。
・Data Synchronization criteria
・Minimum time between synchronizations
・Data Synchronization Granularity
・Local changes processing
Receive(受信)
・Data Synchronization Criteria(データ同期の条件)プロパティ
→Automatic(自動) / Manual(手動)
・Minimum time between synchronizations(自動時の同期間隔)プロパティ
・同期用API(手動用) : Synchronization.Receive()
・Data Synchronization Granularity(同期の粒度)プロパティ
→By Row(レコード単位) / By Table(テーブル)
By Table=テーブル単位はローカルテーブルを全レコード削除後、全レコードをサーバーからコピー
By Row=レコード単位はレコード単位で差をチェック、差分のみ同期する
・テーブルレベルでHashチェック
・もし違いがあればRowレベルでHashチェック
・もし違いがあればデータ同期
受信 : データのフィルタリング
・オフラインデータベースオブジェクトにコンディション定義
・ハッシュ計算の前にコンディションを適用(抽出されたデータのみ差違チェック)
・パラメーターに含められるもの
・デバイス情報
・GAMユーザー
送信:
・BCを使用
・SQLiteにて送信バッファ用テーブルを持つ
送信:タイミング
サーバーへの同期タイミングは2種類指定可能
・when connected (通信回線が接続された時 : auto)
・ユーザー定義 ( Synchronization.Send() : manual)
送信:キーマッピング
・自動生成キー(auto number)
・外部キーとして使用されていた場合
・サーバー側で値の変更
・レスポンスで更新
auto numberを使ったクライアント側プライマリーキーの同期の仕方(コンフリクトの避け方)
・クライアント側は仮の主キー(auto number)を発行
・サーバー側に送信された時(connectした時)、サーバー側でオリジナルのauto numberを発行
・外部キーとして使用されていた場合は、外部キー項目も更新
・正常更新後、クライアント側に発行されたキー値が戻されクライアント側のキーが更新される
・ローカルDBには即反映→サーバーへの操作(BCの操作)はキューイング
・サーバー側でキューの順序に従い、BCの操作を再現
・もし、ルールやRIでエラーが発生した場合は、クライアントへエラーが返る
送信:エラーハンドリング
・エラーレスポンス
・Synchronization Events API
0 件のコメント:
コメントを投稿