非常大的NSDictionary与核心数据vs SQLite在iPhone上只读查看?

时间:2010-08-28 14:48:04

标签: iphone sqlite core-data plist nsdictionary

我正在修改一个iPhone文字应用程序,我正在使用DAWG结构,在用户输入时实时查找来自用户定义的字库的字谜。那部分效果很好。识别出单词后,我想检索有关plist文件中当前所有单词的具体信息(用单词键控)。这些信息需要在应用程序启动时导入并可用。

在启动时,我可以使用initWithContentsOfFile轻松地将plist准备到NSDictionary对象中,但这会创建一个包含~200,000个键/值对的字典。我猜这不是最好的方法,因为txt,bin和xml格式的plist文件分别是2.8 MB,3.9 MB和7.5 MB。

我应该使用Core Data还是SQLite?我的首要任务是性能,因为我希望在用户输入的情况下实时查看数万个实时结果的信息。

由于

2 个答案:

答案 0 :(得分:6)

您只能通过尝试两种方法和分析来回答性能问题(使用Instruments.app)。也就是说,有很多Core Data提供对象图管理功能,听起来并不像你需要的那样。如果您真正想要的是键值存储,那么使用NSDictionary是有道理的。您应该使用内存中持久性存储与核心数据堆栈进行比较。如果您的目标是最大读取性能并且可以将整个数据集放入内存中,那么没有理由在磁盘上使用SQLite或Core Data持久性存储。

答案 1 :(得分:1)

当有数百万行索引时,Sqlite可能遇到一些性能瓶颈。 这可能是一种矫枉过正,但在某些情况下,一个可能的黑客就是将主表简单地分成3/4个较小的表。例如,根据您的数据库设计,您可以打破跨越多个dbs的单词。

A-e.sqlite F-l.sqlite M-z.sqlite

然后在执行查找时,您可以动态切换select语句以选择相应的db。