2012-03-16 7 views
2

REST APIを使用してAndroidアプリケーションとリモートサーバー間のデータ同期を最適に処理する方法を設計しようとしています。REST APIによるAndroidサービスとサーバー間のデータの同期処理

まだ初期の段階ですが、私は自分のレストサーバーを基本的に実行しています(とにかくテスト目的で十分です)。

私は3つのテーブルを同期させます(以下にリンクしています)。

SHOW> -----シーズン> ----- EPISODE

サーバとデバイスの両方がこれらのテーブルの同様のバージョンを持っていると私はデバイスからサーバにそれらを同期する必要があります(今、最終的には2のために方法)。同期は、バックグラウンドでREST API(挿入/更新および削除)への非同期呼び出しを行うAndroidサービスを通じて行われます。

私の主な問題は、両側がそれに応じて更新されるようにするロジックが出てくることです。

デバイスからサーバーへの挿入/更新はPOSTリクエストによって行われるので、ON INSERT/ON UPDATE TRIGGERS(SQlite)を使用して3つのテーブルに状態フラグを設定すると、同期サービスが機能しますサーバー上に移動する必要がある行。 これは正しいアプローチですか?

それは私しかし、BEFORE使用してSQLiteのは、サービスが参照できることを「TODELETE」テーブルを埋めるためにトリガーDELETEとのメインアプリから独立している、削除のために今すぐサービスを

CREATE TRIGGER sync_update_show AFTER UPDATE ON show 
BEGIN 
    UPDATE show SET sync_flag = 'TO_SYNC' WHERE _id = new._id 
END 

のようになります。サーバーへのapi呼び出しを削除します。 これは正しいアプローチですか?

それはアプリの同期にサーバーに来るとき、それは今

CREATE TRIGGER sync_delete_show BEFORE DELETE ON show 
BEGIN 
    INSERT INTO todelete_show 
    SELECT * FROM show WHERE _id = old._id 
END 

ようになります私はすべてのレコード(API呼び出しを)になるだろうと、デバイス上で削除/挿入/更新を扱うには(ブラウジング返されたレコードを介して)。しかし、帯域幅を最適化するより効率的な方法があるかもしれません(返されるJSONは大きいかもしれません)。

サービスインプリメンテーションの作業を開始したくないと思ったので、私はそれをすべて歓迎します。

答えて

0

トリガーを使用したアプローチが確実に機能すると思います。すべてのネットワーク操作を記録するために単一の「SYNC」テーブルを使用することをお勧めします。可能であれば実行し、タスクを実行した後は、 "SYNC"テーブルから削除してください。

多くのAndroid APIをアクティビティ/フラグメント、特にCursorLoadersやCursorAdaptersでより簡単に活用できるため、テーブルを格納するためにContentProviderを実装することを強くお勧めします。

contentProvidersを見てみましょう:http://developer.android.com/guide/topics/providers/content-provider-creating.html

もがSyncAdapterを見てみましょう: http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html

また、Android上で安らかなアプリケーションをbuldingについては、この話をチェックアウト少し古いですが、私はそれだと思います依然として非常に有効です http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html

+0

は、情報をありがとう:ここhttp://openmobster.googlecode.com

は、その働きの一部を理解するためのチュートリアルです。私は、残りのサーバー以外の他のアプリケーションとコンテンツを共有することを計画していないので、私はこの時点でContentProviderが必要とは思わない。私は未来のために間違いなくそれを考慮する! – Madoc

1

データベーストリガーを使用して変更履歴を管理する方法は間違いなく機能します。よりオブジェクト指向のアプローチが必要な場合は、ビジネスオブジェクト用のCRUD APIを公開し、API内で更新/挿入/削除マーカー付きの変更ログテーブルを更新し、データベーストリガーを使用しないでください。

あなたがSync Frameworkの使用に興味がある場合は、OpenMobsterの同期サービスに注目したいと思います。

あなたは、次の同期操作にそのほかに

  • 双方向
  • 片道クライアント
  • 一方向デバイス
  • 起動時

を行うことができ、すべての変更があります自動的に追跡され、クラウドと同期されます。ネットワーク接続が切断されると、あなたのアプリケーションをオフラインにすることができます。変更があれば追跡し、バックグラウンドで自動的にクラウドと同期させます。

iCloudのような複数のデバイス間での同期もサポートしています。

クラウドでは、データにCRUDインターフェイスであるJavaチャネルを作成し、そのチャネルを同期エンジンに公開するだけです。デバイス側では、このデータはCRUDベースの同期APIを介して利用できます。チェンジログの管理、競合管理、複数のデバイスへのレプリケーションなど、その他すべての同期の詳細は、同期エンジンによって自動的に処理されます。

あなたのケースでは、

変更履歴が自動的に管理されており、同期エンジンと統合されています。これは私が言及したオブジェクト指向のアプローチを使用し、同期はCRUDベースの同期APIによって処理されます。ここで

は、オープンソースプロジェクトへのリンクです:http://code.google.com/p/openmobster/wiki/AndroidSyncApp

関連する問題