0

オフラインアクセスを実行する必要があるモバイル(AndroidおよびiPhone)アプリケーションがあります。より合理化された方法でアプリ側のSqLiteデータベースを更新するための最良の方法についてのアイデアを得たいと思います。

  1. 私が見つけた1つの方法は、すべてのオブジェクトをWebサービス経由でJSON形式で送信することであり、更新があるかどうかを確認するためのタイムスタンプチェックがあります。更新がある場合は、すべてのテーブルが切り捨てられ、アプリ側に再度挿入されます。非常に非効率的だと思います。

  2. もう1つの方法は、(JSONでラップされた)Webサービスを介してSQLステートメントを送信することです。初めてすべての挿入レコードを送信します。以降、新しいレコードまたは更新がある場合は、レコードを挿入し、レコードを更新します。この方法は非常に安全ではないと感じています。

RestfulWebサービスを使用してそれを実行するための最良の方法は何ですか

4

1 に答える 1

0

いくつかのオプションがあります。完全なリストではありませんが、考え始めるためのより多くの例があります。

  • バージョン 1 を最適化するには、変更された行のバージョン フィールドを更新するトリガーをサーバー側で作成できます。そうすれば、クライアントのバージョンが 47 で、サーバーのバージョンが 52 であることがわかっている場合、クライアントを最新の状態にするには、バージョン番号が 48 から 52 の行を送信するだけでよいことがわかります。これは、多くのデータを送信する「すべての緑の行を puce に更新」するのではなく、更新がほとんど行ごとに行われる場合に最適です。

  • バージョン 2 をもう少し安全にするために、テーブル名を除くすべての SQL を送信して、特定の操作 (たとえば、UPDATE/INSERT/DELETE、SELECT なし) および特定のテーブル (つまり、更新なし) への変更をロックダウンできます。同じデータベース内の他のテーブル)。これは維持するのがやや難しいかもしれませんが、たとえば、データベースの大部分が単一の UPDATE によって影響を受ける可能性がある場合は、うまく機能します。

  • データベースへの操作をビジネス操作に分解し、代わりに送信します。たとえば、ビジネス オペレーションが「Payment made: User2, $47」である場合、オペレーション自体がクライアントに送信され、「Payment made」をデータベースの更新にマップします。これには、操作の数をかなり少なく定義する必要があります (いずれにせよ、それらを定義しようとするのはほとんど悪い考えではありません)。同期まで (クライアントがまだ受信していない場合に一度だけ送信するように操作に番号を付ける場合) また、監査ログを無料で提供します。ユーザーの残高が変化しただけでなく、何変化したかがわかります。

個人的には、データベースの更新が実際に何を意味し、いつ行われたかを知りたいので、選択肢があればオプション 3 を選びますが、既存のシステムでは、あまりにも多くの作業になる可能性があります。

于 2013-02-11T09:21:47.790 に答える