NSFetchResultController不响应非常大的核心数据库

时间:2012-04-18 10:09:49

标签: ios core-data

我正在设计一个字典App,它拥有一个至少220,000个条目的数据库。 首先,我使用单个实体来存储我的数据,然后在搜索数据库的性能较弱之后,我将数据库设计更改为基于每个Alphabet的实体。

然后,因为我使用的方法是将所有匹配搜索对象的数据提取到NSArray中,我的性能是不可接受的(每次击键使我的UIView冻结约3秒),所以我改为NSFetchResultController 。 FRC使我的应用程序响应更快(每按键1-1.5秒),但这仍然是不可接受的结果。

如果你能进一步指导我,我会非常感激,因此我可以提高表现。

2 个答案:

答案 0 :(得分:1)

用于在字典中存储和查找条目的良好数据结构是Trie(或Knuth卷3 p492)。如果您想在使用此结构时继续使用Core Data存储数据,则应在NSAtomicStore的子类中实现该结构。

答案 1 :(得分:0)

由于CoreData是一个对象图,您可以实现所需的任何排序/搜索算法。在这里,特里肯定会很好......尝试很容易实现。

然而,在我这样做之前,我会使用CoreData的新(呃)功能,并在您用于搜索的属性上添加索引。

使用Xcode打开您的模型,然后选择您的实体。然后,在最右侧,在属性检查器中,在您为实体命名的位置下方,可以设置搜索索引。令人惊讶的是,它被称为“索引”。

添加您对其进行搜索的属性。然后,数据库将在该字段上维护索引,当您搜索它时,您不必线性搜索整个数据库。