0

我正在设计一个字典应用程序,它的数据库至少有 220,000 个条目。首先,我使用单个实体来存储我的数据,然后在搜索数据库性能不佳之后,我将数据库设计更改为具有基于每个字母表的实体。

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

如果您能进一步指导我,我将不胜感激,这样我就可以提高性能。

4

2 回答 2

1

用于在字典中存储和查找条目的良好数据结构是Trie(或 Knuth 卷 3 p492)。如果你想在使用这个结构时继续使用 Core Data 来存储你的数据,你应该在NSAtomicStore.

于 2012-04-18T10:22:40.200 回答
0

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

但是,在我这样做之前,我会使用 CoreData 的新功能,并在您用于搜索的属性上添加一个索引。

使用 Xcode,调出您的模型,然后选择您的实体。然后,在最右侧,在属性检查器中,在您为实体命名的正下方,有一个设置搜索索引的地方。令人惊讶的是,它被称为“索引”。

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

于 2012-04-18T17:08:44.200 回答