現在、まったく同じ要件と問題を抱えたモバイル/デスクトップ/分散アプリで作業しています。
まず、これらの要件はモバイルアプリ自体に固有のものではなく、非接続/分散型のクライアントサーバートランザクション(並列プログラミング、マルチスレッド、要点)に固有のものです。それ自体はもちろん、モバイルアプリで対処する典型的な問題です。
一般に、これがすべて要約すると、n個のクライアントに配布される潜在的なデータレコードがあり、それらのクライアントが同時に編集する可能性があるということです。必要なのは
- 適切なバージョン管理/ロック機構、
- 適切な権利/アクセス管理、
- 適切な同期/キャッシュ戦略
(1)には、いくつかのパターンを適用できます。2つの頻繁に使用されるロック戦略があります:Optimistic Offline Lockingと Pessimistic Offline Lockingです。これらのいくつかは、レコードが変更されるたびに更新されるすべてのデータレコードにカウンター(非常に単純な「タイムスタンプ」の一種)を使用するMultiVersion Concurrency Control(MVCC)など、異なるバージョン管理「パターン」で適用されます。。
(2)と(3)はそれ自体非常に広範な問題であり、(1)とは別に対処する必要があります。私の経験からのアドバイス:
ほとんどの問題を抽象化するクライアントサーバー技術を使用してください。(1)Optimistic Offline Locking + MVCCを介して、(2)Web APIを介して、(3)Httpキャッシングを非常にうまく処理するCouchDbなどのWebテクノロジーを強くお勧めします。
実績のある技術とアプローチに頼ることができるなら、自分で物事を発明しないようにしてください。既存のテクノロジー/パターンの調査と比較に費やした時間は、独自のシステムを実装しようとするよりもはるかに優れていると思います。
可能であれば、同種の技術を使用してください。「同種」とは、同じ原則を念頭に置いて構築された技術、たとえばWeb 2.0の使用シナリオを意味します。例:ローカルキャッシュ戦略で適切なCouchDbおよびRESTクライアント(Web API)を使用することは、モバイルアプリにSQLを使用するよりも良い選択です。
MySQLはこのような使用シナリオ向けに明示的に作成された技術ではないため、MySQLの使用には強くお勧めします。動作しますが、すでにWeb通信と同時実行スタイル(多くのNoSQLデータベースなど)を採用しているデータベースシステムの方がはるかに優れています。
ところで、私はCouchDb APIに対して動作するカスタムローカルクライアントでCouchDbに落ち着きました。私はMSQL +(N)Hibernateの使用から切り替えて、そもそも正しい選択を行わなかった(十分な調査を行っていないことを意味する)ために高い代償を払った。