2012-04-18 9 views
0

データベースには220,000以上のエントリを持つ辞書アプリケーションを設計しています。 最初に、データベースを検索するための弱いパフォーマンスの後に、データを格納するために単一のEntityを使用しました。データベース設計を変更して、各アルファベットに基づいてエンティティを作成しました。NSFetchResultControllerは非常に大きなコアデータに対応していません

私が使用していたメソッドは、NSArrayに検索オブジェクトに一致するすべてのデータを取得していたため、パフォーマンスが許容できませんでした(各キーストロークがUIViewを約3秒間フリーズさせました)。 NSFetchResultController。 FRCは私のアプリをもっと反応させました(キーストロークあたり1-1.5秒)が、これは受け入れられない結果に終わりました。

パフォーマンスを向上させるために私をさらに導くことができたら本当にありがたいです。

+0

関連する属性のインデックスを作成しましたか? – CarlJ

+0

私は、単語が参照するデータベースのタイプを示す属性を持っています。それに応じて、関連するデータを取得します。... – Mike

+0

http://en.wikipedia.org/wiki/Index_(database) – CarlJ

答えて

0

CoreDataはオブジェクトグラフなので、必要なソート/検索アルゴリズムを実装できます。トライは確かにここで良いでしょう...試してみるのは簡単です。

しかし、これを行う前に、CoreDataの新しい機能を使用し、検索に使用している属性にインデックスを追加します。

Xcodeを使用してモデルを起動し、エンティティを選択します。右端にある属性インスペクタで、エンティティに名前を付ける場所のすぐ下に、検索インデックスを設定する場所があります。驚くほど十分に「インデックス」と呼ばれています。

すべての検索を行う属性を追加します。データベースはそのフィールドに索引を保持し、検索するとデータベース全体を線形検索する必要はありません。

1

ディクショナリのエントリを格納および参照するための優れたデータ構造は、Trie(またはKnuthボリューム3 p492)です。この構造を使用しているときにコアデータを使用してデータを保存する場合は、サブクラスNSAtomicStoreに構造を実装する必要があります。

+0

情報をありがとう、グラハムリー。 iOSでTrieを実装する方法を理解するためのチュートリアルやサンプルコードを教えてください。 – Mike

+0

「Trie in C」の素早いGoogleは、いくつかの有望な結果を示しています。 –

関連する問題