ローカルデータストレージにsqliteを使用するAndroidアプリとiPhoneアプリ(同じ機能)があります。アプリには最初はデータが付属していませんが、最初の実行時にリモートサーバーからデータを受信し、それをsqliteデータベースに保存します。sqliteデータベースはサーバーによって作成され、アプリはそれを1つのファイルとしてダウンロードし、アプリの購入に使用されます。データベースファイルは、今日の標準ではそれほど大きくはありませんが、小さなファイルでもありません(約5〜6 MB)。
現在、アプリはサーバーからのデータを更新する必要があります。私が考えることができるいくつかのアプローチがあります:
サーバーから新しい完全なデータベースをダウンロードし、既存のデータベースを置き換えます。これは、5〜6 MBのダウンロードを繰り返さない場合に、問題に対処する最も簡単な方法のように聞こえます。アプリはユーザーにアップデートをダウンロードするかどうかを尋ねるので、これはそれほど問題ではないかもしれません。
サーバーからデルタデータベースをダウンロードします。このデータベースには、新規/変更されたレコードと、削除するレコードに関する情報が含まれています。これにより、ダウンロードサイズははるかに小さくなりますが、クライアント側での作業はより複雑になります。1つのデータベースを読み取り、読み取った内容に基づいて別のデータベースを更新する必要があります。私の知る限りでは、sqliteを使用して、同じ構造を含む2つのsqliteデータベースで
insert into db1.table1 (select * from db2.table1)
あるwhereのようなことを行う方法はありません。(完全なsqliteデータベースには約10個のテーブルが含まれ、最大のテーブルにはおそらく約500個のレコードが含まれます。)db1
db2
table1
他の形式(json、xmlなど)でデータのデルタをダウンロードし、この情報を使用してアプリのデータベースを更新します。以前と同じです。サーバー側ではそれほど問題はなく、データベース全体よりもダウンロードサイズは小さくなりますが、更新を行うには非常に面倒なプロセスです。
3つのアプローチのどれをお勧めしますか?それとも、私が逃した別の方法がありますか?
よろしくお願いします。