4

iOS 5.1.1 を搭載した ipad で coredata db を実行しています。私のデータベースには約 50,000 社の企業が含まれています。会社名属性にインデックスを作成しました。私はこの属性を検索しており、場合によっては fetchRequest で数千のレコードが返されます。

数千のレコードが返されると、フェッチから戻るまでに数秒かかることがあります。これにより、先行入力検索が非常に扱いにくくなります。

将来的にはもっと大きなデータベースができると思います。非常に高速な検索機能を実装するためのオプションは何ですか?

ありがとう。

4

2 に答える 2

3

過去数回の WWDC のコア データ パフォーマンス ビデオを見ることをお勧めします。彼らは、この種のボトルネックを改善するための戦略についてよく話します。ビデオからのいくつかの提案:

  • 名前フィールドを別の「大文字と小文字を区別しない」フィールドに非正規化し、代わりに、またはsearchStringを使用してそのフィールドを検索します。回避およびワイルドカード。<<=BEGINSWITHMATCHES
  • NSFetchRequestusingfetchLimitおよびによって返される結果の数を制限するfetchBatchSize
  • 会社のオブジェクトが大きい場合は、重要なデータ項目の一部を、検索インターフェイスだけに使用される別の小さな「ヘッダー」オブジェクトに抽出できます。次に、ユーザーが選択を行ったときに、リレーションシップをメイン オブジェクトに戻します。

いくつかのビデオへのポインタ (他の年のビデオもあります):

WWDC 2012: セッション 214 - コア データのベスト プラクティス: 45:00

WWDC 2010: セッション 137 - iPhone OS でのコア データ パフォーマンスの最適化: 34:00

于 2012-09-19T15:35:03.257 に答える
1

多くの場合、Core Data は正しいツールですが、決して特効薬ではありません。

いくつかの最適化戦略と、Core Data の代わりに SQL データベースが適しているケースについて説明しているこの投稿をチェックしてください。

http://inessential.com/2010/02/26/on_switching_away_from_core_data

この場合、Core Data エンティティの属性値にアクセスしようとすると、通常は障害が発生し、オブジェクトがアクティブ メモリにプルされるため、この場合、Core Data の代わりに SQL データベースを使用した方がよいかもしれません。パフォーマンスと速度のコスト。真のデータベースの使用 - Core Data は真のデータベースではありません。http://cocoawithlove.com/2010/02/differences-between-core-data-and.htmlを参照してください- データベースからオブジェクトを作成せずにデータベースにクエリを実行できます。

于 2012-09-18T17:04:30.307 に答える