これは、概念的な問題ではなく、必ずしも特定のテクノロジに束縛されていません。 サーバー上にデータベースがあり、そのデータベースのコンテンツにアクセスするいくつかのREST/JSON APIと、APIで取得したデータを表示するモバイルクライアントがあるとします。サーバーからクライアントへの部分的なデータベースモデルの同期
クライアントにいくつかのキャッシュメカニズムがあり、クライアントが読んでいる間だけデータにオフラインでアクセスできるようにするのもいいでしょう。(私の場合は、オフラインクライアントへの書き込みアクセスを拒否するのもいいです起こりうる厄介な葛藤をすべて管理する必要はありません)。
これを解決する良い方法は、クライアントにサーバーデータベースモデルのサブセットを用意し、サーバーからクライアントにデータを同期させることです。 ローカルデータベースにアクセスすると、すぐに結果が返されますが、サーバーへの更新要求もトリガーされます。サーバが変更されたデータを返す場合、クライアントモデルはそれをローカルデータベースと同期させ、データ変更の表示を通知する。
もちろん、最終的な目標は、インターネット接続の安定性に関係なく情報を参照できることです。ユーザーがデータを変更しない限り、接続ダイアログなどで迷惑をかけることはありません。
実装の観点から...一方では、異なるベンダーのものである可能性があるため、サーバーデータベースをクライアントデータベースに直接接続することは悪い考えです。少なくとも、両方のデータベースの実装よりもベンダーに依存しないモデルが必要であると思います。一方、サーバー・データベースから何らかのトランスポート・フォーマットにデータを変換し、それをクライアント・データベースに戻すよりも、オーバーヘッドのように思えます。
どのようにエレガントで維持可能な方法でそれを解決するための提案はありますか?
私は、上記の2つの選択肢の1つをJohnが強くお勧めします。 GCMは、Androidに組み込まれているために推奨されます。しかし、プロジェクトのニーズがGCMのルートを満たせない場合、最初の選択肢は残っています。 –
私は最初のオプションが嫌いです。これはユーザーが決して見ることのできないデータを更新する可能性があるためです。 GCM私は軽量の通知を含める予定ですが、それを使ってデータベースの更新をトリガーするのは、私の場合は無駄かもしれません。また、プッシュサービスはベンダー特有のものだと思われるので、携帯電話プラットフォーム全体でどれくらいうまく動作するかはわかりません。この第3の選択肢についてどう思いますか?使用法に基づいてローカルデータベースを更新します。データがローカルにアクセスされると、ローカル結果が直ちに返されることがありますが、サーバーへの要求も同じデータに対して送信されます – mibollma