1

Core Data を使用して、大量 (1000 秒) のアイテムを保存しています。各アイテムのプロパティのペアは一意性を判断するために使用されるため、新しいアイテムが入ってくると、それを挿入する前に既存のアイテムと比較します。着信データは RSS フィードの形式であるため、多くの重複があり、一意化ステップのコストは O(N^2) であり、かなりの量になっています。

現在、(可能性のある) 新しいアイテムのリストを反復処理する前に、既存のアイテムのセットを作成しています。私の理論では、最初の反復ですべての項目に障害が発生し、記憶に追われていないと仮定すると、これらの項目のほとんどは反復の過程で常駐したままになるというものです。

私のオプションは次のように表示されます。

  1. 一意化、すべての「新しい」アイテムの繰り返し、およびすべての既存のアイテムとの比較に文字列比較を使用します (現在のアプローチ)
  2. 述語を使用して、「新しい」アイテムのプロパティに対して既存のアイテムのセットをフィルター処理します。
  3. Core Data で述語を使用して、各「新しい」アイテムの一意性を判断します (既存のアイテムのセットを取得する必要はありません)。

オプション 3 は、現在のアプローチよりも高速になる可能性がありますか? もっと良い方法を知っていますか?

4

3 に答える 3

2

整数ハッシュ値の比較 — 着信 RSS ニュース項目のコンポーネントのハッシュを生成し、述語を使用して同じハッシュ属性値を持つすべての項目をフィルタリングし、オブジェクトが取得されたかどうかを確認します — の文字列比較よりもパフォーマンスが向上する場合があります。すべてのエンティティ内のすべての属性。

于 2010-05-30T03:40:37.343 に答える
1

ohhorob が提案したソリューションの 3 番目のステップは、「検索または作成を効率的に実装する」セクションのCore Data ドキュメントで説明されているように、おそらく最も効率的に実装されます。つまり、入力アイテムとそれに対応する既存のアイテムの両方をハッシュ プロパティの後に並べ替えてから、2 つのコレクションを並行してループします。

于 2010-06-03T20:19:28.450 に答える
0

アレックスの回答によると、整数プロパティの述語はより高速である必要がありますが、タスクに合わせて戦略を調整する必要があります。

  1. すべての着信アイテム ハッシュのリストを収集する

  2. そのハッシュ リストに一致するすべてのオブジェクトを取得します (ハッシュ プロパティのみを取得します)

  3. フェッチされた一致にハッシュがあるものをスキップして、着信アイテムを反復処理します

さらに、ディクショナリの結果をフェッチして、使用しない管理対象オブジェクトを設定することを避けることができます (同一の受信アイテムをスキップするのではなく、既存のオブジェクトを更新するつもりでない限り)。

于 2010-05-30T05:12:32.910 に答える