使用iPhone应用程序发送120万条记录

时间:2011-12-03 22:13:13

标签: ios iphone

我拥有120万个键值对的数据集。键是一个字符串(一个长度最多为22个字符的数字序列),值是字符串。

发送此信息的最佳方式是什么,以便快速查找和检索值?

我怀疑一个plist不适合这样大小的数据集。

我有两种方式存储数据集 - CSV和带有2列的mySQL数据库表。一世 ll继续使用任何方法将数据最好地导入应用程序。

4 个答案:

答案 0 :(得分:3)

Core Data和SQLite是处理iOS中非常大的数据集的两个不错的选择。为您正在讨论的数据类型创建核心数据模型并不困难。然后,您可以将该模型复制到您要编写的小命令行程序中,以将数据移动到Core Data存储中。然后,您可以将生成的数据文件移动到iOS应用程序的资源中。

第三种选择,如果数据可能经常更改,则特别有用,就是构建一个Web服务来提供来自服务的数据。我不认为这是你所要求的,但如果数据集非常大和/或经常变化,那就需要考虑。

答案 1 :(得分:2)

一组文本文件可以很好地工作。你可以:

  • 将它们分成多个文件(例如,通过引导字符范围)。
  • 适当地订购对(例如,通过字符编号)
  • 并根据需要快速/轻松地逐步/部分阅读。
  • 平衡文件读取和内存使用之间的资源。
  • 为字符串选择正确的编码也有帮助(如果它主要在ascii中,我会从utf8开始)。

如果您还关注分发大小,则可以压缩/解压缩这些文件。

或者您可以采用这种方法并使用自定义序列化类来表示集合的子集,如果这听起来像是太多的解析和读取实现。

如果您使用objc类型进行存储和/或解析,那么将这些文件保持在较小的状态会很好。如果你使用c或c ++,那么它将有助于分析应用程序。

使用每字符8位单字节编码,您的数据集最多需要30 MB。一个大文件(再次,有序),你mmap也值得考虑。见[NSData initWithContentsOfMappedFile:path];

答案 2 :(得分:0)

我个人的经验是有一个只有数千条记录的plist文件,我可以说它不是那么快。所以我对这些数据的选择是:

  • 数据库。
  • 或者,如果您有这些键的排序标准,并且更喜欢plist 文件将其拆分为多个文件,并使用每个文件的开始键保留引用字典。对于前者所有以'abc'开头的键都进入a.plist等。

(我不知道您的应用是否属于这种情况,但您可以考虑将数据移至服务器并通过网络服务进行搜索,特别是如果您的数据会增长。)

答案 3 :(得分:0)

sqlite文件可能是你最好的选择。您可以使用命令行sqlite3或任何sqlite gui在桌面上创建它。确保索引键列。

按照此处所述导入csv文件:Importing csv files into sqlite

然后只需将数据库添加到项目/目标中。但是,如果要在运行时修改数据库,则必须将其复制到Documents或缓存目录中。

对于围绕sqlite的objective-c包装器,我喜欢fmdb