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

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

什么是最好的发货方式,以便快速查找和检索价值?

我怀疑plist不是这种大小的数据集的方法。

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

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

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

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

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

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

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

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

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

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

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

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

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

按照此处所述导入csv文件 : 将csv文件导入sqlite

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

对于sqlite的Objective-c包装器,我喜欢fmdb