22

私は大規模アプリのコア データ モデルのセットアップを開始しており、サーバー データベースとオフライン機能に関しては、適切な同期方法/テクニックに関するフィードバックを期待していました。

Web サーバー / データベースに PHP と mySQL を使用しています。

接続方法、データの受信方法、コア データへの保存方法などは既に知っています。データの変更を追跡するための方法論と特定のインスタンスについて、次のようなヘルプを探しています。

A) オンラインとオフラインの使用中にアプリとサーバーが同期していることを確認します (つまり、オンラインに戻ると、オフライン アクティビティがプッシュアップされます)。B) アプリにデータを保存する速度を最適化します。

私の主な質問は次のとおりです。

アプリ内のどの新規/更新データを同期する必要があるか (オフラインで使用した後) を確認する最善の方法は何ですか?

(つまり、すべてのコア データ エンティティで、BOOL タイプの「isSynchronized」属性を設定します。次に、正常に送信されたら「YES」に更新し、応答がサーバーから返されます)。これが最善の方法ですか?

サーバーからコアデータへのデータ保存速度を最適化する最良の方法は何ですか?

(つまり、各エンティティを反復処理して毎回更新することなく、サーバー データベース上のデータよりも古い Core Data のデータのみを更新するにはどうすればよいですか?) 更新タイムスタンプを追跡するためのサーバーデータベース列をすべてのテーブルに追加せずにそれは可能ですか?

繰り返しますが、データをダウンロードして Core Data に保存する方法は既に知っています。最適化された処理時間を確保しながら、アプリ データベースとサーバー データベース間の同期を確保するためのベスト プラクティスに関するヘルプを探しています。

4

1 に答える 1

9

電話のコア データ レコードとサーバーの mysql テーブルの両方のデータベースに、最終変更のタイムスタンプを保存します。

電話は、最後の同期以降に変更されたすべてのものを検索し、最後の同期のタイムスタンプと共にサーバーに送信します。サーバーは、提供された同期タイムスタンプ以降に変更されたすべてのもので応答します。

多くのレコードが変更された場合、パフォーマンスが問題になります。独自の管理対象オブジェクト コンテキストを持つバックグラウンド NSOeartion で同期を行います。バックグラウンド スレッドがその管理対象オブジェクト コンテキストへの変更を完了すると、すべての変更をメイン スレッドの管理対象オブジェクト コンテキストにマージするための API があります。同期の進行中にユーザーがデータを変更します。その場合は、数秒待ってからもう一度同期を試みます。

古いハードウェアでは、多くの最適化を行った後でも、ユーザーがアプリで操作を開始した場合、同期を完全に中止する必要がありました。単にシステム リソースを使いすぎていたのです。最新の iOS デバイスはおそらく十分に高速であり、もうそれを行う必要はないと思います。

(ちなみに、「多くのレコードが変更された」と言ったのは、電話で30,000行ほどが更新または挿入されていることを意味していました)

于 2013-03-22T03:17:10.443 に答える