0

コア データを使用して Web サーバーからの情報を保存するアプリを作成しています。インターネット接続がある場合、アプリはエントリに変更があるかどうかを確認し、更新します。さて、どうするのが一番いいのか考え中です。データベースの各エントリには、最終更新のタイムスタンプがあります。次の 2 つのうち、どちらが効率的でしょうか。

  1. すべてのエントリを確認し、タイムスタンプをチェックして、更新が必要なエントリを確認します。
  2. エンティティ全体を削除し、すべてを再度ダウンロードします。

これが明白な質問のように思われる場合は申し訳ありませんが、ありがとうございます!

4

3 に答える 3

1

私は最近、似たようなことをしました。

この問題を解決するには、一意の ID とグローバルな「更新されたタイムスタンプ」を割り当て、「デルタ」変更について考えます。

もっと詳しく説明すると、ユーザー設定にグローバルな「最新の更新」変数が保存されており、デフォルト値は 01/01/2010 です。

これは大まかに私の JSON サービスです。

response: {
  metadata: {latestUpdate: 2013...ecc}
  entities: {....}
}

次に、これが起こっていることです:

  1. 「最新の更新」を Web サービスに渡し、エンティティのリストを取得する
  2. コア データ ストアを更新する
  3. すべてがコア データでうまくいった場合、サービス メタデータからの「latestUpdate」は、ユーザー設定に保存された新しい「最新の更新変数」になりました。

それでおしまい。必要な変更のみを取得しています。もちろん、Web サービスは適切なリストを提供するように構成されています。つまり、データベースに支えられた Web サービスは、この問題をうまく処理することができ、iPhone を「単純なクライアント」のみにすることができます。

しかし、少量のデータの場合、リクエストごとにリスト全体をダウンロードする方がパフォーマンスが高い (そしてバグが少ない) と言わざるを得ません。

于 2013-08-26T10:12:55.337 に答える
1

1必要な部分のみをダウンロードするよりも、すべてをダウンロードする方が効率的である (特に大量のデータを含む大規模なデータベースの場合) ことはめったにないため、オプションが最も効率的であると言えます。

于 2013-08-26T04:39:00.170 に答える
0

上記のコメントで説明したように、コア データ オブジェクト エントリを次のようなバージョン管理でモデル化できます。

CoreDataEntityPerson:
     name : String
     name_version : int
     image : BinaryData
     image_version : int

次の方法でサーバー xml をモデル化できるようになりました。

  <person>
      <name>michael</name>
      <name_version>1</name_version>
      <image>string_converted_imageData</image>
      <image_version>1</image_version>
  </person>

これで、次の手順に従うことができます。

  1. 応答が到着し、それを解析すると、最初にエンティティから新しいオブジェクトを作成し、データを直接入力します。

  2. 次回、サーバーで更新を実行するときは、エントリのバージョン カウントを 1 増やして保存します。たとえば、名前 michael が abraham に変更された場合、サーバー上の name_version のバージョン数は 2 になります。

  3. この更新されたバージョン カウントは、応答データに含まれます。

  4. ここで、同じオブジェクトにデータを格納しているときに、バージョン カウントが同じであることがわかった場合は、そのエントリのデータ更新をスキップできますが、バージョン カウントが変更されることがわかった場合は、そのエントリの更新が必要です。行われなければ。

このようにして、各エントリのチェックを効率的に実行し、変更されたエントリに対してのみ更新を実行できます。

アドバイス:

  1. 上記のアプローチは、大量のデータ更新を扱っている場合に最適です。

  2. オブジェクトの単純なテキスト エントリの場合、すべてのエントリのデータを単純に上書きするだけで十分効率的です。また、これにより、データ応答モデルがシンプルに保たれます。

于 2013-08-26T06:28:45.113 に答える